joblib을 사용하여 임의의 사용자 지정 포리스트 구현 트레인을 병렬로 만들려고합니다.joblib 속도 저하 조사
작업이 당황스럽고 평행하므로 속도 향상이 joblib에 너무 어려워서는 안된다고 가정했습니다. 배치 및 증분 경우 두 개 이상의 작업을 사용하는 경우
class RandomForest(object):
def __init__(self, settings, data):
self.forest = [None] * settings.n_trees
self.parallel = Parallel(n_jobs=settings.njobs, backend="threading")
def fit(self, data, train_ids_current_minibatch, settings, param, cache):
self.forest = self.parallel(
delayed(_parallel_build_trees_batch)(
i_t, data, train_ids_current_minibatch, settings, param, cache)
for i_t, tree in enumerate(self.forest))
def partial_fit(self, data, train_ids_current_minibatch, settings, param, cache):
self.forest = self.parallel(
delayed(_parallel_build_trees_partial)(
tree, i_t, data, train_ids_current_minibatch, settings, param, cache)
for i_t, tree in enumerate(self.forest))
그러나, 훈련이 훨씬 느립니다 :
는 여기에 몇 가지 예제 코드입니다. 데이터 및 캐시 인수는 (큰) numpy 배열을 포함하는 dict입니다. 그래서 그 원인인지 궁금합니다. 맞춤 기능 NumPy와/scipy 코드를 많이 사용하기 때문에
내가 multiprocessing.Pool
를 사용하여 동일한 코딩 시도하고 JOBLIB의 threading
백엔드를 사용하지 않는 한 결과, 더 악화되어, 나는 가정합니다.
감속/디버그 방법에 대한 아이디어가 있으십니까?
내 게시물에 귀하의 질문에 대한 답변이 나왔습니까? – hansaplast