1

使用 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 是否通过相同的接口使用不同的随机数生成器,还是我还缺少其他东西?

我正在使用以下硬件

  • Intel Core i9-8950HK (CPU @ 2.90GHz)
  • 英伟达 Quadro P2000
4

1 回答 1

2

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

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

所以尝试将它设置为 255,如果有帮助,请写在这里。

  1. GPU 训练不是确定性的,因为它使用导数的原子添加。因此,每次您的 GPU 训练结果都会略有不同。不过,这对质量应该没有太大影响。
于 2019-05-16T16:59:29.013 回答