Deployment
Развёртывание
Локальный стек (Ray + MLflow + MinIO + MySQL + scheduler)
Корневой ../docker-compose.yml поднимает весь стек одной командой, без обращения к какому-либо Docker registry — все свои образы (head, worker, scheduler, mlflow-server) собираются локально через build::
docker compose up -d --build --remove-orphans
Сервисы:
| Сервис | Контейнер | Порты | Назначение |
|---|---|---|---|
head |
ray-head |
REDISPORT, DASHBOARDPORT, DASHBOARDPORT1, HEADNODEPORT, METRICSPORT |
голова Ray-кластера |
worker |
— (replicas=NUM_WORKERS) |
— | воркеры Ray-кластера |
scheduler |
mlumina-scheduler |
8264 |
см. scheduler.md |
minio |
mlflow-s3 |
9000, 9001 |
S3-совместимое хранилище артефактов MLflow |
mc |
mc |
— | одноразовый бутстрап бакета mlflow в MinIO |
db |
mlflow-db |
3306 |
MySQL — backend store MLflow |
server |
mlflow-server |
5001 |
MLflow tracking server (собирается из ./mlflow) |
head/worker/scheduler собираются из корневого ../Dockerfile (база rayproject/ray:latest-py312-cpu, pip install -e .) с локальным тегом mlumina:latest. server собирается из ../mlflow/Dockerfile (просто python:3.12-slim-bookworm + mlflow/requirements.txt).
Все сервисы сидят в одной внешней сети nginx_network (external: true) — предполагается, что она уже создана на хосте (например, реверс-прокси на проде). Переменные окружения читаются из .env (шаблон — .env.sample): порты Ray, число и размер воркеров, логины/пароли MinIO/MySQL, URI MLflow/S3.
docker-compose-local.yml — без внешней сети
Тот же самый стек, но использует свою внутреннюю сеть mlumina-network (bridge, подсеть 172.63.0.0/16), которая создаётся автоматически — не нужно заранее создавать nginx_network. Предназначен для запуска на машине разработчика, где нет и не должно быть внешнего reverse-proxy стека:
docker compose -f docker-compose-local.yml up -d --build --remove-orphans
Оба файла эквивалентны по составу сервисов и версиям образов; различие только в сетевой конфигурации.
MinIO-образы (minio/minio, minio/mc) берутся не с Docker Hub (проект MinIO прекратил публикацию туда), а с quay.io/minio/minio и quay.io/minio/mc, закреплены по digest.
CI/CD (.gitlab-ci.yml)
Пайплайн деплоит на два раннера — gitlab-runner-shell-hpc24 и gitlab-runner-shell-ladaai (блок ladaai в файле сейчас может быть частично закомментирован — см. текущее состояние .gitlab-ci.yml). Сборка и запуск идут полностью локально на раннере, без внешнего Docker registry:
- Стадия
stop_service*—docker compose downв$PATH_COMPOSE/${CI_PROJECT_NAME}. - Стадия
deploy*— копирует весь checkout проекта (rsync, кроме.git) в$PATH_COMPOSE/${CI_PROJECT_NAME}(нужен полный build-контекст:Dockerfile,mlflow/,src/и т.д.), кладёт.envиз.env.sample, затемdocker compose build && docker compose up -d --force-recreate.
deploy/ — отдельный GPU/CPU-стек с мониторингом
deploy/compose.yaml + deploy/compose.common.yaml + deploy/compose.cpu.yaml/compose.gpu.yaml — самостоятельный вариант деплоя Ray-кластера, не связанный с корневым docker-compose.yml:
- свой
../deploy/Dockerfile(multi-stage:uv buildпакета mlumina → образ на базеrayproject/ray), переключается между CPU/GPU черезRUNTIME/MLUMINA_RUNTIME; - head/worker запускаются через
deploy/scripts/start-head.sh/start-worker.sh, а не напрямую командойray start; - включает Prometheus + Grafana с готовыми дашбордами (
deploy/prometheus/,deploy/grafana/provisioning/); - конфигурируется через
deploy/.env.sample(MLUMINA_RUNTIME,MLUMINA_NUM_WORKERS,MLUMINA_WORKER_CPUS/GPUS/MEMORY,MLUMINA_HEAD_CPUS/MEMORY,MLUMINA_SHM_SIZE); - запуск и назначение описаны в
deploy/README.md.
Ни в CI, ни в корневом docker-compose.yml этот стек не задействован — используется отдельно, вручную, там, где нужен GPU-профиль и/или мониторинг.
No comments to display
No comments to display