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 бонусных рублей.

Комментарии (0)