Различные метрические показатели при использовании регрессии CatBoost с процессором и графическим процессором с одинаковым random_seed - PullRequest
0 голосов
/ 10 апреля 2019

Выполнение одного и того же кода с использованием 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 раз, но я заметил, что показатель значительно упал(Среднеквадратичное отклонение от тестового набора изменилось с 0,13955@CPU до 0,14377@GPU).Используют ли GPU и CPU разные генераторы случайных чисел с одним и тем же интерфейсом, или мне чего-то не хватает?

Я использую следующее оборудование

  • Intel Core i9-8950HK (процессор @ 2,90 ГГц)
  • NVIDIA Quadro P2000

1 Ответ

0 голосов
/ 16 мая 2019

Существуют две вещи, которые могут повлиять на результаты:

  1. Значение по умолчанию для параметра border_count по умолчанию составляет 255 для CPU и 127 для GPU

Так что попробуйте установить255, и, пожалуйста, напишите здесь, если это помогло.

Обучение GPU не является детерминированным, потому что оно использует атомарные добавления производных.Поэтому каждый раз вы будете получать немного другой результат для тренировок на GPU.Это не должно сильно влиять на качество.
...