Репозиторий содержит файлы для полного цикла развёртывания учебного ML-сервиса:
MLflow+PostgreSQLAirflow+PostgreSQLLakeFS+PostgreSQL+MinIOJupyterHubFastAPIML-сервис +PostgreSQLPrometheus+GrafanaKubernetesmanifestsHelm chart
infrastructure/mlflowinfrastructure/airflowinfrastructure/lakefsinfrastructure/jupyterhubservices/ml-servicemonitoringk8shelm/ml-serviceprompts
- Docker Desktop
- Docker Compose
- Git
- Kubernetes и Helm для этапов 7-8
| Сервис | URL | Учётные данные |
|---|---|---|
| MLflow | http://localhost:5000 |
не требуются |
| Airflow | http://localhost:8080 |
admin / admin |
| LakeFS | http://localhost:8001 |
создаются при первом входе |
| MinIO Console | http://localhost:9001 |
minioadmin / minioadmin123 |
| JupyterHub | http://localhost:8002 |
admin / admin |
| ML-service API | http://localhost:8003/docs |
не требуются |
| Prometheus | http://localhost:9090 |
не требуются |
| Grafana | http://localhost:3000 |
admin / admin |
- MLflow
- Airflow
- LakeFS
- JupyterHub
- ML-service
- Prometheus и Grafana
- Kubernetes manifests
- Helm chart
- Prompt Storage в MLflow
cd infrastructure/mlflow
Copy-Item .env.example .env
docker compose up -d --build
docker compose psФайл .env:
POSTGRES_DB=mlflow
POSTGRES_USER=mlflow
POSTGRES_PASSWORD=mlflowПроверка:
- открыть
http://localhost:5000 - создать эксперимент
final-project - создать
run - приложить любой артефакт
Если MLflow не поднимается после неудачной миграции:
docker compose down -v --remove-orphans
docker compose up -d --buildcd infrastructure/airflow
Copy-Item .env.example .env
docker compose up airflow-init
docker compose up -d
docker compose psУчётные данные:
- логин:
admin - пароль:
admin
Проверка:
- открыть
http://localhost:8080 - включить DAG
demo_pipeline - запустить DAG вручную
cd infrastructure/lakefs
Copy-Item .env.example .env
docker compose up -d
docker compose psРабочий .env:
POSTGRES_DB=lakefs
POSTGRES_USER=lakefs
POSTGRES_PASSWORD=lakefs
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin123
MINIO_BUCKET=lakefs-storage
LAKEFS_SECRET_KEY=supersecretkey1234567890123456
LAKEFS_ACCESS_KEY_ID=lakefsadmin
LAKEFS_SECRET_ACCESS_KEY=lakefsadmin123Учётные данные:
- MinIO:
- логин
minioadmin - пароль
minioadmin123
- логин
- LakeFS:
- первый вход через
http://localhost:8001 - далее использовать созданные в интерфейсе данные
- первый вход через
Проверка:
- открыть
http://localhost:9001и убедиться, что bucketlakefs-storageсуществует - открыть
http://localhost:8001 - создать репозиторий
training-data - создать branch
feature/demo - загрузить файл
- выполнить commit
Если LakeFS работает нестабильно после неудачной первичной настройки:
docker compose down -v --remove-orphans
docker compose up -dcd infrastructure/jupyterhub
Copy-Item .env.example .env
docker compose up -d --build
docker compose psУчётные данные:
- логин:
admin - пароль:
admin
Проверка:
- открыть
http://localhost:8002 - войти под
admin - дождаться запуска окружения
- открыть JupyterLab
- создать notebook
cd services/ml-service
Copy-Item .env.example .env
docker compose up -d --build
docker compose psПроверка:
- открыть
http://localhost:8003/docs - выполнить запрос
POST /api/v1/predict
Пример запроса:
Invoke-RestMethod `
-Method Post `
-Uri "http://localhost:8003/api/v1/predict" `
-ContentType "application/json" `
-Body '{"age":34,"income":72000,"transactions_last_30d":14,"support_tickets_last_30d":1,"avg_session_minutes":22}'Метрики:
http://localhost:8003/metrics
cd monitoring
docker compose up -d --build
docker compose psУчётные данные Grafana:
- логин:
admin - пароль:
admin
Проверка:
- открыть
http://localhost:9090 - открыть
http://localhost:3000 - в Grafana открыть дашборд
ML Service Overview - выполнить несколько запросов в ML-сервис
- убедиться, что метрики появились
Файлы:
k8s/deployment.yamlk8s/service.yamlk8s/ingress.yaml
Применение:
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yamlУстановка:
helm install ml-service ./helm/ml-serviceИзменение версии образа:
helm upgrade ml-service ./helm/ml-service --set image.tag=1.0.1Файлы с версиями промптов:
prompts/v1.txtprompts/v2.txtprompts/v3.txt
Их нужно занести в Prompt Storage MLflow вручную через интерфейс.