Преминете към основното съдържание

Docker среда

ASR сървърът се деплойва като Docker Compose stack с CUDA 12.8 поддръжка на NVIDIA DGX Spark. Тази страница описва Docker конфигурацията, включително Dockerfile, GPU passthrough, volumes, мрежи и health checks.

Общ преглед на контейнерите

ASR Dockerfile (Dockerfile.cuda128)

ASR контейнерът е базиран на NVIDIA CUDA 12.8 runtime image:

FROM nvidia/cuda:12.8.1-cudnn-runtime-ubuntu22.04

RUN apt-get update && apt-get install -y --no-install-recommends \
python3 python3-pip python3-venv libsndfile1 \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements.txt .
RUN pip3 install --no-cache-dir --upgrade pip && \
pip3 install --no-cache-dir numpy typing_extensions && \
pip3 install --no-cache-dir torch --index-url https://download.pytorch.org/whl/cu128 && \
pip3 install --no-cache-dir -r requirements.txt

COPY app/ ./app/

EXPOSE 8765

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8765"]

Детайли на build процеса

СтъпкаОписание
Base imagenvidia/cuda:12.8.1-cudnn-runtime-ubuntu22.04 -- CUDA 12.8 runtime с cuDNN
System packagespython3, python3-pip, python3-venv, libsndfile1 (за soundfile)
PyTorchИнсталира се от CUDA 12.8 wheel index (cu128)
NeMoИнсталира се чрез nemo_toolkit[asr] от requirements.txt
App serverUvicorn ASGI сървър на порт 8765

Python dependencies (requirements.txt)

fastapi>=0.115
uvicorn[standard]>=0.30
python-multipart>=0.0.9
numpy
soundfile>=0.12
httpx>=0.27
prometheus-client>=0.21
nemo_toolkit[asr]>=2.4

Data Collector Dockerfile

Лек Python контейнер без GPU зависимости:

FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app/ app/

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8767"]

Python dependencies (data-collector/requirements.txt)

fastapi>=0.115
uvicorn>=0.30
azure-storage-blob[aio]>=12.20
azure-monitor-ingestion[aio]>=1.0
azure-identity[aio]>=1.17
aiohttp>=3.9

GPU Passthrough

Docker Compose използва NVIDIA Container Toolkit за GPU достъп:

deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1 # или "all" за dcgm-exporter
capabilities: [gpu]

GPU разпределение по контейнери

КонтейнерGPU countОписание
asr1Canary-1B-v2 inference
llm1vLLM Gemma 3 12B inference
dcgm-exporterallДостъп до всички GPU за метрики
Останалите--Не използват GPU

Docker Compose profiles

vLLM сървърът е в profile postprocess и не се стартира по подразбиране:

llm:
profiles: [postprocess]
# ...
# Без LLM (само ASR)
docker compose up -d

# С LLM post-processing
docker compose --profile postprocess up -d

Volumes

Таблица с volumes

КонтейнерHost пътContainer пътРежимОписание
llm${HF_HOME:-~/.cache/huggingface}/root/.cache/huggingfacerwCache за Hugging Face модели
proxy./nginx.conf/etc/nginx/conf.d/default.confroNginx конфигурация
promtail./promtail-config.yml/etc/promtail/config.ymlroPromtail конфигурация
promtail/var/run/docker.sock/var/run/docker.sockroDocker socket за log collection
node-exporter/proc/host/procroLinux proc filesystem
node-exporter/sys/host/sysroLinux sysfs
node-exporter//rootfsroКорен на файловата система

Environment Variables

ASR контейнер

ПроменливаСтойност в ComposeОписание
SERVER_API_KEY${SERVER_API_KEY}API ключ от .env файл
POSTPROCESS_ENABLED${POSTPROCESS_ENABLED:-false}Включване на LLM корекция
POSTPROCESS_URLhttp://llm:8000Хардкоднат вътрешен URL
POSTPROCESS_MODEL${POSTPROCESS_MODEL:-google/gemma-3-12b-it}Модел за vLLM
POSTPROCESS_TIMEOUT${POSTPROCESS_TIMEOUT:-5.0}Timeout в секунди
DASHBOARD_URLhttp://dashboard:8766Хардкоднат вътрешен URL
DATA_COLLECTOR_URLhttp://data-collector:8767Хардкоднат вътрешен URL

LLM контейнер

ПроменливаСтойност в ComposeОписание
HF_TOKEN${HF_TOKEN}Hugging Face API token

Data Collector контейнер

ПроменливаСтойност в ComposeОписание
AZURE_STORAGE_CONNECTION_STRING${AZURE_STORAGE_CONNECTION_STRING}Azure Blob Storage connection string
AZURE_STORAGE_CONTAINER${AZURE_STORAGE_CONTAINER:-asr-recordings}Име на blob container
LOG_ANALYTICS_DCE_ENDPOINT${LOG_ANALYTICS_DCE_ENDPOINT}Data Collection Endpoint URL
LOG_ANALYTICS_DCR_RULE_ID${LOG_ANALYTICS_DCR_RULE_ID}Data Collection Rule ID
LOG_ANALYTICS_STREAM_NAME${LOG_ANALYTICS_STREAM_NAME:-Custom-AsrRequests_CL}Log Analytics stream
AZURE_CLIENT_ID${AZURE_CLIENT_ID}Service Principal client ID
AZURE_CLIENT_SECRET${AZURE_CLIENT_SECRET}Service Principal secret
AZURE_TENANT_ID${AZURE_TENANT_ID}Azure AD tenant ID
COLLECTOR_HOST_LABEL${COLLECTOR_HOST_LABEL:-gx10-804f}Host label за blob организация
SERVER_API_KEY${SERVER_API_KEY}API ключ за вътрешна автентикация

Мрежа

Всички услуги са в default Docker Compose мрежа. Вътрешната комуникация използва Docker DNS имена (напр. http://asr:8765, http://llm:8000).

Изложени портове (host)

ПортКонтейнерОписание
8765proxyЕдинствен входен порт -- Nginx reverse proxy
8000llmvLLM API (достъпен и директно от хоста)
9100node-exporterNode metrics (за директен Prometheus scraping)
9400dcgm-exporterGPU metrics (за директен Prometheus scraping)

LLM специфични настройки

llm:
ipc: host # Споделена IPC namespace за GPU комуникация
ulimits:
memlock: -1 # Неограничен memory lock (CUDA нужда)
stack: 67108864 # 64 MB stack (vLLM нужда)

Health Checks

КонтейнерHealth CheckIntervalTimeoutRetriesStart Period
llmcurl -f http://localhost:8000/health30s10s5180s (3 мин)

Останалите контейнери нямат Docker health check, но ASR сървърът предоставя HTTP endpoint:

# ASR health (чрез proxy)
curl http://localhost:8765/health

# Data collector health (вътрешен)
curl http://data-collector:8767/health

Restart политика

Всички контейнери имат restart: unless-stopped -- рестартират се автоматично при crash, освен ако не са спрени ръчно.

Стартиране и управление

# Стартиране на всички основни услуги
docker compose up -d

# Стартиране с LLM post-processing
docker compose --profile postprocess up -d

# Преглед на логове
docker compose logs -f asr
docker compose logs -f llm

# Rebuild на ASR контейнера
docker compose build asr
docker compose up -d asr

# Спиране на всичко
docker compose down