도커 컨테이너 내부에서 파이썬에 대한 다중 처리를 테스트하려고하지만 프로세스가 성공적으로 작성된 경우 (8 개의 CPU와 8 개의 프로세스가 작성된 경우)에도 항상 하나의 실제 CPU 만 사용합니다. 다음은 내 코드입니다 :Docker 내부의 다중 처리 파이썬 프로그램
from sklearn.externals.joblib.parallel import Parallel, delayed
import multiprocessing
import pandas
import numpy
from scipy.stats import linregress
import random
import logging
def applyParallel(dfGrouped, func):
retLst = Parallel(n_jobs=multiprocessing.cpu_count())(delayed(func)(group) for name, group in dfGrouped)
return pandas.concat(retLst)
def compute_regression(df):
result = {}
(slope,intercept,rvalue,pvalue,stderr) = linregress(df.date,df.value)
result["slope"] = [slope]
result["intercept"] = [intercept]
return pandas.DataFrame(result)
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logging.info("start")
random_list = []
for i in range(1,10000):
for j in range(1,100):
random_list.append({"id":i,"date":j,"value":random.random()})
df = pandas.DataFrame(random_list)
df = applyParallel(df.groupby('id'), compute_regression)
logging.info("end")
내가 --cpus처럼 실행하면 여러 개의 고정 표시기 옵션을 시도하거나 --cpuset하지만 항상에만 1 물리적 CPU를 사용하고 있습니다. Docker, Python, OS에서 문제가됩니까? 여기에, 실행시
>>> import multiprocessing
>>> multiprocessing.cpu_count()
8
최고입니다 : 도커 버전 1.13.1
cpu_count()
의 결과입니다. 주요 프로세스와 8 개의 하위 프로세스를 볼 수 있지만 그 비율은 이상합니다. 내가 4 개 프로세스로 변경하는 경우
그리고는, 사용 된 CPU의 총량은 항상 동일합니다 :
Mac 또는 Windows에서 Docker를 실행하는 경우 Docker는 VM 내부에서 실행됩니다. 해당 VM에 더 많은 CPU를 할당하려면 전체적으로 Docker를 구성해야합니다. ''docker run''에 대한 옵션은 그것을 무시하지 않고, VM이 사용할 수있는만큼 사용할 수 없습니다. –
실제로 리눅스에서 실행 중입니다 : ( – angelwally
) print (multiprocessing.cpu_count())를 수행하고 질문에 결과를 추가 할 수 있습니까? – hansaplast