Авторы: Дивьянк Гарг, Аджит Патанкар, Сабьясачи Мукхопадхьяй, Субхабрата Банерджи, Пуджа Аяниле

Введение

Как описано в предыдущих сообщениях, Ray можно использовать для распределения обучения модели по кластеру машин. В предыдущем примере не было интеграции sklearn и Ray. В этом посте мы описываем тесную интеграцию sklearn и Ray и показываем, как эта интеграция приводит к повышению производительности без ущерба для точности. Эта интеграция достигается путем указания Ray в качестве бэкэнда для sklearn. Мы рассматриваем этот конкретный вариант использования в этом посте.

Примеры использования

В этом случае мы строим классификационную модель, используя набор данных размером примерно 20 000 с 10 функциями. Вариант использования сравнивает точность и время обучения модели с Ray в качестве серверной части Sklearn и без использования Ray.

1. Оценка моделей Scikit-learn без Ray

Мы использовали методы scikit-learn, такие как SVC, AdaBoostClassifier и RandomForestClassifier, для прогнозирования модели и оценки точности. Если Ray не используется, а используется автономный пакет Sklearn, то обучение выполняется на одном ядре, и производительность ограничивается его мощностью. Общее время и точность, необходимые отдельной модели для выполнения всех таких процессов, показаны в таблице 1:

Таблица 1. Результат времени и точности для отдельной модели scikit-learn без использования Ray

Примечание. Время обучения модели для RandomForestClassifier можно сократить, используя параметр n_jobs. Это помогает распределить процесс по доступным ядрам на одной машине и, таким образом, может сократить время.

2. Оценка моделей Scikit-learn с использованием Ray Backend

Ray предоставляет серверную часть для оптимизации моделей scikit-learn. Бэкэнд Ray реализован для joblib с использованием акторов Ray и помогает распространять программы scikit-learn с одного узла на кластер Ray. Распределяя программы по всем доступным ядрам в кластере, это помогает сократить время вычислений, а также может повысить точность в некоторых случаях.

Чтобы сравнить результаты без Ray, мы взяли тот же набор данных, модель и выполнили те же действия по обучению модели с бэкэндом Ray. Время обучения модели и точность для разных моделей показаны ниже в таблице 2:

Таблица 2 Результат времени и точности для отдельной модели scikit-learn с использованием Ray

Репрезентативный код показан в следующих блоках кода.

Реализация функции Python с помощью серверной части ray

import joblib
from ray.util.joblib import register_ray
register_ray()
with joblib.parallel_backend(‘ray’):
st = time.time()
model=SVC(gamma=’auto’,random_state=0)
#fit model
model.fit(X_train, y_train)
# train model
y_train_predict=model.predict(X_train)
# predict
y_train_predict=model.predict(X_train)
y_cv_predict=model.predict(X_cv_subset)
y_test_predict=model.predict(X_test_subset)
# accuracy
train_accuracy=accuracy_score(y_train, y_train_predict)
cv_accuracy=accuracy_score(y_cv_subset, y_cv_predict)
test_accuracy=accuracy_score(y_test_subset, y_test_predict)
# macro f1 score
train_f1_score_macro=f1_score(y_train,
y_train_predict,average=’macro’)
cv_f1_score_macro=f1_score(y_cv_subset,
y_cv_predict,average=’macro’)
test_f1_score_macro=f1_score(y_test_subset,
y_test_predict,average=’macro’)
et= time.time()

Примечание. Серверная часть Ray определена только для библиотек scikit-learn. Его нельзя использовать для методов глубокого обучения.

Сравнение результатов

Сравнение приведенных выше результатов показано на рис. 1 и рис. 2.

Рис-1 Сравнение общего времени для отдельной модели с Рэем и без Рэя

На Рисунке 1 хорошо видно, что во всех трех случаях время обучения намного меньше при использовании бэкенда Ray. Это достигается за счет распределения задач алгоритма на кластер Ray и различные ядра, входящие в его состав. Например, в алгоритме Random Forest обучение каждого дерева в ансамбле будет распределено по всем доступным ядрам и, таким образом, будет достигнуто линейное масштабирование. Другие алгоритмы, такие как SVC, не подходят для такого примитивного распараллеливания, и поэтому повышение производительности может быть ограничено.

Рис. 2. Сравнение точности проверки для отдельной модели с использованием Ray и без Ray

Рисунок 2 показывает, что во всех трех случаях точность проверки незначительно выше при использовании Ray по сравнению с тем, когда Ray не используется. Это возможно за счет наличия большей вычислительной мощности при распределении программы внутри кластера.

Таблица-3. Сводка улучшений для отдельных моделей с Ray и без него.

Вывод

Бэкэнд Ray обеспечивает хорошую оптимизацию для библиотеки scikit-learn и сокращает время обучения наряду с возможным повышением точности проверки и почти никогда не снижает ее. Контрольные показатели для выборочного набора данных приведены в Таблице 3. Обратите внимание, что часть повышения производительности достигается за счет простого эффективного использования кластера, а дальнейшее улучшение достигается за счет тесной интеграции sklearn с Ray в качестве серверной части.

В следующих блогах мы опишем использование моделей глубокого обучения с помощью RaySGD, который реализует распределенный Tensorflow и распараллеливает модели глубокого обучения.

Предыдущий блог: https://medium.com/juniper-team/model-selection-using-ray-c712febd1252