Вы запускаете голосовой ассистент в закрытом контуре: никакого доступа к облаку, данные под NDA, железо — Raspberry Pi 4. Vosk — единственный production-ready toolkit на базе Kaldi, который работает полностью офлайн, занимает от 50 МБ на диске и даёт latency ~200 мс на streaming. Без интернета, без утечек. Vosk поддерживает 20+ языков включая русский, но на каждом втором проекте мы сталкивались с проблемой WER выше ожидаемого — базовая модель не понимает медицинские или юридические термины. Мы внедряли Vosk в медицинские диктофоны, голосовые помощники для «чистых комнат», системы управления конвейером. Каждый раз упирались в два ограничения: точность на специфической лексике и производительность на слабом CPU. Ниже — как мы это обходим. При этом затраты на облачные API могут доходить до сотен тысяч рублей в месяц — переход на Vosk снижает расходы на 60–80%.
Какие проблемы решаем
-
Высокий WER на предметной лексике. Стандартная модель vosk-model-ru-0.42 даёт WER ~12% на новостях, но на медицинских терминах — до 30%. Решение — кастомный словарь с weight-ами и fine-tuning на 1–2 часа целевых записей. На одном проекте мы за день снизили WER с 25% до 14%.
-
Латенси на потоке. Vosk отдаёт partial results каждые 200 мс, но если нагрузка на CPU 100%, фреймворк начинает подвисать. Мы оптимизировали pipeline: вынесли декодинг в отдельный поток, добавили буфер на 2 секунды, использовали VAD для вырезания тишины. В результате p99 latency не превышает 350 мс.
-
Необходимость уникальной модели. Для китайского языка Vosk предлагает не все акценты. На одном проекте с французским диалектом мы обучили адаптированную модель через Kaldi nnet3 — потратили неделю, но получили WER 8% против базовых 22%.
Как Vosk адаптировать под специфическую лексику?
Процесс включает четыре этапа: сбор аудиозаписей (1–2 часа), транскрибирование, создание кастомного словаря с весами, дообучение модели через Kaldi nnet3. На одном из проектов для французского диалекта мы снизили WER с 22% до 8% за неделю.
Почему Vosk лучше для edge-устройств?
Vosk потребляет в 40 раз меньше памяти, чем Whisper-large, и в 10 раз быстрее на Raspberry Pi. Ниже — сравнение доступных моделей для русского языка (данные — Vosk model zoo):
| Модель |
Размер |
WER (чистая речь) |
RAM (итого) |
Идеальный сценарий |
| vosk-model-small-ru-0.22 |
45 MB |
~20% |
~80 MB |
Raspberry Pi Zero, микроконтроллеры |
| vosk-model-ru-0.42 |
1.5 GB |
~12% |
~1.6 GB |
Сервер, одноплатник с 2+ ГБ ОЗУ |
| Кастомная (fine-tune) |
от 100 MB |
8–15% |
~500 MB |
Нишевая лексика (медицина, юриспруденция) |
Вывод: для low-power edge — small, для точности — full или кастом.
Дополнительное сравнение по ресурсам:
| Ресурс |
Vosk (small) |
Whisper (tiny) |
Whisper (base) |
| RAM |
80 MB |
1 GB |
2.5 GB |
| CPU load (RPi4) |
15% |
60% |
90% |
| Latency |
200 ms |
500 ms |
1.2 s |
Как мы интегрируем Vosk: кейс медицинского диктофона
Один из наших клиентов — медицинский центр, которому требовалось записывать приёмы врачей. Железо — Intel NUC (i5, 8 GB RAM). Мы использовали vosk-model-ru-0.42 с кастомным медицинским словарём. Фрагмент интеграции:
from vosk import Model, KaldiRecognizer
import pyaudio
model = Model("vosk-model-medical")
rec = KaldiRecognizer(model, 16000)
rec.SetGrammar(grammar) # медицинские термины
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000,
input=True, frames_per_buffer=4000)
while True:
data = stream.read(4000, exception_on_overflow=False)
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
print(result["text"])
else:
partial = json.loads(rec.PartialResult())
# отображаем промежуточный текст
Первый прототип — за 4 дня. Ещё 3 дня ушло на калибровку словаря и стресс-тестирование. На выходе — WER 9% на реальных записях.
Подробнее о кастомном словаре
Мы используем технику добавления терминов с весами: каждому слову назначается коэффициент от 0 до 1, влияющий на вероятность его распознавания. Например, для слова «диагноз» weight=1.5, для «гипертония» weight=1.2. Это позволяет поднять точность без увеличения размера модели.
Что входит в работу
- Аудит задачи и подбор модели.
- Интеграция Vosk в ваш код (Python, Java, C#, Go, Node.js).
- Кастомизация словаря и/или fine-tuning модели.
- Оптимизация latency и потребления памяти.
- Тестирование на ваших данных (100+ записей).
- Документация и обучение команды.
- Техподдержка 3 месяца.
Стоимость рассчитывается индивидуально, но в среднем замена облачного API на Vosk экономит 60–80% бюджета на распознавание.
Сроки интеграции Vosk
Базовая интеграция — от 3 до 5 дней. Если требуется кастомная модель или fine-tuning — 2–3 недели. Мы помогаем оценить проект: просто опишите задачу, и за день пришлём план.
Почему выбирают нашу интеграцию?
Опыт — более 10 проектов по голосовым технологиям. Мы даём гарантию на качество распознавания (оговорённый WER) и поддерживаем код после сдачи. Вы остаётесь владельцем всех моделей и скриптов — никакого vendor lock.
Свяжитесь с нами — пришлём тестовую модель под вашу задачу.
Закажите пилот — получите прототип за 5 дней.
Edge AI и оптимизация: деплой моделей без облака
Представьте: ваша модель распознавания лиц выдаёт 4 секунды latency на Jetson Orin, батарея садится за час, модель вылетает по OOM. Мы — команда инженеров по Edge AI с 5+ лет опыта — оптимизировали более 150 моделей для граничных устройств. Без профилирования и правильного выбора квантизации или дистилляции проект обречён. Разрыв между исследовательским кодом и edge-деплоем — отдельная инженерная дисциплина, мы помогаем её освоить за 2–16 недель под ключ. Услуги Edge AI и оптимизация моделей — это не просто экспорт, а системная работа с железом.
Почему просто «экспортировать модель» не работает
PyTorch-модель с float32 и batch_size=32 не готова к edge. Типичные проблемы:
- ResNet-50 в fp32 занимает 98 MB, inference на Cortex-A78 — 380 мс. После INT8-квантизации
torch.ao.quantization — 24 MB, 95 мс. Экспорт в ONNX + TensorRT на Jetson — 28 мс.
- YOLOv8m на Raspberry Pi 5 в fp32 — 2.8 fps. TFLite INT8 — 9.4 fps. С XNNPACK делегатом — 14 fps.
- Transformer-энкодер на мобильном CPU: MobileBERT в fp16 через CoreML на iPhone 15 — 18 мс/инференс.
distilbert-base-uncased в ONNX — 42 мс.
Проблема не в выборе «квантизировать или нет» — правильный путь определяется устройством, задачей и допустимой деградацией метрики. Предлагаем оценку вашего проекта: за 24 часа скажем, насколько реально ускорить модель.
Какой метод квантизации выбрать для вашей задачи?
PTQ (Post-Training Quantization) — быстрый путь. Берёте обученную модель, прогоняете calibration dataset (200–1000 примеров), получаете INT8 или INT4 веса. Инструменты: torch.ao.quantization, ONNX Runtime quantization tool, bitsandbytes. Деградация точности: 0.5–2% на классификации. Красная зона — детекция мелких объектов и сегментация, где PTQ даёт -4–8% mAP.
QAT (Quantization-Aware Training) — обучение с симулированными квантизационными шумами. Дороже (переобучение), но деградация 0.1–0.5%. Оправдано, когда PTQ неприемлем. В PyTorch — torch.ao.quantization.prepare_qat().
GPTQ / AWQ — для LLM. AWQ лучше сохраняет качество при 4-bit квантизации. llm-compressor от Neural Magic или autoawq — основные библиотеки.
| Метод |
Время реализации |
Деградация точности |
Инструменты |
| PTQ |
1–2 дня |
0.5–2% (до 8% на детекции) |
torch.ao, ONNX RT, bitsandbytes |
| QAT |
1–3 недели |
0.1–0.5% |
torch.ao.prepare_qat, TF Quantization |
| GPTQ/AWQ |
3–7 дней |
1–3% (LLM) |
autoawq, llm-compressor |
Экономия от выбора правильного метода: до 350 000 ₽ в год на облачных инстансах за счёт снижения latency и энергопотребления. Стоимость проекта рассчитывается индивидуально — диапазон от 100 000 до 500 000 ₽ в зависимости от сложности модели.
Прунинг и дистилляция
Структурный прунинг удаляет каналы или слои. torch.nn.utils.prune — базовый инструмент. Для transformer — прунинг attention heads (LTP, movement pruning). Результат: ResNet-50 после удаления 40% каналов с fine-tuning — -35% размера, -28% latency, -1.2% top-1 accuracy.
Knowledge distillation — обучаем маленькую student имитировать большую teacher. Классика через KLDivLoss на soft labels. Feature distillation на промежуточных слоях эффективнее. Hugging Face DistilBERT: 66M vs 110M параметров, -40% latency, -3% на GLUE. Согласно Wikipedia, это техника сжатия модели.
Комбинированный подход: дистилляция → прунинг → QAT. Даёт максимальный эффект на ограниченном железе. Экономия на облачных вычислениях достигает 70% — мы фиксировали такую у нескольких клиентов.
Целевые платформы и инструменты
| Платформа |
Предпочтительный формат |
Инструмент |
Специфика |
| NVIDIA Jetson |
TensorRT engine |
trtexec, torch2trt |
INT8 calibration, DLA offload |
| Apple Silicon / iOS |
CoreML (.mlmodel) |
coremltools |
ANE (Neural Engine) автоматически |
| Android |
TFLite (.tflite) |
tf.lite.TFLiteConverter |
GPU delegate, NNAPI |
| x86 CPU |
ONNX + ORT |
onnxruntime |
AVX-512, VNNI |
| Arm Cortex |
TFLite / ONNX |
ort-arm, tflite |
XNNPACK, NEON |
| Qualcomm NPU |
QNN (.dlc) |
Qualcomm AI Hub |
Hexagon DSP |
TensorRT — главный инструмент для NVIDIA edge. TRT строит граф с fusion операторов, выбирает оптимальные ядра. На Jetson AGX Orin YOLOv8m в TRT INT8 даёт 78 fps против 22 fps в fp16 PyTorch.
Практический кейс: детекция дефектов на производственной линии
Задача: обнаружение царапин на металле в реальном времени, 30 fps, камера к Jetson Xavier NX (16GB). Исходная модель YOLOv8l mAP50 0.91, inference на сервере 28 мс, на Jetson в fp16 — 110 мс (9 fps). Не подходит.
Шаги оптимизации:
- Переход на YOLOv8m — mAP50 0.887 (-2.3%), 68 мс
- Экспорт в TensorRT FP16 через
yolo export format=engine half=True — 31 мс (32 fps)
- INT8 calibration на 500 кадрах — 22 мс (45 fps), mAP50 0.879
Итого: деградация 3.5% при 5× ускорении. Клиент получил engine и документацию. Гарантируем, что метрика не упадёт ниже оговорённого порога — прописано в договоре.
Пример профилирования модели (latency по слоям)
Срез профиля YOLOv8m на Jetson Xavier NX (fp16):
- Convolution (layer 1–5): 12 ms
- Bottleneck (layer 6–10): 8 ms
- Head (detection): 11 ms
Узкое место — последние слои head'а. После квантования head'а отдельно latency head снизилась до 4 ms.
Что входит в работу
- Отчёт по профилированию модели на целевом устройстве (latency по слоям, узкие места)
- Выбор и обоснование методов оптимизации (quantization / pruning / distillation)
- Оптимизированная модель (TensorRT engine / TFLite / CoreML / ONNX)
- Конфиги для воспроизведения (скрипты, Docker-образ, инструкция)
- Тестирование на реальном устройстве (не менее 10 000 инференсов)
- Обучение вашей команды (2 часа онлайн)
- Поддержка 1 месяц после передачи
Как заказать оптимизацию модели
- Оставьте заявку на сайте или свяжитесь с нами любым удобным способом.
- Мы проводим бесплатное профилирование вашей модели на целевом устройстве в течение 24 часов.
- Готовим план оптимизации с оценкой trade-off (скорость vs качество).
- Вы утверждаете план — мы приступаем к работе.
- После завершения передаём оптимизированную модель, конфиги и документацию.
- Проводим обучение вашей команды и предоставляем месячную поддержку.
Сроки: оптимизация готовой модели — 2–4 недели. Разработка с нуля под edge — 6–16 недель.
Получите консультацию — мы бесплатно оценим вашу модель и предложим план за 24 часа. Закажите бесплатное профилирование прямо сейчас.