В декабре 2019 года Netflix предоставит открытый исходный код metaflow - фреймворк для написания ориентированной на человека инфраструктуры машинного обучения для Python. Цель состоит в том, чтобы абстрагироваться от управленческой и инженерной стороны моделирования машинного обучения и позволить специалисту по данным (который, возможно, не слишком хорош в DevOps и передовых методах кодирования) сосредоточиться на Data Science. Он широко используется командой специалистов по анализу данных в Netflix.
Но что такое Metaflow ?! Согласно официальной документации,
Metaflow - это удобная для человека библиотека Python, которая помогает ученым и инженерам создавать и управлять реальными проектами в области науки о данных. Metaflow изначально был разработан в Netflix для повышения продуктивности специалистов по данным, которые работают над широким спектром проектов, от классической статистики до современного глубокого обучения.
Metaflow предоставляет унифицированный API для стека инфраструктуры, который необходим для выполнения проектов по науке о данных, от прототипа до производства.
Metaflow представляет API, в котором каждый конвейер машинного обучения написан как «поток».
Поток похож на направленный ациклический граф (DAG). Он может иметь шаги (узлы), ветви и артефакты данных, такие как параметры, файлы и т. Д.
Чтобы получить более подробное представление об этих концепциях, обратитесь к этой статье, которая отлично объясняет эти компоненты. Также очень полезны официальные документы.
Недавно я использовал metaflow в одном из своих проектов. Вот список его плюсов и минусов.
Хорошее
- Группы DAG дают правильную модель
Большинство конвейеров (ML) можно (и нужно) рассматривать как группы DAG. У вас есть некоторая предварительная обработка и постобработка, а между ними - модель. Metaflow повторяет эту концепцию. - Подобно Airflow
Airflow - популярный инструмент конвейерной обработки данных, используемый для оркестровки конвейеров ETL. Metaflow позволяет вам думать о конвейерах машинного обучения аналогичным образом. - Встроенная поддержка параллелизма
Если в вашем потоке есть несколько «шагов» или функций, которые можно запускать параллельно, Metaflow предоставляет для них готовую поддержку, используя ваши вычисления эффективно. - Объектно-ориентированное программирование
Попрощайтесь с управлением сценариями с таким большим количеством функций.
Добро пожаловать в класс с шагами (как те функции), организованными в виде логического графа. - Обширное ведение журнала и управление версиями
Одно из преимуществ Metaflow - это то, что он регистрирует каждый запуск каждого из ваших потоков. Это упрощает отладку рабочих процессов в производственной среде. Вы не только получаете журналы и ошибки, которые могли возникнуть на любом этапе потока, но также получаете latest_run, который можно использовать для восстановления состояния последнего запуска.
- Читаемость
Возможно, самое большое преимущество использования Metaflow - это просто делает ваш ML-код настолько читабельным. Абстракция с шагами великолепна. Кроме того, вы можете создать документацию Flow, даже не заглядывая в код. Просто беги:
python my_flow.py show
Довольно хорошо, да?
Плохие (и безобразные)
- Ограниченный набор функций и документация
Библиотека, открытая в декабре 2019 г., все еще находится в очень активной разработке. На данный момент документация несколько ограничена, и вам придется во многом полагаться на учебные пособия или даже заглядывать внутрь кода библиотеки. При этом управление инфраструктурой машинного обучения развивается очень быстро, и команда делает все возможное, чтобы продвигать необходимые функции. - Не поддерживается в Windows
В настоящее время вы не можете запустить Metaflow в Windows. Однако, если вы знакомы с Docker, это не должно быть проблемой. Просто убедитесь, что вы настроили имя пользователя в своем файле Docker, поскольку Metaflow ожидает имя пользователя для целей ведения журнала.
# User needed for metaflow logging ENV USERNAME my_user
- Тесная интеграция с AWS
Партнерство Netflix с AWS хорошо известно. Некоторые люди даже говорят, что платформа потокового контента сыграла большую роль в превращении облачной платформы в то, чем она является сегодня. Естественно, Metaflow имеет встроенную поддержку сегментов AWS S3, вычислений EC2 и других облачных функций. Однако вскоре появятся разговоры о поддержке Azure. - Вызов через подпроцесс
Возможно, самое раздражающее ограничение Metaflow - вы не можете инициировать запуск, создав объект класса потока. Его нужно запускать через терминал. Это не должно быть проблемой, если у вас есть очередь, которая запускается. Однако, если у вас есть сервер, обслуживающий запросы, это может быть некрасиво. В Python запуск команды терминала из кода обычно выполняется с помощью метода подпроцесса, который также рекомендуется авторами Metaflow.
subprocess.run(['python', 'my_flow.py', 'run'])
И это все! Хотя Metaflow кажется шагом в правильном направлении, предстоит пройти еще долгий путь, прежде чем он будет готов к универсальному использованию. Спасибо за чтение!