Skip to content

mvrck96/ml-service-in-production

Repository files navigation

Продуктивизация ML сервисов

Этот репозиторий содержит весь необходимый код для моих заметок про хорошие практики продуктивизации ML решений. Главная задача этих заметок - показать как сделать из вашей ML модельки качественное решение, которое можно использовать в продакшене.

Заметки можно прочитать в блоге: https://mvrck.space/

Всего есть пять заметок:

  1. Мотивация для использования практик
  2. Контроль качества кода
  3. Разработка сервисной части
  4. Наблюдаемость сервиса
  5. Контейнеризация сервиса

Общая информация

Главная часть кода это сервис, который реализует простую ML логику. Вместе с логикой в сервисе есть все необходимое для качественной продуктовой эксплуатации и поддержки.

Есть логирование, трейсинг, сервсные метрики. Настройка происходит через переменные окружения. Контейнеризация с использование Docker и docker-compose для удобного запуска не только сервиса но и инфраструктуры (Jaeger и Prometheus). Есть health-checks для k8s, написаны через HTTP статусы.

Техстек

  • Сервис -- FastApi
  • Трейсинг -- Opentelemetry + Jaeger
  • Логи -- Loguru
  • Метрики -- Prometheus
  • K8s health-checks -- есть !
  • Валидация данных -- Pydantic
  • Контейнеризация -- Docker + docker-compose
  • Качество кода -- pre-commiter
  • Тесты -- pytest

Как пользоваться

Для запуска контейнера с сервисом и всей инфраструктурой:

  1. git clone <repo address>
  2. cd ml-service-in-production
  3. cp template.env .env -- создать копию файла template.env с именем .env
  4. Изменить при необходимости переменные окружения
  5. docker-compose up --build -- запуск контейнера
  6. Адреса:

Для локального запуска сервиса без инфраструктуры:

  1. git clone <repo address>
  2. cd ml-service-in-production
  3. python3 -m venv venv -- подготовка виртуального окружения
  4. source venv/bin/activate -- активация окружения
  5. pip install -r requirements.txt -- установка зависимостей
  6. cp template.env .env -- создать копию файла template.env с именем .env
  7. Изменить при необходимости переменные окружения
  8. uvicorn main:app -- запуск сервиса

Для запуска тестов:

  1. Все пункты для локального запсука сервиса
  2. pip install pytest -- установка пакета для тестирования
  3. pytest -vv -- для просмотра результатов

Документация

Очень подробно про каждую часть кода я писал в блоге там можно прочитать для чего нужна каждая технология и как именно реализовано её применение в рамках сервиса.