XGBRegressor + cross_val_score использовать только 1 ядро? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть ЦП с 8 ядрами / 16 потоками, и я использую cross_val_score с XGBRegressor, оба с njobs = 6, но на самом деле они используют только 1 ядро ​​(в htop-Console только 1 ЦП имеет нагрузку 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 независимых наборах данных?

1 Ответ

0 голосов
/ 06 ноября 2019

ОК, похоже,

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

помогло. Теперь процессор использует 4-5 ядер как минимум часть времени, и вычисление выполняется быстрее.

UPD. Параметр XGBoost действительно решил проблему:

nthread=8

Теперь все ядра загружены на 100%.

...