Этот репозиторий содержит весь необходимый код для моих заметок про хорошие практики продуктивизации ML решений. Главная задача этих заметок - показать как сделать из вашей ML модельки качественное решение, которое можно использовать в продакшене.
Заметки можно прочитать в блоге: https://mvrck.space/
Всего есть пять заметок:
- Мотивация для использования практик
- Контроль качества кода
- Разработка сервисной части
- Наблюдаемость сервиса
- Контейнеризация сервиса
Главная часть кода это сервис, который реализует простую 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
Для запуска контейнера с сервисом и всей инфраструктурой:
git clone <repo address>
cd ml-service-in-production
cp template.env .env
-- создать копию файла template.env с именем .env- Изменить при необходимости переменные окружения
docker-compose up --build
-- запуск контейнера- Адреса:
- Сервис -- http://localhost:8000/docs
- Prometheus -- http://localhost:9090/
- Jaeger -- http://localhost:16686/
Для локального запуска сервиса без инфраструктуры:
git clone <repo address>
cd ml-service-in-production
python3 -m venv venv
-- подготовка виртуального окруженияsource venv/bin/activate
-- активация окруженияpip install -r requirements.txt
-- установка зависимостейcp template.env .env
-- создать копию файла template.env с именем .env- Изменить при необходимости переменные окружения
uvicorn main:app
-- запуск сервиса
Для запуска тестов:
- Все пункты для локального запсука сервиса
pip install pytest
-- установка пакета для тестированияpytest -vv
-- для просмотра результатов
Очень подробно про каждую часть кода я писал в блоге там можно прочитать для чего нужна каждая технология и как именно реализовано её применение в рамках сервиса.