Как llama.cpp-бэкенд ускорил инференс CosyVoice3 в 2,6 раза
CosyVoice3 использует LLM на базе Qwen2.5-0.5B для генерации речевых токенов, но её архитектура отличается от обычной языковой модели: есть текстовые эмбеддинги, речевые эмбеддинги и отдельная речевая голова. llama.cpp ожидает стандартную модель с одним словарём и одной lm_head, поэтому модель пришлось привести к привычному виду: объединить текстовые и речевые эмбеддинги в один большой словарь примерно на 158,7 тыс. токенов, обновить config.json и расширить vocab.json речевыми токенами.
После такой конвертации стандартный convert_hf_to_gguf.py из llama.cpp видит модель как большой Qwen2.5, а готовые GGUF-варианты опубликованы на HuggingFace с разными типами квантизации — от Q2_K до F32. При инференсе остаётся отдельная проблема: модель может начать генерировать текстовые токены вместо речи, поэтому в сэмплинге используется маскировка логитов — разрешаются только речевые токены и EOS.
В тесте на NVIDIA T4 в fp16 средний RTF снизился с ~1,17 у оригинального PyTorch-бэкенда до ~0,45 у llama-cpp-python F16 GGUF. Это означает синтез быстрее реального времени, что делает вариант пригодным для стриминга без накопления задержки; в отличие от TensorRT-LLM-подхода через FastCosyVoice, этот бэкенд проще поставить и может работать даже на слабых GPU или CPU.
Коротко
- CosyVoice3 использует Qwen2.5-0.5B для генерации речевых токенов, но её LLM-часть на PyTorch медленно работает на слабых GPU.
- Для llama.cpp текстовые и речевые эмбеддинги объединили в один словарь примерно на 158,7 тыс. токенов.
- После конвертации в GGUF стандартный convert_hf_to_gguf.py видит модель как большой Qwen2.5 без доработок.
- Чтобы модель не генерировала текст вместо речи, при сэмплинге маскируются все логиты, кроме речевых токенов и EOS.
- На NVIDIA T4 средний RTF снизился с ~1,17 до ~0,45, то есть синтез стал быстрее реального времени.
FAQ
Зачем добавлять llama.cpp-бэкенд в CosyVoice3, если модель уже работает через PyTorch?
llama.cpp через llama-cpp-python ускоряет LLM-часть TTS-модели и упрощает запуск на слабых GPU или CPU. В тесте на NVIDIA T4 это дало ускорение примерно в 2,6 раза.
Почему CosyVoice3 нельзя просто напрямую сконвертировать в GGUF как обычную LLM?
У CosyVoice3 отдельные текстовые и речевые эмбеддинги, а также отдельная речевая голова. Для llama.cpp их пришлось объединить в один словарь и единую выходную структуру.
Чем подход через llama-cpp-python отличается от варианта с TensorRT-LLM и FastCosyVoice?
TensorRT-LLM требует Docker и конвертацию под конкретную GPU, а бенчмарки в источнике приведены только для RTX 3090 и RTX 5060ti. llama-cpp-python ставится одной командой и проще подходит для слабого железа.
Читайте также
Как я пришёл в аналитику, устроился в бигтех и понял, что рабочих задач недостаточно для роста
Как научить LLM исправлять код без лишних изменений
Практическое руководство по инжинирингу контекста для AI-ассистентов
Дружба Linux и Windows, или как поиграться с ИИ-моделями на втором компьютере без видеокарты
Наглядный пример, зачем нужны AI-агенты
- llama.cpp как лёгкий backend для TTS-инференса: Для open source TTS-моделей с LLM-частью llama.cpp через llama-cpp-python может быть практичной альтернативой PyTorch на слабых GPU и CPU. В кейсе CosyVoice3 на NVIDIA T4 переход с PyTorch fp16 на llama-cpp-python F16 GGUF снизил RTF примерно с 1,17 до 0,45, то есть сделал синтез быстрее реального времени.
[AI-инфраструктура и TTS]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Автор добавил llama.cpp-бэкенд в CosyVoice3 через llama-cpp-python и ускорил генерацию речи примерно в 2,6 раза на NVIDIA T4. Ключевая ценность решения — быстрый TTS-инференс без Docker, Triton и сложной привязки к конкретной GPU.