Metaflow — одна из лучших библиотек для машинного обучения, по мнению автора статьи, которая содержит простые аннотации на Python для создания Reproducible Data Engineering, обучения, валидации моделей и других этапов рабочего процесса. А еще модель позволяет выполнять их в локальной среде или в облаке.
Команда VK Cloud Solutions перевела статью об этом опенсорсном решении, которое используют Netflix и многие другие компании для рабочих процессов в сфере машинного обучения и Data Science.
Какие проблемы можно решать с помощью Metaflow
- Получать данные для обучения, обучать модель по расписанию и проводить аудит всех обученных моделей.
- Создавать и настраивать ETL-пайпайн с помощью нескольких строк кода на Python.
- Обучать масштабную модель в облаке с помощью Kubernetes, используя несколько строк на Python.
- Быстро настраивать графы, состоящие из различных шагов процесса, использующего параллельные вычисления.
- Возобновлять вычисления с определенного шага.
Я видел, как Metaflow использовали и для небольших ETL-пайплайнов, и для многодневных марафонов обучения. Простота этой библиотеки делает ее по-настоящему универсальной.
Пример использования Metaflow
Это упражнение займет буквально несколько минут! Я советую выполнять его в виртуальной среде Python. Сначала можно быстро создать виртуальную среду с помощью модуля
virtualenv
. Под Mac и Linux команды похожи, а под Windows немного различаются.python3 -m virtualenv venv
# activate new virtualenv
source venv/bin/activate
pip3 install metaflow
Начнем с простого потока, чтобы убедиться, что все работает. Создайте
metaflow_start.py
, используя фрагмент кода: from metaflow import FlowSpec, step
class LinearFlow(FlowSpec):
@step
def start(self):
self.my_var = 'hello world'
self.next(self.step_one)
@step
def step_one(self):
print ('the data artifact is: %s' % self.my_var)
self.next(self.end)
@step
def end(self):
print ('the data artifact is still: %s' % self.my_var)
if __name__ == '__main__':
LinearFlow()
Запустите:
python3 metaflow_start.py run
Результат отобразится в консоли:
Metaflow 2.4.3 executing LinearFlow for user:{your_user_name}
Validating your flow...
The graph looks good!
Running pylint...
Pylint is happy!
Workflow starting (run-id 1637382785717584):
2021-11-19 20:33:05.736 [1637382785717584/start/1 (pid 6096)] Task is starting.
... Task finished successfully.
...Task is starting..../step_one/2 the data artifact is: hello world... Task finished successfully.
... Task is starting.... the data artifact is still: hello world... Task finished successfully.
... Done!
Вы создали свой первый поток!
В приведенном примере уже видны важные особенности Metaflow:
- Когда вы внутри шага присваиваете значение аргументу
self
, оно доступно во всех шагах вплоть до последнего, только если где-то в середине не будет разделения на параллельные пути.
- Если на том или ином этапе происходит разделение, то присвоенное на предыдущем этапе значение недоступно на следующих шагах.
- Когда вы запускаете поток в облаке, значения, присвоенные аргументу
self
, сериализуются с использованием pickle и сохраняются в объектном хранилище S3. Переменнаяmy_var
получает значениеhello_world
, потом ее можно использовать в других шагах. Эту схему можно применять для передачи между шагами DataFrames, медиафайлов и других артефактов.
Как видите, с помощью Metaflow можно легко улучшить код на Python, добавить масштабируемую параллельную обработку данных или облачные вычисления в свой Data-Science-проект.
Команда VK Cloud Solutions развивает собственные ML-решения. Будем признательны, если вы их протестируете и дадите обратную связь. Для тестирования пользователям при регистрации начисляем 3000 бонусных рублей.