tdavron/gigaam-v3-ctc-qnn-sm8650
GigaAM v3 CTC — QNN context binary для Snapdragon 8 Gen 3 (SM8650)
Русская модель распознавания речи GigaAM v3 CTC (salute-developers/GigaAM), собранная в context binary Qualcomm QNN для NPU (Hexagon HTP v75). Используется приложением MobileASR (on-device ASR на Android) как движок NPU; на других SoC приложение работает на CPU-модели `csukuangfj/sherpa-onnx-nemo-ctc-giga-am-v3-russian-2025-12-16`.
Файлы
giga-ctc.bin: 490 168 320 Б, SHA256 428b8a1994104c482838757644809205c91e80f8a68484bb649aa2d263782019. tokens.txt: SHA256 17cc514451bcceac9c280068c71502f8448f99e9fb1456b8d0761651fd0392f2.
Параметры
- Только SM8650 (Snapdragon 8 Gen 3,
soc_id57, HTPv75). Context binary привязан к SoC и версии QNN; на других чипах не загрузится. - QAIRT / QNN 2.40.0.251030 (build id
v2.40.0.251030114326_189385). Рантайм QNN на устройстве должен быть той же версии. - Точность FP16 (
qnn-onnx-converter --float_bitwidth 16), без квантования. - Вход
x:[1, 3000, 64]float32 — 64 log-mel признака, 3000 кадров (бакет 30 с, шаг 10 мс). Короткие куски дополняются нулями до 3000 кадров. - Выход
log_probs:[1, 750, 34](сабсэмплинг ×4). - RTF на SM8650 ≈ 0,09 (8 записей, 81 с аудио).
Требования к рантайму
Штатная QNN-ветка nemo_ctc в sherpa-onnx написана под NeMo-parakeet (librosa-признаки + per_feature-нормализация) и для GigaAM даёт неверный текст. Нужен sherpa-onnx v1.13.8 с патчем gigaam-qnn.patch (sherpa-onnx/csrc/qnn/offline-recognizer-parakeet-ctc-qnn-impl.h):
- GigaAM узнаётся по
FeatDim() == 64; - признаки как у CPU-пути GigaAM:
high_freq 8000,preemph 0, окно Ханна,round_to_power_of_two=false, без нормализации; - выход обрезается до реальных кадров, чтобы паддинг не попадал в CTC-декод.
Сборка: SHERPA_ONNX_ENABLE_QNN=ON, запуск с --provider=qnn и --nemo-ctc.qnn-context-binary=giga-ctc.bin (плюс пути к libQnnHtp.so, libQnnSystem.so).
Как собрано
python export_gigaam_qnn.py 3000— пакетgigaam(веткаmain), модельv3_ctc; ONNX FP32 с входом[1, 64, 3000].qnn-onnx-converter --float_bitwidth 16→qnn-model-lib-generator(x8664-linux-clang) → `qnn-context-binary-generator` с `htpconfig.json(SM8650, v75,vtcm_mb` 8, O3).
При batch = 1 энкодер GigaAM не строит маску внимания, поэтому кадры паддинга в неё попадают. Проверка на CPU (PyTorch): с нулевым паддингом до 3000 кадров текст практически совпадает с распознаванием без паддинга.
Лицензия
Веса — производная от GigaAM (MIT, © 2024 GigaChat Team, см. LICENSE). Context binary собран инструментами Qualcomm AI Runtime SDK; рантайм QNN распространяется Qualcomm на своих условиях и в этот репозиторий не входит.
