автор Даниэль Буланда

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

Введение в операционализацию машинного обучения

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

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

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

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

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

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

Обзор Метапотока

Metaflow — это платформа для создания и управления проектами по науке о данных, разработанная Netflix. Прежде чем он был выпущен в качестве проекта с открытым исходным кодом в декабре 2019 года, они использовали его для повышения производительности своих групп специалистов по данным, работающих над широким спектром проектов, от классической статистики до современного глубокого обучения.

В библиотеке Metaflow есть Python и R API, однако почти 85% исходного кода из официального репозитория (https://github.com/Netflix/metaflow) написано на Python. Кроме того, доступна отдельная документация для R и Python.

На момент написания этой статьи (июль 2021 г.) официальный репозиторий Metaflow имеет 4,5 тыс. звезд, более 380 форков и 36 участников, поэтому его можно считать зрелым фреймворком.

«Metaflow создан для специалистов по данным, а не только для машин»

Это предложение привлекло внимание при посещении официального сайта проекта (https://metaflow.org/). Действительно, это не пустые слова. Metaflow заботится об управлении версиями, управлении зависимостями, вычислительных ресурсах, гиперпараметрах, распараллеливании, взаимодействии со стеком AWS и многом другом. Вы можете по-настоящему сосредоточиться на основной части своей работы, связанной с данными, и позволить Metaflow делать все это, используя только очень выразительные декораторы.

Метапоток — основные функции

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

  • Абстракция над инфраструктурой. Metaflow обеспечивает уровень абстракции над доступной аппаратной инфраструктурой, в частности облачным стеком. Вот почему этот инструмент иногда называют унифицированным API для стека инфраструктуры.
  • Организация конвейера данных. Платформа представляет поток данных в виде направленного ациклического графа. Каждый узел в графе, также называемый шагом, содержит некоторый код для запуска, заключенный в функцию с @stepdecorator.
@step 
def get_lat_long_features(self): 
    self.features = coord_features(self.data, self.features) 
    self.next(self.add_categorical_features)

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

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

  • Версии. Отслеживание версий наших моделей машинного обучения может быть непростой задачей. Здесь может помочь Metaflow. Выполнение каждого шага графика (данные, код и параметры) хешируется и сохраняется, и вы можете получить доступ к зарегистрированным данным позже, используя клиентский API.
  • Контейнеризация. Каждый шаг выполняется в отдельной среде. Мы можем указать библиотеки conda в каждом контейнере, используя декоратор @conda, как показано ниже. В некоторых случаях это может быть очень полезной функцией.
@conda(libraries={""scikit-learn"": ""0.19.2""}) 
@step 
def fit(self): 
    ...
  • Масштабируемость. С помощью декораторов @batch и @resources мы можем просто дать команду AWS Batch создать контейнер в ECS для выбранного шага метапотока. Если отдельные шаги занимают достаточно много времени, накладные расходы на создание контейнеров должны стать несущественными.
@batch(cpu=1, memory=500) 
@step 
def hello(self): 
    ...
  • Гибридные запуски. Мы можем выполнить один этап локально, а другой, требующий больших вычислительных ресурсов, — в облаке и очень легко переключаться между этими двумя режимами.
  • Обработка ошибок. @retrydecorator Metaflow можно использовать для установки количества повторных попыток в случае сбоя шага. Любая ошибка, возникшая во время выполнения, может быть обработана @catchdecorator. Декоратор @timeout можно использовать для ограничения продолжительных заданий, особенно в ресурсоемких средах (например, с GPGPU).
@catch(var=""compute_failed"") 
@retry 
@step 
def statistics(self): 
    ...
  • Пространства имен. Изолированное рабочее пространство имен помогает отделить производственные результаты от экспериментальных запусков одного и того же проекта, выполняемого одновременно. Эта функция очень полезна в крупных проектах, где в процессы разработки и развертывания вовлечено больше людей.
from metaflow import Flow, namespace
namespace(""user:will"") 
run = Flow(""PredictionFlow"").latest_run
  • Облачные вычисления. Metaflow по умолчанию работает в локальном режиме. Однако общий режим высвобождает истинную мощь Metaflow. На момент написания статьи Metaflow тесно и хорошо связан с сервисами AWS, такими как CloudFormation, EC2, S3, Batch, DynamoDB, Sagemaker, VPC Networking, Lamba, CloudWatch, Step Functions и другими. В будущем планируется добавить больше облачных провайдеров. На приведенной ниже диаграмме показан обзор сервисов, используемых Metaflow.

Метапоток — недостающие функции

Metaflow не решает всех проблем проектов по науке о данных. Жаль, что доступен только один облачный провайдер, но, возможно, в будущем он изменится. Модель, работающая в производстве, также может быть очень полезной функцией. Конкурентные инструменты, такие как MLFlow или Apache AirFlow, более популярны и лучше документированы. В Metaflow отсутствует пользовательский интерфейс, который сделал бы метаданные, ведение журналов и отслеживание более доступными для разработчиков. Все это не меняет того факта, что Metaflow предлагает уникальный и правильный подход, поэтому его просто нельзя не заметить.

Выводы

Если вы думаете, что Metaflow — это просто еще один инструмент для MLOPs, вы можете быть удивлены. Metaflow предлагает специалистам по данным очень удобный рабочий процесс, абстрагирующий их от всех этих вещей низкого уровня. Однако не ожидайте, что текущая версия Metaflow будет идеальной, потому что Metaflow молод и все еще активно развивается. Тем не менее, основа прочная, и он неоднократно доказывал свою эффективность в Netflix и за его пределами.

Первоначально опубликовано на https://grapeup.com 12 июля 2021 г.

Присоединяйтесь к FAUN: Сайт💻|Подкаст🎙️|Twitter🐦|Facebook👥 |Instagram📷|Группа Facebook🗣️|Группа Linkedin💬| Slack 📱|Cloud Native Новости📰|Дополнительно.

Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏 ниже, чтобы выразить свою поддержку автору 👇