(Код и исходный текст Мэтью Джонса)

Руководство по машинному обучению в масштабе

Немного преамбулы

В этом блоге мы много говорим о RAPIDS, коллекции библиотек науки о данных с ускорением на GPU - что это такое, как оно работает и принципы, лежащие в основе его быстрого развития. Сегодня я не буду касаться ни одного из этих вопросов; вместо этого я покажу вам, как масштабно развертывать RAPIDS с помощью службы машинного обучения Azure. Если это так случилось, чтобы проиллюстрировать суть RAPIDS (доведение вычислений до вашей проблемы), то я считаю это ценным вдвойне.

Начиная с конца - распределенная рабочая нагрузка машинного обучения

Я не очень хорошо умею дразнить вещи; Итак, я просто собираюсь показать вам, как все это выглядит после того, как мы его настроим:

Здесь вы видите записную книжку Jupyter рядом с Dask Dashboard. Он визуализирует код RAPIDS, обрабатывающий десятки миллионов записей из 80-гигабайтного набора данных о поездках на такси в Нью-Йорке для построения модели прогнозирования цен на проезд. Все это работает в кластере службы машинного обучения Azure с графическими процессорами NVIDIA V100, которые можно масштабировать до любого необходимого размера с помощью одного флага.

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

Процедура

Начнем с краткого обзора. Сначала вы воспользуетесь порталом Azure, чтобы настроить необходимые ресурсы. Если вы не знакомы с порталом Azure, ссылки ниже предоставят пошаговое руководство.

  1. Создайте свою Группу ресурсов
  2. В своей группе ресурсов создайте рабочую область службы машинного обучения Azure
  3. В своем рабочем пространстве загрузите файл конфигурации json
  4. В своей рабочей области проверьте свое использование + квота, чтобы убедиться, что у вас достаточно квоты для запуска желаемого размера кластера.

Затем со своего локального компьютера вы запустите наши вспомогательные сценарии, чтобы запустить кластер:

  1. Клонируйте демонстрационный код и вспомогательные скрипты
  2. Запустите служебный сценарий, чтобы инициализировать рабочую область службы машинного обучения Azure.
  3. Откройте веб-браузер и поиграйте с демонстрационной записной книжкой.

Погружение в рабочую нагрузку

На своем локальном компьютере клонируйте репозиторий RAPIDS notebooks-contrib GitHub, содержащий демонстрационный код и вспомогательные сценарии, которые упрощают запуск кластера RAPIDS в службе машинного обучения Azure. В своем терминале перейдите в подкаталог blog_notebooks / azureml из этого репо. В этот каталог входят:

  1. Скрипты, которые вы запускаете на своем локальном компьютере
  • start_azureml.py - основная утилита, которая создает цель Compute и связанный эксперимент в Workspace. с помощью SDK машинного обучения Azure для Python. При желании можно также загрузить входной набор данных в хранилище Azure для ускорения обработки в облаке.

2. Скрипты, которые кластер автоматически запускает при запуске.

  • rapids-0.9.yml - это файл, определяющий версии всех пакетов RAPIDS, которые кластер должен загружать при создании масштабируемой виртуальной машины.
  • init_dask.py - это скрипт Python, который каждый узел в кластере будет выполнять для создания кластера Dask.

Типичное использование этого репозитория будет выглядеть так:

  1. Перейдите в корневой каталог RAPIDS-AzureML.
  2. Введите в командной строке следующую команду:
./start_azureml.py \
 --config=CONFIG_PATH \
 --vm_size=VM_SIZE \
 --node_count=N

CONFIG_PATH - это путь к вашему файлу Конфигурация.

VM_SIZE - это размер виртуальной машины, которой должен обладать целевой объект Compute (например, «Standard_NC12s_v3» создаст кластер из 12 узлов виртуальных ядер с два графических процессора V100 каждый)

N - количество узлов (виртуальных машин), которые вы хотите развернуть.

У этого служебного сценария есть еще много вариантов. Вы можете выпустить

./start_azureml.py --help

чтобы увидеть больше.

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

