将CatBoost回归与具有相同random_seed的CPU和GPU一起使用时,指标得分不同

时间:2019-04-10 08:48:14

标签: python gpu cpu catboost

使用CPU和GPU运行相同的代码会给我不同的RMSE分数。为什么?

在要素工程和要素选择阶段进行调整时,我一遍又一遍地运行以下代码。

from catboost import CatBoostRegressor

model = CatBoostRegressor(iterations=1000, learning_rate=0.05, depth=5, random_seed=69);

df_ser_full.Model.fit(
    X_train,
    y_train, 
    use_best_model=True,
    eval_set=(X_test, y_test),
    plot=True,
    silent=True
    );

过了一会儿,我已经厌倦了等待培训,因此我改用第二行代码替换以下内容,从而在GPU而不是CPU上进行培训

model = CatBoostRegressor(iterations=1000, learning_rate=0.05, depth=5, task_type='GPU', random_seed=69);

现在培训速度加快了约5倍,但我注意到该指标显着下降(测试集中的RMSE从0.13955@CPU降至0.14377@GPU)。 GPU和CPU是否通过相同的接口使用不同的随机数生成器,还是我还缺少其他功能?

我正在使用以下硬件

  • 英特尔酷睿i9-8950HK(CPU @ 2.90GHz)
  • NVIDIA Quadro P2000

1 个答案:

答案 0 :(得分:0)

有两件事可能会影响结果:

  1. border_count参数的默认值对于CPU默认为255,对于GPU默认为127

因此,请尝试将其设置为255,如果有帮助,请在此处写下。

    GPU训练不是确定性的,因为它使用了导数的原子加法。因此,每次您进行GPU培训时都会得到略有不同的结果。不过,这应该不会对质量产生太大影响。