Skip to main content

Деплой и мониторинг

I Общее

Деплой осуществляется через ml-builder:

conda activate ml-builder
bash build.sh

ml-builder содержит питоновский скрипт, который пулит репозитории моделей, собирает их в архивы, с которыми умеет работать torchserve, и кладет архивы в его volume. 

Затем из TeamCity пулятся контейнеры сервисов и поднимается система. Необходимые версии сервисов и моделей должны быть указаны в .env файле в директории билдера.

II Система

Деплой

См. схему

  1. В первую должен быть развернут Redis, без него инференс и обучение моделей невозможны.

  2. Далее должен быть поднят MLFlow, т.к. torchserve при загрузке попытается стянуть с MLFlow актуальные модели.
  3. Порядок развертывания установлен в docker-compose.yaml.
  4. ML-API общается с бэкэндом с одной стороны, и инференс-сервером с другой. Он не проверяет работоспособность инференс-сервера до обращения. Проверить работоспособность системы можно через соответствующую джобу Дагстера.

  5. Доступы к БД, Редису, ТГ и прочим ресурсам устанавливаются в переменных окружения. См файл .env в директории развертывания.

Мониторинг

  1. Для просмотра логов инференс-сервера нужно зайти в докер-контейнер docker exec -ti torchserve bash и провалиться в папку logs.

  2. Для просмотра логов API сервера нужно пройти в ~/ml-api/logs . Эта директория прокинута через volume в data/ml-api.

  3. Инференс-сервер также мониторится через связку prometheus-grafana.

III Модели

Деплой

  1. Для деплоя модели должен быть собран архив, содержащий все необходимое для запуска - код, веса (если они не тянутся из MLFlow), версии библиотек. Правила сборки кода должны быть прописаны в файле serve/deploy.yaml репозитория модели. В разделе extra_files должны быть указаны все файлы и директории, которые нужно включить в архив, но которые не были указаны в других разделах. В архиве также должен содержаться конфиг модели (serve/config.yaml), указывающий инференс-серверу параметры запуска инстансов модели. 
  2. Запуск модели на инференс-сервере осуществляется через файл handler.py . Он должен импортировать все необходимое из своего архива. Инференс осуществляется через метод inference класса ModelHandler.

  3. Ml-builder содержит скрипт, который собирает из репозитория модели готовый архив и кладет его в torchserve/model-store. Инференс-сервер должен поднять модель автоматически при старте.

Мониторинг

  1. Мониторинг моделей осуществляется средствами torchserve. Для вывода сообщений в model_log нужно использовать питоновский логгер и его производные.

  2. Можно отдавать произвольные метрики от моделей в prometheus (custom metrics api)