Сценарий использует пакет SDK для машинного обучения Azure для запуска кластера, масштабирования его до желаемого количества узлов и связывания их всех в кластер Dask. Чтобы следить за процессом, вы можете использовать портал Azure для просмотра журналов и выходных данных, как задокументировано ниже. Если запуск занимает особенно много времени, этот портал - лучшее место для устранения любых проблем. В некоторых случаях регион Azure может быть настолько загружен, что отсутствуют доступные экземпляры графического процессора, поэтому кластер не сможет масштабироваться. Если вы часто сталкиваетесь с этой проблемой, вы можете попробовать другой регион.

Последний шаг - открыть ваш веб-браузер и перейти к http: // localhost: 8888 /, где был создан туннель SSH, чтобы вы могли получить доступ к записным книжкам Jupyter, на которых запущен RAPIDS, со своего локального компьютера. машина.

Эти сценарии в настоящее время предполагают, что вы работаете в UNIX-подобной среде (например, Linux, Mac OS или подсистема Windows для Linux) с установленным клиентом ssh.

Тетрадь

Ноутбук основан на демонстрации NYC Taxi от RAPIDSAI Notebooks. Он начинается с трехлетних данных о поездках на такси (2014, 2015, 2016). В середине 2016 года структура (схема) данных изменилась, поэтому наши сценарии ETL также должны это обрабатывать.

Вышеупомянутое порождает несколько вопросов: как мы (1) создать агрегированный DataFrame со всеми данными за эти годы, (2) использовать эти данные для создания новых функций, которые можно (3) использовать для обучения простого дерева решений с градиентным усилением. (GBDT) с помощью XGBoost? Более того, как этот процесс выглядит с RAPIDS?

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

Распараллеливание основано на Dask и использует типичный подход Dask:

  1. Инициализировать клиента
  2. Определите набор функций
  3. Попросите клиента загрузить данные
  4. Попросите клиента запустить функции с данными

Клиент Dask построит вычислительный граф, который в конечном итоге выполнит. Dask ленив: он не любит выполнять, пока он не узнает как можно больше о том, что вы хотите, чтобы он делал (или пока он не обязательно должен выполняться).

Большая часть этого блокнота будет знакома пользователям Pandas, поскольку базовые библиотеки по возможности поддерживают те же API-интерфейсы, что и Pandas. В записной книжке также используется API query в стиле Pandas для эффективного выполнения сложных операций фильтрации. Для более детального изучения API фреймов данных в Dask, см. Документацию Dask.

Чтобы получить надежное измерение точности на этапе прогнозирования этой рабочей нагрузки, нам нужно было включить расчет расстояния Хаверсинуса. Библиотека RAPIDS cuDF не встроена в эту функцию; в ближайшем будущем многие геопространственные алгоритмы будут добавлены в новую библиотеку под названием cuSpatial. На данный момент RAPIDS позволяет определять новую функцию с ускорением на GPU без использования низкоуровневой библиотеки, такой как CUDA или аналогичный вариант Python. Вы можете не только писать собственные функции, которые переносятся на графический процессор, но и затем эти функции распараллеливаются по произвольному размеру кластера для вас. Более того, код, который мы в итоге написали, выглядит как Python. Никаких специальных декораторов или причудливого импорта.

Обучение с использованием XGBoost на GPU тоже несложно. Он соответствует стандартному API XGBoost и требует изменения только одного параметра - для tree_method должно быть установлено значение gpu_hist:

Оценка модели и завершение

Теперь, когда мы построили нашу модель, давайте посмотрим, насколько точно она предсказывает стоимость проезда. Прогнозирование также может выполняться параллельно на нескольких узлах:

В целом, наша модель предсказывает цены со среднеквадратичной ошибкой всего около 2,0 от истинных цен на проезд. Попробуйте запустить ноутбук в собственном кластере, чтобы увидеть, сможете ли вы побить этот результат с помощью небольшой разработки функций и оптимизации XGBoost. Не забудьте использовать портал Azure, чтобы выключить вычислительные узлы, когда закончите эксперимент!

Теперь, когда вы рассмотрели один пример записной книжки, вы можете повторно использовать сценарии установки для своих рабочих нагрузок. Просто добавьте свою записную книжку в папку rapids перед запуском start_azureml.py и попробуйте.

