Abstract
Эксперимент с Silero TTS от snakers4 — лёгкая модель на CPU, 6 русских голосов. Собрали Docker контейнер, подключили к через remote TTS engine. Работало, но вернулись на Piper — разница в качестве не оправдала +530MB RAM и 3.2GB образ.
Зачем
Piper TTS работает нормально, но голос чуть роботизированный. Silero обещал лучшее качество на CPU без GPU. Модель лёгкая — должна не нагружать сервер.
Что сделали
- Установили
silero+torch(CPU-only) в venv - Протестировали 5 голосов:
ruslan_v2,kseniya_v2,aidar_v2,baya_v2,irina_v2 - Написали HTTP сервер (
silero-tts-server.py) — совместим с Маргинал remote TTS engine - Собрали Docker образ с предскачанными моделями
- Подключили к Маргинал через
docker-compose.silero.yml - Переключили
defaultEngine: "remote"→ Silero
Бенчмарк
| Метрика | Piper | Silero |
|---|---|---|
| Синтез | ~0.2s | 0.4-0.9s |
| RTF | ~0.05x | 0.15-0.19x |
| RAM | ~30MB | 560MB |
| Docker образ | ~100MB | 3.21GB |
| CPU (простой) | 0% | 0% |
| Зависимости | onnxruntime | torch + silero |
RTF 0.15x — это в 6 раз быстрее реального времени. На 12-поточном i5-12400F синтез занимает 0.4-0.5s на фразу. Нагрузки на сервер нет вообще.
Голоса
Silero v2 предлагает 6 русских голосов:
| Голос | Пол | Тембр |
|---|---|---|
ruslan_v2 | М | Низкий, спокойный |
aidar_v2 | М | Средний, нейтральный |
kseniya_v2 | Ж | Высокий, ясный |
baya_v2 | Ж | Средний, мягкий |
irina_v2 | Ж | Низкий, плавный |
natasha_v2 | Ж | Высокий, энергичный |
Архитектура
Маргинал Controller → POST http://silero-tts:9880/speak
{ text, voice } → WAV bytes в ответ
Docker compose overlay (docker-compose.silero.yml) добавляет Silero как sidecar в mrgnl-radio сеть. Контроллер видит его по имени silero-tts:9880.
Модели предскачаны в образ (v2_ruslan.pt, v2_kseniya.pt, …) — torch.hub лезет в интернет, а в Docker контейнере сети нет. Поэтому .pt файлы лежат в /opt/silero-models/src/silero/model/.
Почему вернулись на Piper
- Разница в качестве минимальная — оба звучат как TTS
- +530MB RAM постоянно (torch в памяти)
- Образ 3.2GB vs 100MB — torch CPU тяжёлый
- Swap на сервере и так 9.7GB — лишний torch не помогает
- Piper уже работает 10/10 — говорит нормально
Вывод
Silero — хорошая модель, но для нашего use case (раз в 3-5 минут сказать фразу) Piper достаточно хорош. 530MB RAM и 3.2GB образ не оправданы. Если бы ИИбан говорил чаще — может быть. Но сейчас — нет.
Файлы
docker/silero-tts/Dockerfile— образ с torch CPU + моделямиdocker/silero-tts/silero-tts-server.py— HTTP серверapp/docker-compose.silero.yml— Docker compose overlay- Скрипты и модели закешированы в
/tmp/silero-models/
Связанные статьи
Связанные