Уведомление о возможности ускорить работу появляется при установке scikit-learn, поэтому пишу для тех, кто давно не переустанавливал эту библиотеку.

Подробное описание ускорителя – по ссылке https://intel.github.io/scikit-learn-intelex/

Ниже перечислил важные моменты и результаты испытаний по повышению производительности.

Установка

Устанавливать можно с помощью pip или conda. Важный момент: ускоритель пока не работает с версиями python 3.10 и новее, поэтому лучше ставить в окружение с версией 3.9. Например, так:

conda create -n env python=3.9 scikit-learn-intelex

Сама библиотека scikit-learn при этом устанавливается автоматически.

Работа с GPU поддерживается.

Использование

Предусмотрено несколько вариантов применения «заплатки». Например, при запуске своего приложения без изменения его кода:

python -m sklearnex my_application.py

Второй вариант – подключать ускоритель внутри приложения. В этом случае можно применять и отменять заплатку.

Важно загружать запускать ускоритель до загрузки самой библиотеки:

from sklearnex import patch_sklearn

patch_sklearn()

from sklearn import…

Если нужно отменить, то после отмены снова загружаем sklearn:

sklearnex.unpatch_sklearn()

from sklearn import …

Ограничения

У некоторых алгоритмов есть ограничения на используемые гиперпараметры, но, по-моему, это больших проблем создать не должно. например, у RandomForestClassifier в качестве критерия можно использовать только gini.

Полный список ограничений: https://intel.github.io/scikit-learn-intelex/algorithms.html

Тест на скорость

По информации разработчика возможно ускорение в десятки даже сотни раз (https://intel.github.io/scikit-learn-intelex/acceleration.html).

Для своего теста на скорость взял набор данных (42100 строк, 18 столбцов) по отмене бронирования в гостиницах из соревнования на Kaggle (https://www.kaggle.com/competitions/playground-series-s3e7).

Классификатор – RandomForestClassifier. Подбор гиперпараметров с помощью GridSearchCV.

Метрика – ROC AUC на кросс-валидации (cv=5).

Для корректности сравнения во всех случаях в классификаторе задавал n_jobs=-1, в поиске по сетке n_jobs=1. GPU не использовал.

Сетка гиперпараметров:

{

    'n_estimators': [1500, 2000, 2500],

    'max_depth': [25, 50, 100],

    'min_samples_split': [10, 50, 100],

    'max_features': ['sqrt', None],

    'max_samples': [0.5, 1.0]

}

С ускорителем поиск по сетке завершился за 1 час 33 минуты, после отмены – за 3 ч 35 м, т.е. ускорение «всего» в 2,3 раза, что, впрочем, тоже весьма неплохо.

Любопытно, что результаты оптимизации немного отличаются, несмотря на то, что я задавал одинаковое значение random_state.

Оптимальные гиперпараметры при поиске с ускорителем:

{'max_depth': 50,

 'max_features': 'sqrt',

 'max_samples': 1.0,

 'min_samples_split': 50,

 'n_estimators': 2500}

ROC AUC = 0.8910274241736913

Без ускорителя:

{'max_depth': 25,

 'max_features': 'sqrt',

 'max_samples': 1.0,

 'min_samples_split': 50,

 'n_estimators': 2000}

ROC AUC = 0.89091409276935

Попробовал также просто обучение классификатора RandomForestClassifier без поиска по сетке – выигрыш еще меньше: с ускорителем 11,2 с, без него 18,1 с.

Ноутбук со сравнением выложен по ссылке.

Комментарии (7)


  1. QtRoS
    00.00.0000 00:00

    Когда трогал библиотеку с год назад, возникли странные ошибки во время работы вроде расхождения размерностей или итерирования неподходящих объектов. Интересно, исправлены ли сейчас эти детские болячки...


    1. Mind08 Автор
      00.00.0000 00:00

      Я пока не замечал, но только начал использовать. Можно еще проверить требования к алгоритмам (не все значени гиперпараметров допустимы) и к системе: "ARM* architecture is not supported."


  1. Hiten10
    00.00.0000 00:00

    Простите, а можно поподробней, на каком оборудовании этот патч ускоряет работу sklearn, на процессорах интел? Из описания в оригинале тоже ничего такого не нашёл


    1. Mind08 Автор
      00.00.0000 00:00

      Пишут, что поддерживает все процессоры с архитектурой x86. Не обязательно интел, но с интел результаты лучше.


      1. Hiten10
        00.00.0000 00:00

        Спасибо!


  1. kroser
    00.00.0000 00:00

    Да, в прошлом году на DS это хорошо бы сэкономило бы время в последних проектах, кто бы знал.


    1. Mind08 Автор
      00.00.0000 00:00

      Да, пригодилось бы. Про эту заплатку я случайно узнал при переустановке.