2017-12-12 14 views
0

현재 로지스틱 회귀를 필요로하는 비즈니스 프로세스 중 하나에 대해 개념 증명을하고 있습니다. 나는 아래의 코드에 따라 데이터 세트에 대해 분류를 수행하기 위해 통계 모델을 사용하고있다. 우리의 데이터 세트는 약 10M 행과 약 80 개의 피쳐 (약 70+가 정의 된 범주 형 변수에 따라 "1"또는 "0"과 같은 더미)로 구성됩니다. 더 작은 데이터 세트를 사용하면 glm이 잘 작동하지만, 전체 데이터 세트에 대해 실행하면 파이썬이 "메모리를 할당 할 수 없습니다"라는 오류를 발생시킵니다. 통계 모델에 대한 다중 처리 줄이기 glm

glmmodel = smf.glm(formula, data, family=sm.families.Binomial()) 
glmresult = glmmodel.fit() 
resultstring = glmresult.summary().as_csv() 

은 (내가 잘못 생각하는 경우 나 수정하시기 바랍니다 날이 가능한 모든 CPU 코어를 사용할 수 있도록 설계되었습니다 인해 statsmodels에있을 생각하고 각 하위 프로세스는 아래 RAM에 데이터 세트의 복사본을 생성 있어요). glm이 최소한의 코어를 사용하는 방법이 있다면 지금 질문이 될 것입니다. 나는 성능이 아니지만 전체 데이터 세트에 대해 glm을 실행할 수 있기를 원합니다.

다음은 기계 구성 및 필요한 경우 추가 정보입니다.

CPU: 10 cores 
RAM: 40 GB (usable/free ~25GB as there are other processes running on the 
same machine) 
swap: 16 GB 
dataset size: 1.4 GB (based on Panda's DataFrame.info(memory_usage='deep') 

답변

0

는 GLM은 선형 algbra 라이브러리

이 나타 곳은 다른 문제에 대한 몇 가지 링크를 포함 https://github.com/statsmodels/statsmodels/issues/2914 의 다음 사본을 내 자주 묻는 질문 문제 설명을 통해 멀티 프로세싱을 사용합니다.

(인용 : 그것은 우리의 통제하에 어디

Statsmodels 병렬 처리를위한 몇 가지 장소에서 JOBLIB을 사용하고 있습니다. 현재의 사용은 주로 부트 스트랩에 사용되며 모델에서 직접 사용되지 않습니다.

그러나 numpy/scipy에있는 기본 Blas/Lapack 라이브러리 중 일부는 여러 개의 코어를 사용합니다. 대용량 배열을 사용하는 선형 대수학에서는 효율적일 수 있지만, 특히 더 높은 레벨에서 병렬 처리를 사용하고자 할 때 연산 속도가 느려질 수 있습니다.

선형 대수 라이브러리에서 사용하는 코어 수를 어떻게 제한 할 수 있습니까?

이것은 선형 대수 라이브러리가 사용되는 방식에 따라 다릅니다. https://groups.google.com/d/msg/pystatsmodels/Lz9-In0pgPk/BtcYsj_ABQAJ

openblas 메일 링리스트 스레드를 참조하십시오 OSX에 가속 = 1

환경 변수 OMP_NUM_THREADS을 설정하려고, 아나콘다에

MKL VECLIB_MAXIMUM_THREADS 설정 :

import mkl 
mkl.set_num_threads(1)