我们在具有24个内核和2个M60 GPU的Azure NV24s v3上从源代码构建了LightGBM v2.3.2。根据LightGBM的文档,建议使用较小的max_bin值来提高GPU速度。但是较小的max_bin值会使它比我的测试更慢。
使用默认的max_bin值(例如255),用120万行训练数据和140K行验证数据计算以下训练需要30秒。每行有160列。然后使用GPU,耗时36秒。使用top和nvtop命令,我发现CPU和GPU都在工作。它使用了全部24个内核和大约25%的GPU。
然后我将max_bin值减小到63,仅CPU花费了28.5秒。但是使用GPU则需要43秒。选择GPU后,将同时使用CPU和GPU。它使用了全部24个内核和25%的GPU。
如何提高GPU性能?培训代码如下所示:
lgb_train=lgb.Dataset(X_train, y_train)
lgb_valid = lgb.Dataset(X_valid, y_valid)
params = {
'learning_rate': 0.02,
'objective': 'binary',
'device' : 'gpu', # comment out this line to run in CPU only
'metric' : 'binary_logloss',
'max_bin': 63,
'random_state': 8
}
model=lgb.train(params, lgb_train,
num_boost_round=2000,
valid_sets=[lgb_train,lgb_valid],
early_stopping_rounds=35,
verbose_eval=50)