No description
- Python 84.1%
- Dockerfile 15.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- WIKI_LANG: ru (the wiki is now documented in Russian) - drop push-on-main trigger: regenerate only on v* tags and manual dispatch, per request Co-authored-by: openhands <openhands@all-hands.dev> |
||
| .forgejo/workflows | ||
| scripts | ||
| src/gigam_asr | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| CHANGELOG.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| pyproject.toml | ||
| pytest.ini | ||
| README.md | ||
| renovate.json | ||
| requirements.txt | ||
GigaAM-Multilingual ASR Server
OpenAI-совместимый ASR-сервер на базе GigaAM-Multilingual — Conformer CTC-модели от Сбера (220M / 600M) — одной из лучших open-source моделей распознавания русского, казахского, кыргызского и узбекского (WER казахского CV: 13.8% против 57.8% у Whisper large-v3).
Архитектура
- Инференс: onnx-asr 0.12 + ONNX Runtime (без torch/transformers)
- Модели:
large_ctc(600M) иctc(220M), обе в int8 — готовые ONNX-конвертыistupakov/gigaam-multilingual-{,large-}ctc-onnx. Загружаются обе, выбираются полемmodelна запросе (по умолчанию large). Если VRAM впритык (у вас A2 общая с mineru) — отгрузите одну: envMODELS=gigaam-multilingual-large-ctc - VAD: Silero VAD для длинных записей (до 1 часа), сегментация речи
- API: FastAPI, эндпоинт
POST /v1/audio/transcriptionsсовместим с официальным OpenAI-клиентом
POST /v1/audio/transcriptions
multipart: file, model, response_format(json|verbose_json), timestamp_granularities(word)
→ {"text": "...", "model": "...", "latency_s": 1.2, "_rtf": 0.03, "segments": [...], "words": [...]}
Выбор модели (поле model, обязательно — как в OpenAI API; неизвестное имя → 404):
| значение | модель |
|---|---|
gigaam-multilingual-large-ctc |
large (600M) — лучшее качество |
gigaam-multilingual-ctc |
small (220M) — быстрее, ~2.5× меньше память |
Быстрый старт
Через Docker (рекомендуется)
# 1. Скачайте модели на хост (однократно): large + small + VAD (~810MB)
# структура models/gigaam-onnx/<модель>/ + models/vad/
python3 scripts/download_models.py ./models # требует pip install huggingface-hub
# 2. Pull из Forgejo Container Registry (собирается CI автоматически) и запуск:
# :v0.1.4 — закреплённая версия (релиз), :latest — последняя сборка main
docker pull git.maydayoffice.kz/maydayoffice/gigaam-asr-server:v0.1.4
docker run -d --gpus all -p 43000:8000 --name gigaam-asr \
-v "$PWD/models:/models:ro" \
git.maydayoffice.kz/maydayoffice/gigaam-asr-server:v0.1.4
# Использование (model: gigaam-multilingual-large-ctc | gigaam-multilingual-ctc | gigaam=large)
curl http://localhost:43000/v1/audio/transcriptions \
-F file=@speech.mp3 -F model=gigaam-multilingual-large-ctc
curl http://localhost:43000/v1/audio/transcriptions \
-F file=@speech.mp3 -F model=gigaam-multilingual-ctc
# Python (официальный OpenAI-клиент, без изменений кода)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:43000/v1", api_key="none")
print(client.audio.transcriptions.create(model="gigaam-multilingual-ctc", file=open("speech.mp3", "rb")).text)
Модели не вшиваются в образ — контейнер читает их из /models (bind mount с хоста).
Сборка вручную
docker compose up -d --build # compose уже содержит volume-мап моделей
Python (без Docker)
pip install -r requirements.txt
python3 scripts/download_models.py ./models # скачает ONNX + VAD из HF
python3 -m gigam_asr.server # GIGAAm_CUDA=0 для CPU
Конфигурация (env)
| Переменная | По умолчанию | Описание |
|---|---|---|
MODEL_DIR |
/models/gigaam-onnx (в Docker) |
Корневой каталог моделей; каждая модель — в <MODEL_DIR>/<имя>/ (mount с хоста) |
VAD_DIR |
/models/vad (в Docker) |
Каталог с Silero VAD |
MODELS |
gigaam-multilingual-large-ctc,gigaam-multilingual-ctc |
Список моделей «alias=имя-в-onnx-asr» через запятую |
QUANTIZATION |
int8 |
Квантизация: int8 или пустая строка (fp32) |
GIGAAm_CUDA |
auto |
auto/1 — GPU (CUDA EP), 0 — только CPU |
CHUNK_SECONDS |
300 |
VAD long-form; 0 выключает VAD |
MAX_DURATION |
3600 |
Макс. длительность аудио, сек |
API_KEYS |
(пусто) | Список Bearer-токенов через запятую; пусто = авторизация выключена |
CORS_ORIGINS |
* |
CORS: * — все origin, список через запятую, пусто — CORS выключен |
PORT |
8000 |
Порт HTTP |
Производительность
| Платформа | RTF (1 мин аудио) | Комментарий |
|---|---|---|
| NVIDIA A2, CUDA 13, int8 | ~0.02–0.05 | 1 мин за 1–3 с |
| CPU (16 ядер), int8 | ~0.10–0.16 | 1 мин за 6–10 с |
RTF (real-time factor) = время распознавания / длительность аудио. Меньше — быстрее.
Структура проекта
├── src/gigam_asr/server.py # FastAPI-сервер (единый файл, мульти-модельный)
├── scripts/download_models.py # Скачивание ONNX (large+small) + VAD из Hugging Face
├── tests/ # Pytest (проходят при сборке образа)
├── .forgejo/workflows/ # CI: lint, build-and-push, wiki-gen
├── Dockerfile # nvidia/cuda:13.0.1 + onnxruntime-gpu 1.28, non-root
└── docker-compose.yml # Локальный запуск
Модель
- Основание: ai-sage/GigaAM-Multilingual (MIT) — Conformer, предобучение HuBERT на 2M часов / 70+ языков, CTC-финализация на 50K часов
- ONNX-конверты (MIT, int8):
- large (600M): istupakov/gigaam-multilingual-large-ctc-onnx
- small (220M): istupakov/gigaam-multilingual-ctc-onnx
- Языки: ru, en, kk, ky, uz (русский/казахский — best-in-class open-source)
- VAD: istupakov/silero-vad-onnx