ASR Server -- Архитектурен преглед
Dictaro ASR Server е Python-базиран сървър за автоматично разпознаване на реч (Automatic Speech Recognition), работещ на NVIDIA DGX Spark (10.42.9.37). Използва NVIDIA Canary-1B-v2 (NeMo) за транскрипция и опционално vLLM с Gemma 3 за LLM-базирана корекция на текста. Целият stack е деплойнат чрез Docker Compose с CUDA 12.8 поддръжка.
Архитектурна диаграма
Услуги (Services)
Docker Compose дефинира следните услуги:
Основни услуги
| Услуга | Описание | Порт (външен) | Порт (вътрешен) | GPU |
|---|---|---|---|---|
| asr | Основният ASR сървър. FastAPI приложение с Canary-1B-v2 модел (NeMo). Приема аудио чрез WebSocket, транскрибира го и опционално прилага LLM post-processing. | -- | 8765 | 1x GPU |
| dashboard | Уеб интерфейс за наблюдение на ASR заявките в реално време. Получава данни от ASR чрез webhook. | -- | 8766 | -- |
| proxy | Nginx reverse proxy. Единствената услуга, изложена на външния свят. Рутира WebSocket, dashboard, health и metrics заявки. | 8765 | 8765 | -- |
| llm | vLLM сървър с Gemma 3 12B модел за post-processing на транскрипции. Активира се с --profile postprocess. | 8000 | 8000 | 1x GPU |
| data-collector | Sidecar за персистиране на данни. Качва аудио в Azure Blob Storage и metadata в Azure Log Analytics. | -- | 8767 | -- |
| tunnel | Cloudflare Tunnel за сигурен достъп до сървъра от Интернет без отворени портове. | -- | -- | -- |
Monitoring услуги
| Услуга | Описание | Порт (външен) | Порт (вътрешен) |
|---|---|---|---|
| node-exporter | Prometheus Node Exporter -- хардуерни и OS метрики (CPU, RAM, disk, network). | 9100 | 9100 |
| dcgm-exporter | NVIDIA DCGM Exporter -- GPU метрики (температура, натоварване, VRAM, power). | 9400 | 9400 |
| promtail | Grafana Promtail -- събира Docker логове и ги изпраща към Loki на мониторинг VM. | -- | -- |
ASR модел
Сървърът използва NVIDIA Canary-1B-v2 -- мултиезичен ASR модел от NeMo framework:
- Поддържани езици (25):
bg,hr,cs,da,nl,en,et,fi,fr,de,el,hu,it,lv,lt,mt,pl,pt,ro,sk,sl,es,sv,ru,uk - Задачи:
transcribe(реч към текст на оригиналния език) иtranslate(реч към английски текст) - Timestamps: Сегментирани резултати с start/end времена
Поток на заявка
Конкурентност и GPU достъп
ASR сървърът използва asyncio Lock за сериализиране на GPU достъпа:
- Само една транскрипция се изпълнява едновременно на GPU
- Изчакване до 120 секунди за заключването (
LOCK_TIMEOUT_SECS) - При timeout клиентът получава грешка
"GPU busy" - Post-processing (LLM) работи извън GPU lock-а, тъй като vLLM е отделен процес
Лимити
| Параметър | Стойност | Описание |
|---|---|---|
| Максимален размер на файл | 50 MB | MAX_UPLOAD_SIZE |
| Максимална продължителност | 300 секунди (5 мин) | MAX_DURATION_SECS |
| GPU lock timeout | 120 секунди | LOCK_TIMEOUT_SECS |
| LLM timeout | 5.0 секунди | POSTPROCESS_TIMEOUT |
| LLM max tokens | 512 | Хардкоднат в PostProcessor |
Prometheus метрики
ASR сървърът експонира метрики на /metrics (вътрешен), достъпни чрез Nginx на /metrics/asr:
| Метрика | Тип | Labels | Описание |
|---|---|---|---|
asr_requests_total | Counter | machine_id, task, status, language | Общ брой заявки |
asr_audio_seconds_total | Counter | machine_id, task, language | Обработени аудио секунди |
asr_processing_seconds | Histogram | machine_id, task, language | Обща продължителност на обработка |
asr_postprocess_seconds | Histogram | machine_id, task, language | Продължителност на LLM post-processing |
Конфигурация
Основните environment variables се задават в .env файл, който Docker Compose зарежда автоматично:
| Променлива | По подразбиране | Описание |
|---|---|---|
SERVER_API_KEY | -- | API ключ за автентикация на клиентите |
POSTPROCESS_ENABLED | false | Включва LLM post-processing |
POSTPROCESS_MODEL | google/gemma-3-12b-it | Модел за post-processing |
POSTPROCESS_TIMEOUT | 5.0 | Timeout за LLM заявки (секунди) |
HF_TOKEN | -- | Hugging Face token (за LLM модела) |
CLOUDFLARE_TUNNEL_TOKEN | -- | Cloudflare Tunnel токен |
Стартиране
# Без post-processing (само ASR)
docker compose up -d
# С post-processing (ASR + vLLM)
docker compose --profile postprocess up -d