XGBRegressor + cross_val_score仅使用1个内核?

问题描述 投票:0回答:1

我有一个8核/ 16线程的CPU,我将cross_val_score和XGBRegressor都使用了njobs = 6,但它们实际上只使用了1个内核(在htop-Console中,只有1个CPU的负载为100%,其余为0%)。

for i,n_est in enumerate(range(20,105,5)):
    for j,m_dep in enumerate(range(3,10,2)):
        for k,l_rate in enumerate([0.0001,0.001,0.01,0.1]):
            sc = cross_val_score(estimator=xgb.XGBRegressor(njobs=6, 
                                                            max_depth=m_dep, 
                                                            learning_rate=l_rate, 
                                                            n_estimators=n_est), 
                                 X=X_train, 
                                 y=y_train,
                                 cv=5, 
                                 scoring='r2', 
                                 n_jobs=6)
        res[i,j,k] = np.mean(sc)
        l += 1
        print(l,end = '')

这怎么了?交叉价值得分必须易于并行化,因为它可以在5个独立的数据集上运行5个模型?

python multithreading cross-validation xgboost
1个回答
0
投票

好,看起来像

from joblib import parallel_backend
parallel_backend(backend='threading', n_jobs=-1)

帮助。现在,CPU至少在一部分时间内使用4-5核,并且计算速度更快。

UPD。 XGBoost参数确实解决了问题:

nthread=8

现在所有内核都已100%加载。

© www.soinside.com 2019 - 2024. All rights reserved.