Вспомните времена, когда выполнение вашего алгоритма занимало несколько часов! Что делать, если вам нужно запустить его 10 (100?) Раз! В этом случае, возможно, стоит подумать о масштабировании, и в Google Cloud Platform есть множество вариантов, позволяющих запускать ваши любимые фреймворки / алгоритмы машинного обучения.

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

  1. Вы обучаете одну модель для оптимизации вашей целевой функции (своего рода функции потерь / ошибок).
  2. Затем вы можете изучить различные конфигурации модели (например, тип модели, количество слоев), чтобы увидеть, какая из них работает лучше всего: это часть настройки гиперпараметров.
  3. Наконец, как только вы найдете наилучшую конфигурацию и будете довольны своими результатами, вы хотите раскрыть свою модель, чтобы сделать ее доступной для выполнения прогнозов. Развертывание вашей модели как API - отличный способ представить ее производственным приложениям, поскольку этот интерфейс хорошо известен и широко используется разработчиками.

В этом посте мы рассмотрим эти шаги и сосредоточимся на некоторых распространенных фреймворках:

  • TensorFlow: библиотека Google с открытым исходным кодом, в основном используется для приложений глубокого обучения с высокой масштабируемостью.
  • Scikit-learn: библиотека машинного обучения, в основном используется для приложений, не связанных с нейронными сетями, когда данные умещаются в памяти.
  • XGBoost: библиотека, реализующая одну модель (экстремально усиленные градиенты), популярная для структурированных данных с высокой масштабируемостью.
  • H2O: библиотека машинного обучения, в основном используется для приложений, не связанных с нейронными сетями, с высокой масштабируемостью.

Цель этого сообщения - дать некоторые рекомендации по передовому опыту и не служить руководством для объяснения каждого шага каждого процесса. Однако ссылки на соответствующие учебные пособия предоставляются, когда они доступны.

Cloud ML Engine - отличный инструмент для работы с библиотекой TensorFlow, который хорошо документирован на веб-сайте продукта. Поэтому этот пост будет посвящен трем другим библиотекам: Scikit-learn, XGBoost и H2O.

Обучение

Обучение модели в облаке дает два основных преимущества: горизонтальное масштабирование и доступ к высокопроизводительным ускорителям, таким как графические процессоры и TPU.

Масштабирование на GCE

Учебные модели в Google Compute Engine (GCE) или размещенных блокнотов Jupyter (например, ядра Kaggle или Datalab) - это простые способы масштабирования. Просто разверните экземпляр и обучите модель так же, как если бы вы это делали локально!

Этот метод дает вам следующие преимущества:

  • Вертикальное масштабирование с помощью произвольно мощного экземпляра GCE (изменение кода не требуется).
  • Ускорение графического процессора с помощью экземпляра GCE с включенным графическим процессором (невозможно для scikit-learn, но поддерживается xgboost и h2o).
  • Горизонтальное масштабирование с использованием многоядерных процессоров, когда базовая библиотека позволяет это (интересующие параметры горизонтального масштабирования: некоторые модели в scikit learn имеют параметр n_jobs, Xgboost имеет параметр ' nthreads », который будет обрабатывать многопоточность, а h2o.init () автоматически определит количество ядер).

Масштабирование на Spark через Dataproc

H2O и XGBoost можно запускать на Spark, поэтому можно использовать Dataproc для масштабирования Spark на нескольких рабочих процессах. Scikit-learn также имеет версию Spark, которую вы можете использовать. Хотя масштабирование в Spark с помощью Dataproc позволяет использовать более крупные наборы данных и обеспечивает лучшее горизонтальное масштабирование, для его настройки требуется больше времени.

Настройка гиперпараметров

Выполнение настройки гиперпараметров в облаке дает вам преимущество горизонтального масштабирования. Есть несколько возможных способов сделать это.

Если вы используете GCE для обучения одной модели, вы можете продолжить использование этой обучающей среды для настройки гиперпараметров, но ваше горизонтальное масштабирование будет ограничено количеством ядер вашего компьютера.

Если вы уже используете Spark через Dataproc для обучения одной модели, естественной идеей будет продолжать использовать ту же среду. Во все библиотеки машинного обучения включены функции, позволяющие выполнять поиск по сетке, который будет обрабатывать масштабирование за вас, поэтому дополнительных настроек не требуется.

TPOT также может быть удобным способом настройки вашей модели. Он очень похож на scikit-learn и помогает вам протестировать лучшую модель. Он ищет лучшую комбинацию модели и параметров, чтобы выжать лишний процент из вашего решения! Используя параметр n_jobs, вы можете масштабировать этот поиск на экземпляре GCE.

Развертывание модели

Cloud ML Engine может сэкономить вам много времени, когда дело доходит до развертывания. Вместо того, чтобы думать о создании инфраструктуры с правильными компонентами (например, балансировкой нагрузки, контролем версий), вы можете развернуть свои обученные модели scikit-learn и XGBoost в качестве API всего за пару шагов (пример, см. Дополнительные ссылки ниже).

Для H2O по-прежнему нет готового решения, поэтому необходимо выполнить некоторую работу с использованием Flask (только для разработки) / App Engine / Google Cloud Endpoints. Некоторые примеры можно найти здесь (часть 6) или здесь.

Резюме по фреймворку

Cloud ML EngineTensorFlow

  • Обучение: Cloud MLE ускоряет вашу модель за счет использования ускорителей (GPU) и кластеров (несколько рабочих).
  • Гиперпараметр: Cloud MLE позволяет настраивать параметры с помощью байесовской оптимизации.
  • Развертывание: Cloud MLE развертывает вашу модель как API.

Scikit-learn

  • Обучение: вы можете обучить свою модель на GCE и масштабировать экземпляр. Масштабирование будет зависеть от самой модели, в частности от наличия параметра n_jobs (пример).
  • Гиперпараметр: GCE (например, n_jobs в функциях GridSearch). Вы также можете масштабировать Dataproc с помощью библиотеки Spark spark sklearn.
  • Развертывание: Cloud MLE развертывает вашу модель как API (пример в блокноте).

XGBoost

  • Обучение: вы можете обучить свою модель на GCE и использовать параметр n_threads для масштабирования. Вы также можете использовать Spark версию и обучить свою модель на Dataproc.
  • Гиперпараметр: масштабирование обрабатывается встроенной функцией xgboost gridsearch.
  • Развертывание: Cloud MLE развертывает вашу модель как API (пример в блокноте).

H2O

  • Обучение: Вы можете обучить свою модель на GCE и масштабировать экземпляр. Вы также можете использовать Spark версию и обучить свою модель на Dataproc. Для пользователей R вы можете запустить R-Studio на GCP и использовать соответствующий пакет h2o.
  • Гиперпараметр: масштабирование осуществляется с помощью встроенного поиска по водной сетке.
  • Развертывание. Для развертывания можно использовать такие инструменты, как Flask / App Engine / Cloud Endpoints (некоторые примеры можно найти здесь и здесь).

Глоссарий:

  • Google Compute Engine (GCE): масштабируемые виртуальные машины в Google Cloud.
  • Cloud Machine Learning Engine (Cloud MLE): управляемая инфраструктура Google Cloud для приложений машинного обучения.
  • Dataproc: управляемый сервис для запуска Apache Spark или Hadoop в Google Cloud.

Я надеюсь, что этот пост помог вам прояснить различные варианты! Также, если у вас есть другие идеи, поделитесь в комментариях!

Спасибо, что прочитали!