Я думал как лучше показать пайплайн. Однако у всех кластеры разные. Кто-то хочет использовать какие-то инструменты, а кто-то нет. В это же время у ArgoWF есть достаточно подробная документация и репозиторий с примерами.
Поэтому я решил не делать универсальный пример, который будет работать у всех, а скорее — разобрать ключевые шаги пайплайна и дать ссылки на официальные ресурсы ArgoWF, чтобы каждый мог адаптировать под себя.
Собственно разбор ключевых шагов пайплайна:
1. Загрузка кода модели из Git-репозитория
- - Как я говорил на одном из докладов: модель – это код+веса+зависимости. На этом этапе мы клонируем репозиторий с кодом модели. Argo предоставляет нам весь необходимый функционал, благодаря чему нам не требуется создавать скрипты, которые просто качают репу.
👉 Пример и официальная документация:
Git Example: https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-git.yaml
Docs: https://argoproj.github.io/argo-workflows/workflow-templates/
2. Установка зависимостей
- - После загрузки кода модели мы переходим к установке зависимостей. Обычно это requirements.txt / conda.yaml или что-то подобное.
Для этого мы можем использовать отдельный шаг в виде контейнера, где устанавливаем нужные библиотеки. Так как зачастую окружение весит достаточно много и нам нужно его использовать во всех дальнейших шагах – его лучше сохранить в S3 хранилище. Argo нативно умеет паковать указанную папку в архив с нужным уровнем сжатия и загружать ее в S3.
👉 Примеры и документация:
Input Artifacts Example: https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-s3.yaml
Python/Bash Scripts Example: https://github.com/argoproj/argo-workflows/blob/main/examples/scripts-python.yaml
Docs: *первый пункт*
3. Загрузка весов.
- - Этот этап нужен для инференса и вообще реализуется обычно в коде, так как идет работа с такими инстументами, как например MLFlow, однако веса и прочие данные, как и зависимости из второго шага можно загрузить напрямую из S3, Hadoop, FS, и других хранилок напрямую.
👉 Примеры и документация:
Docs Inputs: https://argo-workflows.readthedocs.io/en/latest/workflow-inputs/
Docs Artifacts: https://argo-workflows.readthedocs.io/en/latest/walk-through/artifacts/
Examples: все не накидать – Ctrl+F и вводим artifact в папке репы.
4. Обучение модели
- - Самый важный этап, как и выкладка. Здесь мы запускаем скрипт обучения, подгружая все ранее использованные артифакты.
По сути, нам можно воспользоваться шаблонами подгрузки из Git, S3 чтобы загрузить код, зависимости в виде архива, который будет автоматически распакован в нужную нам папку. И также запустить просто скрипт, через Bash.
Все примеры уже есть выше. Описание полей Input и Output шагов буквально идентичны: в случае input, путь - это откуда грузим, для output, путь - это куда. Подгружать можно практически все, что угодно и куда угодно.
Если у вас много оперативной памяти, то в K8s, все процессы работы с данными можно ускорить, использовав ее, как storage:
volumes:
- name: fast-volume
emptyDir:
sizeLimit: 15Gi
medium: Memory
Также хотелось упоминуть про прекрасные Docker образы mambaorg/micromamba, которые позволят юзать mamba (пакетный менеджер conda на C++), которые позволят поднимать модели на едином образе с любой версией питона и любым окружением, которое уже хранится в S3. Никаких образов на 2Gb+!
📌 Итого
Argo Workflows — это мощный инструмент для построения ML-пайплайнов в Kubernetes. Он гибко настраивается и имеет обширнейшую документацию. 95% всех моментов в ней описаны, оставшиеся 5% можно нарыть в API Doc, где показано, какие поля спецификаций имеются в инструменте. Все мелкие косяки, которые происходят фиксятся достаточно быстро, так как обновления идут почти каждые 2 месяца, если не быстрее.
Касательно реализации MLOps пайплайна: главное — понимать, какие этапы вам нужны, а с тем, как правильно описать в YAML, вам может помочь 100+ примеров на GitHub ну и строка поиска в доке.