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

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.--87651x GPU
dashboardУеб интерфейс за наблюдение на ASR заявките в реално време. Получава данни от ASR чрез webhook.--8766--
proxyNginx reverse proxy. Единствената услуга, изложена на външния свят. Рутира WebSocket, dashboard, health и metrics заявки.87658765--
llmvLLM сървър с Gemma 3 12B модел за post-processing на транскрипции. Активира се с --profile postprocess.800080001x GPU
data-collectorSidecar за персистиране на данни. Качва аудио в Azure Blob Storage и metadata в Azure Log Analytics.--8767--
tunnelCloudflare Tunnel за сигурен достъп до сървъра от Интернет без отворени портове.------

Monitoring услуги

УслугаОписаниеПорт (външен)Порт (вътрешен)
node-exporterPrometheus Node Exporter -- хардуерни и OS метрики (CPU, RAM, disk, network).91009100
dcgm-exporterNVIDIA DCGM Exporter -- GPU метрики (температура, натоварване, VRAM, power).94009400
promtailGrafana 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 MBMAX_UPLOAD_SIZE
Максимална продължителност300 секунди (5 мин)MAX_DURATION_SECS
GPU lock timeout120 секундиLOCK_TIMEOUT_SECS
LLM timeout5.0 секундиPOSTPROCESS_TIMEOUT
LLM max tokens512Хардкоднат в PostProcessor

Prometheus метрики

ASR сървърът експонира метрики на /metrics (вътрешен), достъпни чрез Nginx на /metrics/asr:

МетрикаТипLabelsОписание
asr_requests_totalCountermachine_id, task, status, languageОбщ брой заявки
asr_audio_seconds_totalCountermachine_id, task, languageОбработени аудио секунди
asr_processing_secondsHistogrammachine_id, task, languageОбща продължителност на обработка
asr_postprocess_secondsHistogrammachine_id, task, languageПродължителност на LLM post-processing

Конфигурация

Основните environment variables се задават в .env файл, който Docker Compose зарежда автоматично:

ПроменливаПо подразбиранеОписание
SERVER_API_KEY--API ключ за автентикация на клиентите
POSTPROCESS_ENABLEDfalseВключва LLM post-processing
POSTPROCESS_MODELgoogle/gemma-3-12b-itМодел за post-processing
POSTPROCESS_TIMEOUT5.0Timeout за 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