Я потратил около 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 .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.