我正在尝试使用Python中的多进程池训练完全独立的任务,其中使用了LightGBM进行训练(我不确定这是否与问题相关)。以下是代码:
from sklearn.datasets import load_breast_cancer
import pandas as pd
from sklearn.model_selection import train_test_split, KFold
import lightgbm as lgb
import numpy as np
def functionToParallize(splitnumber=2):
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)
X_train, X_test, y_train, y_test = train_test_split(X, y)
folds = KFold(splitnumber)
results = lgb.cv({}, lgb.Dataset(X_train, y_train), folds=folds,metrics=['rmse'])
return results
为了进行并行化处理,我使用多进程池(pool),比如说使用2个进程池工作。但是它非常低效,因为使用2个进程池完成任务所需的时间是只使用一个进程池的1000倍。例如:
from multiprocessing import Pool
import psutil
print(psutil.cpu_count())
输出
4
starttime=time.time()
pool = Pool(2)
multiple_results = [pool.apply_async(functionToParallize) for i in [3]]
p=[res.get() for res in multiple_results]
print((time.time()-starttime)/60)
输出
0.007067755858103434
但有两个池塘
starttime=time.time()
pool = Pool(2)
multiple_results = [pool.apply_async(functionToParallize) for i in [2,3]]
p=[res.get() for res in multiple_results]
print((time.time()-starttime)/60)
1.026989181836446
这实际上不是原始任务,但我在那里做了类似的事情。但是对于那个单独的任务,需要大约一分钟时间,而池2进程根本就不停止。我在Jupyter笔记本上进行操作,如果相关的话,请问我做错了什么吗?
任何帮助都将不胜感激!谢谢!