Описание Metaflow 2.0 Netflix и разработка конвейера машинного обучения для Hearthstone.

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

Идея этой статьи:

  • Обзор пакета
  • Подробно с двумя примерами возможностей пакета (и идем дальше, чем уроки)

Обзор Metaflow

Metaflow - это пакет, разработанный Netflix, они начали работать над ним несколько лет назад (примерно в 2016 году), а его исходный код был открыт в 2019 году. Идея Metaflow состоит в том, чтобы предложить специалистам по данным фреймворк для построения науки о данных / машинного обучения. конвейер быстро, и это может плавно переходить от разработки к производству.

Приглашаю вас посмотреть презентацию Вилле Туулоса из Netflix на AWS reinvent 2019.

Большой вопрос Netflix, стоящий за этим пакетом, был

Что является самым сложным для специалиста по данным в его повседневной работе? »

Инженеры Netflix ожидали получить доступ к большим наборам данных, значительной вычислительной мощности и использованию графического процессора, но ответ (два года назад) был другим. Одним из наиболее серьезных препятствий был доступ к данным и переход от PoC к производству.

На следующем рисунке представлена ​​визуализация интереса специалистов по данным и потребностей инфраструктуры в процессе ML / DS.

В этой статье, анонсирующей Metaflow, есть одна цитата, которая, как мне кажется, определяет сущность Metaflow:

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

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

Давайте посмотрим подробнее на дизайн каркаса.

Дизайн Metaflow

Metaflow - это библиотека Python, которая работает только в Linux, в основном вдохновлена ​​Spotify Luigi и разработана на основе DAG. На следующем рисунке представлен типичный поток в Metaflow.

DAG структурирован вокруг:

  • Поток: экземпляр, который управляет всеми кодами конвейера. В данном случае это объект Python class MyFlow (Flowspec)
  • Шаги: части потока, разделенные декоратором @step, они являются функциями python в объекте MyFlow, в данном случае def start, fitA, fitB, eval, end .
  • Переходы: связи между ступенями могут быть разных типов (линейные, ветвящиеся и для каждого); подробнее в документации.

А теперь поговорим об архитектуре. На следующем рисунке Netflix представлены компоненты.

Вокруг потока есть 3 компонента:

  • Хранилище данных, в котором хранятся все данные (артефакт данных), сгенерированные на протяжении всего потока.
  • Метаданные - это место, где хранится информация о выполнении потока.
  • Клиент - это компонент, который является соединением для доступа к данным в хранилище данных и получения информации о потоке из метаданных.

Для меня одной из центральных частей, отвечающих за ядро ​​Metaflow, является декоратор. Это функция Python, которая позволяет обновлять свойства объекта Python без изменения его структуры, и я приглашаю вас прочитать эту статью лагеря данных по этой теме.

В Metaflow есть несколько декораторов, хорошо объясненных в этом разделе документации. Тем не менее, для меня наиболее важными являются те, которые я собираюсь объяснить в следующей части.

Практическое руководство по MetaFlow

Я построил простой поток, чтобы проиллюстрировать декораторы и переходы ветвей. Код потока находится в этом репозитории (папка decorator_experimentation); поток выглядит вот так.

И есть наглядная иллюстрация потока.

Эта цель потока:

  • Протестируйте версию Python и Pandas на этапе start,
  • Протестируйте (снова!?) Версию в Python и Pandas на шаге check_version
  • Выполните переход из трех ветвей, который даст случайное число (give_number), букву (give_letter) или число / букву (give_something)
  • Шаг соединения под названием recap для печати продуктов предыдущих шагов,
  • Конечный шаг, на котором будет отображаться (снова!?) Версия Python / Pandas

Регулярная проверка версии Python / Pandas заключается в демонстрации двух конкретных декораторов. Начнем со стандартного выполнения скрипта; чтобы выполнить этот поток, вам необходимо выполнить следующую команду в папке скрипта.

Есть журнал, созданный скриптом.

Как видно из журнала, версия Python - 3.6.9, а Pandas - 0.25.3. Давайте протестируем декоратор @conda_base. Просто нужно раскомментировать строку и выполнить следующую командную строку.

Этот декоратор применил новую версию Python в потоке, в данном случае 3.7.4, с новой версией Pandas (0.25.2). Есть бревно, добываемое конвейером.

Как я уже сказал, теперь есть новая версия Python / Pandas, используемая для выполнения всего потока. В завершение давайте посмотрим на декоратор @conda.

Это похоже на @conda_base, но только для шага, в этом случае я изменяю версию python на 3.6.8 только для этого конкретного шага (со случайной версией Pandas, я знаю выглядит глупо, но это просто для проверки).

И в журнале мы видим, что есть новая версия Python / pandas, примененная только для шага check_version.

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

В пакете есть не только эти декораторы, но и:

  • Один для выполнения, например @retry, @ timeout, @ catch, @ resources
  • Один AWS (@batch), к которому я вернусь позже.

Давайте посмотрим, как работает обработка данных и машинное обучение с помощью Metaflow.

Создайте предсказатель архетипа для Hearthstone с помощью Metaflow

