Разница в AUC между lgbm с использованием CPU и CUDA

Вопрос или проблема

Я запускаю модель LightGBM (LGBM) с использованием Optuna для подбора гиперпараметров. Я заметил, что когда я обучаю модель на ЦП, я получаю разумные результаты, но когда переключаюсь на CUDA, результаты значительно отличаются, несмотря на использование одного и того же набора данных и гиперпараметров.

Я выбрал CUDA, потому что было очень сложно установить поддержку GPU в lgbm на моем Ubuntu 24.04.

Вот примеры выходных данных для двух испытаний:

ЦП:
[I 2024-12-25 18:40:54,259] Испытание 1 завершено со значением: 0.96723 и параметрами: {'max_depth': 20, 'num_leaves': 188, 'learning_rate': 0.08578578400625196, 'feature_fraction': 0.7216572610297012, 'bagging_fraction': 0.4419219700479399, 'min_child_weight': 0.014887941234276657, 'min_data_in_leaf': 92, 'reg_alpha': 0.6356352199016019, 'reg_lambda': 0.010827391067948873, 'max_bin': 206, 'bagging_freq': 9}. Лучшее - испытание 1 с значением: 0.96723.

CUDA:
[I 2024-12-25 18:30:31,551] Испытание 0 завершено со значением: 0.5 и параметрами: {'max_depth': 18, 'num_leaves': 182, 'learning_rate': 0.03985439690029623, 'feature_fraction': 0.5673740961484969, 'bagging_fraction': 0.3990905692888366, 'min_child_weight': 0.05598664897785008, 'min_data_in_leaf': 79, 'reg_alpha': 0.010695114708170927, 'reg_lambda': 0.17815651962009293, 'max_bin': 164, 'bagging_freq': 4}. Лучшее - испытание 0 с значением: 0.5.
[I 2024-12-25 18:30:54,259] Испытание 1 завершено со значением: 0.5 и параметрами: {'max_depth': 19, 'num_leaves': 188, 'learning_rate': 0.08578578400625196, 'feature_fraction': 0.7216572610297012, 'bagging_fraction': 0.4419219700479399, 'min_child_weight': 0.014887941234276657, 'min_data_in_leaf': 92, 'reg_alpha': 0.6356352199016019, 'reg_lambda': 0.010827391067948873, 'max_bin': 206, 'bagging_freq': 9}. Лучшее - испытание 0 с значением: 0.5.

Почему это различие? Код тот же самый. Я изменил только устройство с CPU на CUDA.

Ответ или решение

Различия в AUC между LGBM с использованием CPU и CUDA могут носить несколько взаимосвязанных причин. Давайте рассмотрим ключевые факторы, которые могут влиять на результаты ваших моделей и объяснить, почему вы наблюдаете такое несоответствие.

1. Различия в реализации

LightGBM использует разные реализации алгоритмов для CPU и GPU. Алгоритмы, работающие на CPU, могут отличаться от тех, которые оптимизированы для GPU, что может повлиять на производительность и качество модели. Проверьте, что версия библиотеки LightGBM поддерживает все необходимые функции для работы на GPU.

2. Параметры и их влияние

Обратите внимание на то, что несмотря на использование одних и тех же гиперпараметров, значение некоторых из них может иметь разное влияние в CPU и CUDA режимах:

  • Максимальная глубина (max_depth): Хотя вы можете использовать одинаковое значение, эффективность дерева решений может отличаться при разных реализациях.
  • Количество листьев (num_leaves): Это значение также может интерпретироваться по-разному в зависимости от устройства. GPU может быстрее достигнуть оптимального числа листьев, но в то же время может привести к переобучению.
  • Обучающие параметры: Параметры обучения, такие как learning_rate, могут вести себя непоследовательно в зависимости от реализации.

3. Случайность и гиперпараметрическая оптимизация

Вы используете Optuna для гиперпараметрической оптимизации, и стоит отметить, что результаты могут варьироваться из-за случайности, встроенной в процесс. Даже если вы используете одни и те же данные и параметры:

  • Случайные начальные значения: Оптимизация может начать приводить к различным результатам на разных устройствах из-за различий в случайной инициализации.
  • Смена среды выполнения: Взаимодействие дистрибутивов и различных библиотек может вызывать небольшие изменения в поведении оптимизатора.

4. Разделение данных и обучение

Разные устройства могут работать с разными размерами партии (batch size) данных или подходами к их разделению. Это также может косвенно влиять на результаты.

5. Операционная среда и специфичность CUDA

Убедитесь, что среда CUDA настроена корректно. Бывают случаи, когда версии библиотек, драйверов или самих CUDA могут влиять на производительность. Проверьте свои драйверы NVIDIA и версии библиотек.

Заключение

Разница в AUC между моделями, запущенными на CPU и CUDA, может быть вызвана многими факторами, включая специфику реализации алгоритмов, параметры обучения, случайность и ошибки конфигурации. Чтобы решить эту проблему, можно провести дополнительные эксперименты:

  • Пробуйте использовать разные наборы параметров.
  • Сравните модели с использованием фиксированного семени случайных чисел.
  • Рассмотрите возможность использования других библиотек, оптимизированных для GPU, если LGBM продолжает вызывать несоответствия.

Это поможет вам лучше понять поведение ваших моделей и достигнуть более согласованных результатов.

Оцените материал
Добавить комментарий

Капча загружается...