Я потратил около 50 часов на обучение моделей XGBoost на своем ноутбуке, так что вам это не нужно!

Введение

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

В этом посте я оценил время, необходимое для обучения классификатора XGBoost с оболочкой scikit-learn на 20 группах новостей наборе текстовых данных. Для этого я обучил модель 50 раз на одном, 4 и 8 ядрах ЦП, используя методы многопроцессорной обработки, а также точные и приближенные древовидные методы (документация ).

Я проводил эксперименты на своем личном макбуке с процессором М1 с 8 ядрами. Блокнот, использованный в этом посте, можно найти здесь.

Некоторая справочная информация

Смело переходите к заключению!

При обучении модели Scikit-learn у вас есть возможность установить параметр n_jobs. Этот параметр используется для высокоуровневого параллелизма; указание количества параллельных процессов или потоков, которые должны использоваться для подпрограмм, распараллеленных с помощью joblib.

Joblib может поддерживать как многопроцессорность, так и многопоточность. Выберет ли joblib создание потока или процесса, зависит от серверной части, которую он использует.

Scikit-learn обычно использует многопроцессорную обработку (в серверной части используется locky). Вы по-прежнему можете использовать многопоточность независимо от рекомендаций scikit-learn, используя менеджер контекста (как объясняется в документации joblib).

Многопроцессорная обработка с помощью scikit-learn

n_jobs по умолчанию равно None, что означает, что вы используете только одно ядро вашего ЦП (так же, как n_jobs=1 ). Вы можете использовать все доступные ядра, установив n_jobs=-1

Заключение

На изображении ниже показано среднее время обучения, необходимое для разных значений параметров n_jobs и three_method.

Использование всех 8 ядер ЦП методом exact в 5 раз быстрее, чем использование одного ядра.

Подведем итог:

  • Никогда не тренируйтесь на одном ядре!
  • Улучшение времени обучения нелинейно зависит от количества ядер.
  • Точный метод дерева всегда быстрее, чем приблизительный.
  • В то время как низкоуровневый параллелизм (через Numpy для общих операций с массивами и OpenMP для кода Cython) может использоваться в некоторых конфигурациях, использование высокоуровневого параллелизма может сэкономить вам много времени!

Полный код смотрите в моем GitHub.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.