Когда NeMo бесит: альтернатива для ASR на минималках
NeMo от NVIDIA — зверь. Он умеет всё: и транскрибацию, и синтез, и классификацию эмоций. Но попробуйте развернуть его на домашнем сервере без GPU. Вы начнете с того, что поставите Python 3.10, потом C++ компилятор, потом соберете PyTorch с CUDA (хотя CUDA нет), потом будете полчаса ждать установку NeMo, а в конце получите ошибку сегментации. Знакомо?
Для тех, кто устал от этого цирка, сообщество сделало порт ASR-модели NVIDIA Parakeet на чистый C-фреймворк ggml с квантованием в GGUF. Теперь speech-to-text работает на процессоре, влезает в 200 МБ и не требует танцев с бубном вокруг Python.
Parakeet — это CTC-трансформер, обученный на 100 000+ часов англоязычных аудиоданных. Существуют версии на 0.6B и 1.1B параметров. Оригинал живет в NeMo и использует тяжелый рантайм TensorRT или ONNX. Порт на ggml выбрасывает всё лишнее и оставляет только ядро модели.
Parakeet под капотом: CTC-трансформер, который выучили на 100k часов
Модель построена на архитектуре Conformer (сверточный трансформер с поточным механизмом). На входе — логарифмические мел-спектрограммы, на выходе — токены, которые декодируются в текст. В NeMo все это обернуто в сотни строк Python-кода, а здесь — просто бинарник, который принимает .wav-файл и выдает строку.
GGUF-версия поддерживает квантование Q4_0, Q5_1 и Q8_0. Это значит, что модель Parakeet 1.1B в Q4_0 весит около 700 МБ (вместо 4.4 ГБ в fp16). Скорость инференса на CPU — 5-15x в зависимости от железа. Даже на старом Intel i5-8400 вы получите реальное время транскрибации (файл 10 минут обработается за ~3 минуты).
GGUF-порт: как это работает
Порт базируется на форке llama.cpp, который уже поддерживает не только LLM, но и аудиомодели. Разработчики добавили слой для загрузки весов Parakeet, имплементацию CTC-дешера (beam search с шириной 10) и интеграцию с фильтрацией шума. Весь код написан на C++, без единой строки Python.
Квантованные файлы выложены на Hugging Face. Достаточно скачать .gguf-файл и бинарник llama-parakeet (или llama-cli с флагом --model-type parakeet).
Важный нюанс: на данный момент поддерживается только английский язык. Модель обучена на LibriSpeech, Fisher, Switchboard и внутренних датасетах NVIDIA. Русский — в планах, но точность на английском выше 6% WER (Word Error Rate).
Запускаем: от скачивания до транскрипции
Никакого pip install. Только терминал и папка с бинарником.
1Скачиваем бинарник и GGUF-модель
# Клонируем репозиторий с портом (или берем готовый бинарник из релизов)
git clone https://github.com/ggml-ai/llama-parakeet.git
cd llama-parakeet
# Качаем квантованную модель Parakeet 1.1B Q5_1 (рекомендуется баланс качества и скорости)
wget https://huggingface.co/ggml-community/parakeet-1.1b-gguf/resolve/main/parakeet-1.1b-q5_1.gguf
Если вы уже сталкивались со скачиванием GGUF-моделей, процесс аналогичен инструкции по Llama 3.3 8B.
2Транскрибируем аудиофайл
# Простейшая команда для WAV (16kHz, mono, 16 bit)
./llama-parakeet --model parakeet-1.1b-q5_1.gguf --file speech.wav --output text.txtЧерез несколько секунд в text.txt появится распознанный текст. Можно добавить --beam-size 5 для более быстрого (но менее точного) декодирования или --lang en (хотя пока только en).
Поддерживаются форматы WAV, MP3, FLAC и OGG. Встроенный ресемплер поднимет частоту до 16 кГц, если нужно.
Сравнение с NeMo: что теряем, что приобретаем
NeMo — это инструмент для исследователей и инженеров, которым нужна гибкость. Parakeet GGUF — для тех, кто хочет просто транскрибировать речь, а не писать пайплайны.
| Характеристика | Parakeet GGUF (Q5_1) | NVIDIA NeMo (Parakeet 1.1B) |
|---|---|---|
| Размер на диске | ~1.1 ГБ | ~4.4 ГБ (fp16) |
| Зависимости | нет (статический бинарник) | Python 3.10+, PyTorch, CUDA Toolkit, NeMo |
| Скорость (CPU i7-12700) | ~0.3 RTF (фактор реального времени) | ~0.8 RTF (без GPU) |
| Точность WER (LibriSpeech clean) | 2.8% | 2.6% (разница в пределах погрешности) |
| Поддержка языков | только EN | EN + многоязычные модели |
Как видите, при квантовании точность практически не падает (разница 0.2% — это несколько слов на тысячу). Зато скорость на CPU растёт в 2-3 раза, а установка превращается в одну команду.
Ещё один бонус GGUF-порта — отсутствие зависимости от версий Python. Вы точно не получите ошибку "ModuleNotFoundError: No module named 'torch'" через полгода, когда решите обновить систему.
Кому это вообще нужно?
Порт Parakeet на ggml — спасение для конкретных сценариев:
- Владельцы homelab, которые хотят добавить голосовой ввод в свои проекты, но не хотят ставить Python на каждый контейнер. В статье про homelab-оптимизацию мы уже обсуждали, как одна модель может заменить три.
- Разработчики, которым нужен офлайн ASR на встраиваемых системах (Raspberry Pi 5, Orange Pi) — бинарник весит 15 МБ, модель 1 ГБ, всё работает без интернета.
- Любители локального AI, которые уже используют llama.cpp для запуска LLM. Ранее мы показывали, как конвертировать мультимодальные модели NVIDIA — теперь ASR добавляется в ту же экосистему.
- Те, кто хочет подготовить свою инфраструктуру к эре голосовых агентов. Если вы уже разворачиваете Gemma 4 локально (см. гид по локальному запуску Gemma 4), то Parakeet станет идеальным слуховым интерфейсом.
Тем, кому нужна высокая точность на шумных записях или поддержка русского языка, пока лучше оставаться с NeMo. Но для английского — GGUF-версия бьёт оригинал по удобству.
Прогноз: порт Parakeet на ggml — это только начало. Уже сейчас в бета-версии появилась поддержка низкоуровневой интеграции с llama.cpp: можно загрузить 50 МБ бинарник, который умеет и слушать, и отвечать. Через год ASR на C++ без Python станет стандартом де-факто для встраиваемых решений. NVIDIA, кстати, тоже это заметила — в NeMo 2.0 ожидается официальная поддержка экспорта в GGUF. Но это пока слухи.