Это только первый шаг для RAPIDS и службы машинного обучения Azure. Мы будем обновлять эти скрипты со временем, включая добавление поддержки для новой версии RAPIDS 0.10. Если вы сочтете код полезным или у вас есть другие вопросы, напишите нам в Twitter @rapidsai или через наш экземпляр RAPIDS Slack.

Приложение: Конфигурация и подробности службы машинного обучения Azure

Azure размещает ряд служб в своем Marketplace, включая службу машинного обучения Azure. Эти услуги разделены на категории. Нас интересует категория AI + Machine Learning. В частности, рабочее пространство службы машинного обучения. Все, что мы развертываем, будет находиться в рабочем пространстве службы машинного обучения.

Группы ресурсов

После входа на портал Microsoft Azure в Интернете вы увидите домашнюю страницу. В нем перечислены популярные службы Azure, полезные ссылки и самые свежие ресурсы. Хотя все это полезно, нас интересуют только группы ресурсов и способы их создания с целью демонстрации RAPIDS в масштабе службы машинного обучения Azure. Процедура создания группы ресурсов проста.

  1. Перейдите на страницу Группы ресурсов.

а) Вы можете сделать это, щелкнув Группы ресурсов на главной странице.

б)… или вы можете нажать Создать ресурс выше и выполнить поиск Группа ресурсов

2. Нажмите Создать, и вы увидите эту страницу.

а) Вам нужно будет выбрать Подписку с доступными ресурсами графического процессора.

б) Вам нужно будет выбрать регион с доступными ресурсами графического процессора.

в)… Если вы не уверены, загляните на эту страницу, посвященную размерам виртуальных машин, оптимизированных для графического процессора

3. Далее мы рассмотрим, как инициализировать рабочую область службы машинного обучения в разделе Рабочие области.

Рабочие места

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

  1. Перейдите на свою страницу Группы ресурсов. Обязательно выберите правильную подписку!

2. Выберите группу ресурсов, которую вы только что создали, и нажмите Добавить… Я назвал свою RAPIDS-AML

а) Синее поле указывает, где должна быть кнопка Добавить.

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

3. При выборе Добавить мы попадаем в Marketplace, о котором я упоминал в начале знакомства со службой машинного обучения Azure. Теперь, когда у нас есть группа ресурсов, мы можем добавить к ней рабочую область службы машинного обучения, щелкнув значок службы в Marketplace и создав сервис.

а) Обязательно выберите правильную Подписку!

б) Не забудьте указать в качестве Location регион, в котором у вас есть соответствующая квота графического процессора!

Конфигурация

Чтобы использовать Пакет SDK для машинного обучения Azure для Python с максимальной эффективностью, нам нужен файл, который инкапсулирует информацию о ресурсе в легко доступном формате. Введите config.json. Этот файл содержит список словарей со следующими парами "ключ-значение":

«subscription_id» - подписка.

«группа_ресурсов» - группа ресурсов.

«workspace_name» - Workspace.

Чтобы загрузить этот файл, выберите рабочую область, с которой вы хотите работать, и нажмите кнопку.

Просмотр журналов вашего эксперимента

Чтобы просмотреть выходные данные эксперимента в реальном времени, включая сообщения об ошибках, выберите имя эксперимента в рабочей области Машинное обучение Azure. Вы увидите таблицу внизу списка результатов этого эксперимента. Щелкните ссылку на последний запуск, чтобы просмотреть страницу с подробными сведениями. Оттуда вы можете выбрать вкладку Журналы (показанную ниже) и использовать дерево файлов журналов, чтобы перейти к тому, который вы хотите просмотреть.

Дополнительные сведения о машинном обучении Azure и RAPIDS

RAPIDS и Azure представляют собой обширные экосистемы, поэтому этот блог только поверхностный. Если вы хотите узнать больше, мы рекомендуем несколько ресурсов:

● Служба машинного обучения Azure предоставляет обширную документацию.

● Документация RAPIDS всегда актуальна на docs.rapids.ai,

● Вы можете начать изучение XGBoost на целевой странице RAPIDS XGBoost.