Описание 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