Несколько недель назад я собрал набор данных, связанных с Hearthstone, карточной игрой Blizzard. Я приглашаю вас взглянуть на нее, если у вас нет четкого представления об игре.

Одним из аспектов, которого я избегал в предыдущей статье, было понятие архетипа. Эти архетипы основаны на выбранном герое и картах в колоде, существует несколько типов архетипов, и некоторые из них наиболее популярны.

В наборе данных, представленном в предыдущей статье, 40% колод не имеют связанного архетипа, поэтому я хотел начать создавать предсказатель архетипа на основе используемой карты (это фиктивная система, просто чтобы проверить поток Metaflow).

На следующем рисунке представлен поток, который я разработал для тестирования Metaflow (код находится в папке, связанной с Hearthstone, в этом репозитории).

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

Мониторинг потока и казней

Данные, созданные во время различных выполнений потока, хранятся в хранилище данных в локальном хранилище (в скрытой папке / metaflow в вашем рабочем каталоге). Тем не менее, все результаты доступны прямо в записной книжке. Я собираюсь объединить обрабатывающую часть артефактов различных прогонов.

Цель состоит в том, чтобы вычислить время выполнения, собрать первую выборку обучающего набора и информацию о лучшей модели, созданной HPO (точность и параметры). Есть скриншот обработки.

Как мы видим, существует много информации, которая версируется во время выполнения потока. Мне очень нравится, что это версионирование всех данных, созданных во время конвейера, для воспроизводимости и отладки отлично.

Теперь давайте посмотрим на AWS-часть Metaflow.

А облако?

Metaflow предоставляет вам все процессы для настройки среды AWS в своей документации. Тем не менее, я ленив, и они могут предоставить вам доступ к песочнице AWS (с ограниченными ресурсами для тестирования функций в облаке), просто зарегистрировавшись на веб-сайте.

Через несколько дней у вас будет доступ к песочнице (я хотел бы еще раз поблагодарить службу поддержки Metaflow за то, что мне предоставили немного более длительный доступ к своей песочнице, чтобы я мог делать несколько презентаций вокруг меня).

Настроить соединение с песочницей несложно, достаточно добавить токен в командной строке Metaflow. После этого весь ваш бэкэнд:

  • Хранилище данных на S3
  • Хранение метаданных в базе данных типа RDS
  • Расчет на вашей локальной машине или сервисе AWS batch
  • Блокнот в Amazon Sagemaker

Для доступа к вычислениям AWS с вашего локального компьютера используются два варианта:

  • Используйте атрибут - with batch с командой run, как будто весь ваш поток использует пакет AWS в качестве вычислительного ресурса.
  • Если вы хотите выполнить только определенный шаг на AWS и использовать мощность вашего локального компьютера для другой задачи, вы можете использовать декоратор AWS @batch при объявлении вашего шага.

Я нашел этот подход к управлению облаком привлекательным и простым в использовании, а переключение между локальными вычислениями на облачные вычисления несложно. Чтобы проиллюстрировать облачные вычисления, я просто сделал снимок экрана использования ЦП на моем экземпляре, на котором выполняется мой код Metaflow, в сравнении с тем запуском, который я выполнил.

Я думаю, что это хорошая иллюстрация того факта, что моя локальная машина не используется для выполнения вычислений по сравнению с локальным запуском (между границами выполнения 11 и 17.

И теперь последний вопрос о Metaflow, может ли он работать с mlflow.

Не пересекайте потоки !?

Нет, пожалуйста, я добавил в другой скрипт слой mlflow к моему HPO. Я просто добавляю в свои журналы mlflow информацию, относящуюся к моему запуску Metaflow. Есть скриншот логов mlflow.

Кажется, что две платформы управления версиями отлично работают вместе. Итак, сегодня мы можем проводить мониторинг вашего конвейера с помощью Metaflow, регистрировать вашу модель и выполнять развертывание с помощью mlflow на любой поддерживаемой облачной платформе.

Обратная связь

Metaflow - это фреймворк, который разрабатывается для специалистов по данным и предлагает:

  • Управление версиями всего артефакта, созданного в конвейере DS машинного обучения
  • Простое использование облака и возможность легко распараллеливать работу

Это отличная работа, проделанная Netflix с открытым исходным кодом. В Metaflow появляется больше элементов, например:

  • Пакет R
  • Возможность использовать шаги AWS в качестве планировщика (но его еще нет, поэтому я думаю, что это показывает, что это не такая простая технология в использовании).
  • При развертывании модели с Sagemaker они собираются охватить еще один аспект mlflow (на AWS).

Единственные недостатки, которые у меня есть в Metaflow:

  • Декоратор conda создает много среды conda в вашей среде python, поэтому она может выглядеть беспорядочно.
  • Фреймворк выглядит очень подходящим для AWS, поэтому не открыт для другой облачной платформы (но на GitHub кажется, что некоторые люди пытаются заставить его работать для GCP, например)
  • Искра кажется совершенно не запланированной

Я собираюсь проследить эволюцию Metaflow, но, честно говоря, первая попытка была удачной, и я приглашаю вас попробовать ее и составить собственное мнение.

Первоначально опубликовано на the-odd-dataguy.com