Как установить и настроить Piper TTS на VPS
Нужно озвучить бота, статью или уведомление голосом, но платить за каждый символ облачному TTS не хочется, а отправлять текст в Google или Yandex Cloud нельзя из соображений приватности. Piper — лёгкий нейросетевой синтезатор речи, который ставится на обычный VPS без видеокарты и говорит по-русски за доли секунды. Разберём установку по шагам: где обычно спотыкается pip, как выбрать голос, поднять HTTP-API и не наступить на грабли с ударениями.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Piper и почему ему не нужен GPU
Piper — открытый локальный TTS-движок родом из проекта Rhasspy (автор — Michael Hansen, GitHub-ник synesthesiam), сейчас развивается под крылом Open Home Foundation — той же организации, что стоит за Home Assistant и протоколом Wyoming для голосовых ассистентов. В основе — архитектура VITS: нейросеть превращает фонемы сразу в звук, без отдельного вокодера, и специально облегчена под инференс на CPU.
Изначальная цель проекта — уверенно звучать на Raspberry Pi 4, одноплатнике с ARM-процессором и 1–4 ГБ памяти. Если движок тянет Raspberry Pi, обычный VPS с x86-ядром он не заметит вовсе. Отсюда и типичные сценарии: голос для телеграм-бота, озвучка статей и видеосценариев, голосовые уведомления, IVR, компонент для Home Assistant.
Текст Piper не читает «напрямую». Сначала фонемизатор espeak-ng превращает буквы в фонемы, и только потом нейросеть озвучивает эти фонемы выбранным голосом. Деталь важная: именно из-за этого шага у Piper, как и у любого espeak-ng-based синтезатора, бывают проблемы с ударениями в русском — вернёмся к этому в разделе про нюансы.
Честно об ограничениях: качество голоса среднее, до топовых облачных нейросетей вроде ElevenLabs не дотягивает, а клонировать голос по образцу Piper не умеет — для этого нужны модели вроде XTTS, и обычно с GPU. Зато текст никогда не покидает ваш сервер, нет оплаты за символ и нет лимита на объём.
Где спотыкается обычная установка
Первая попытка почти всегда одна и та же — pip install piper-tts. На свежем Ubuntu x86_64 это чаще всего срабатывает, но есть два места, где ломается регулярно.
Колесо piper-phonemize. Пакет piper-tts тянет зависимость piper-phonemize — скомпилированное колесо со встроенным espeak-ng. Готовые колёса собраны не под каждую связку версии Python и архитектуры: на непривычном базовом образе или ARM-сервере pip не находит подходящее и либо пытается собрать из исходников (нужны заголовки espeak-ng и cmake, которых на чистом сервере нет), либо сдаётся с ERROR: Could not find a version that satisfies the requirement piper-phonemize. Проверьте python3 --version заранее — если версия нестандартная, готовьтесь ко второму пути установки.
Не та архитектура бинарника. Если вместо pip вы берёте готовый архив с GitHub Releases, легко скачать сборку не под ту платформу. Результат:
bash: ./piper: cannot execute binary file: Exec format error
Лечится проверкой uname -m до закачки: x86_64 — берите piper_linux_x86_64.tar.gz, aarch64 — соответствующий ARM-архив.
Забытый chmod. После распаковки архива бинарник не исполняемый:
bash: ./piper: Permission denied
chmod +x piper решает это за секунду, но именно эта мелочь чаще всего съедает время новичков.
Коротко, когда что выбирать:
- pip и venv — если на сервере современный Python (3.10–3.11) и вы планируете использовать Piper как библиотеку или поднять HTTP-сервер из коробки пакета.
- бинарник — если pip упёрся в отсутствующее колесо, или вы держите сервер максимально чистым от Python-окружений.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка по шагам
Оба пути ниже рассчитаны на Ubuntu 24.04 или Debian 12, команды — из-под root или через sudo.
Путь A — pip в изолированном окружении.
apt update && apt install -y python3-venv python3-pip
mkdir -p /opt/piper && cd /opt/piper
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install piper-tts
Проверка: piper --help должна вывести список параметров. Если на этапе pip install piper-tts вылезла ошибка с piper-phonemize — переходите к пути B.
Путь B — готовый бинарник, без Python.
uname -m
cd /opt
curl -LO https://github.com/rhasspy/piper/releases/latest/download/piper_linux_x86_64.tar.gz
tar -xzf piper_linux_x86_64.tar.gz
chmod +x piper/piper
./piper/piper --help
Бинарник самодостаточен: onnxruntime и папка espeak-ng-data лежат рядом, доустанавливать ничего не нужно.
Для порядка заведите отдельного системного пользователя вместо запуска от root:
useradd --system --home /opt/piper --shell /usr/sbin/nologin piper
chown -R piper:piper /opt/piper
Учтите: сам по себе Piper без загруженного голоса ничего не озвучит. В отличие от espeak-ng, у которого есть встроенные голоса, у Piper их нет — модель нужно скачать отдельно. Это следующий шаг.
Голоса: где взять и как выбрать для русского
Все голоса лежат на Hugging Face в репозитории rhasspy/piper-voices, разложены по языкам: <lang>/<LOCALE>/<голос>/<качество>/. Для русского это ru/ru_RU/.
Качество задаётся суффиксом в имени файла — от него зависит и размер, и естественность звучания:
| Суффикс | Примерный размер .onnx | Когда брать |
|---|---|---|
| x_low | ~10 МБ | черновая проверка, минимум диска |
| low | ~20 МБ | служебные уведомления, экономия места |
| medium | ~60–70 МБ | основной выбор для большинства задач |
| high | 100+ МБ | озвучка контента, где важна естественность |
Голос — это всегда пара файлов: .onnx (веса модели) и .onnx.json (конфиг: частота дискретизации, карта фонем, параметры синтеза). Скачивайте оба сразу:
mkdir -p /opt/piper/voices && cd /opt/piper/voices
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/ru/ru_RU/irina/medium/ru_RU-irina-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/ru/ru_RU/irina/medium/ru_RU-irina-medium.onnx.json
Среди русских голосов на момент написания статьи доступны, например, irina, denis и dmitri в варианте medium. Актуальный список смотрите прямо в репозитории на Hugging Face — он пополняется.
Забыли докачать .onnx.json — получите обрыв на старте:
piper: error: [Errno 2] No such file or directory: 'ru_RU-irina-medium.onnx.json'
Первый синтез:
echo 'Привет! Это тестовая фраза для проверки синтеза речи.' | \
./piper/piper --model /opt/piper/voices/ru_RU-irina-medium.onnx \
--output_file /opt/piper/test.wav
На VPS обычно нет звуковой карты, так что слушать результат нужно после скачивания файла к себе, а быстро проверить, что это валидный WAV, поможет file test.wav — в выводе будет RIFF ... WAVE audio. Частоту дискретизации, на которой обучен конкретный голос (обычно 22050 Гц), можно посмотреть прямо в конфиге: python3 -c "import json;print(json.load(open('ru_RU-irina-medium.onnx.json'))['audio']['sample_rate'])".
Три параметра стоит знать сразу, они пришли из архитектуры VITS: --length_scale управляет темпом речи (по умолчанию 1.0, больше значение — медленнее речь), --noise_scale и --noise_w отвечают за естественность вариаций в произношении. Для дикторского голоса бота обычно достаточно значений по умолчанию — трогайте их, только если голос звучит неестественно быстро или монотонно.
Поднимаем как сервис: HTTP-API и systemd
Чтобы синтез был доступен приложениям, а не только консоли, поднимите встроенный HTTP-сервер из пакета piper-tts:
source /opt/piper/venv/bin/activate
python3 -m piper.http_server --model /opt/piper/voices/ru_RU-irina-medium.onnx \
--host 127.0.0.1 --port 5000
Проверка запросом:
curl -G --data-urlencode 'text=Сервер поднят и слушает запросы.' \
-o out.wav 'http://127.0.0.1:5000/'
Держите сервер на 127.0.0.1 и наружу выпускайте только через Nginx с TLS и токеном — это внутренний сервис, а не публичный API. Минимум гигиены: ufw allow 22/tcp, ufw deny 5000/tcp — порт наружу не торчит вовсе, доступ только через прокси.
Для автозапуска — systemd-юнит:
[Unit]
Description=Piper TTS HTTP server
After=network.target
[Service]
User=piper
WorkingDirectory=/opt/piper
ExecStart=/opt/piper/venv/bin/python3 -m piper.http_server --model /opt/piper/voices/ru_RU-irina-medium.onnx --host 127.0.0.1 --port 5000
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now piper-tts
systemctl status piper-tts
Если юнит не стартует, смотрите journalctl -u piper-tts -n 50 --no-pager. Частые причины: опечатка в пути до модели (FileNotFoundError), неверный путь до python3 внутри venv, или порт уже занят — OSError: [Errno 98] Address already in use, проверяется командой ss -tlnp | grep 5000.
Если конечная цель — голосовой ассистент на Home Assistant, необязательно городить HTTP-обёртку самостоятельно: есть готовый компонент wyoming-piper (Docker-образ rhasspy/wyoming-piper), который поднимает Piper как сервис по протоколу Wyoming, по умолчанию на порту 10200, и подключается в Home Assistant обычной интеграцией.
Нюансы: ударения, ресурсы и обслуживание
Ударения в русском. Espeak-ng, на который опирается фонемизация Piper, не всегда угадывает ударение в словах, различающихся только им, — классика вроде «за́мок» (сооружение) и «замо́к» (устройство на двери). Стандартный обходной путь для espeak-ng-based движков — расставить ударение явно, вставив после ударной гласной комбинирующий знак U+0301 (COMBINING ACUTE ACCENT). Это не панацея на все случаи, но заметно улучшает разборчивость на известных проблемных словах. При большом объёме текста имеет смысл прогонять его через словарь ударений автоматически, ещё до отправки в Piper.
Числа и сокращения. Как и большинство TTS, Piper надёжнее озвучивает текст, где числа и сокращения уже расписаны словами, чем сырые «12.03.2026» или «т.д.». Если качество озвучки критично — нормализуйте текст перед синтезом.
Ресурсы без выдуманных цифр. Модель среднего качества занимает на диске порядка 60–70 МБ, в памяти после загрузки — сопоставимый объём плюс накладные расходы onnxruntime, счёт идёт на десятки, а не сотни мегабайт. GPU и драйверы CUDA не нужны вовсе — сам факт, что проект целится в Raspberry Pi 4, тому достаточное подтверждение. Точную скорость синтеза на вашем железе легко замерить самому: time (echo 'тестовый текст подлиннее' | ./piper/piper --model /opt/piper/voices/ru_RU-irina-medium.onnx --output_file /tmp/t.wav) — доверяйте своему замеру, а не чужим обещаниям.
Файлы копятся. Каждый синтез — это новый .wav: минута речи в моно 16 бит на 22050 Гц весит около 2,5 МБ несжатыми. Для бота с активным трафиком заведите очистку через cron: find /opt/piper/output -mtime +7 -delete — иначе диск утечёт в тишину незаметно.
Не мешайте пути установки. Если на одном сервере одновременно стоят и бинарник, и pip-версия, встроенные в них espeak-ng-data могут отличаться версией — и фонемизация даст на слух разный результат для одного и того же текста. Держите один способ установки на хост, не смешивайте.
Какой сервер под Piper брать в MAATRIX
Piper пока не входит в каталог apps.maatrix.io как готовое приложение — сервер приходит чистым (Ubuntu 24.04 или Debian 12), а всё описанное выше вы разворачиваете сами по этой инструкции. Это не страшно: пакет лёгкий, шагов немного, укладывается в 10–15 минут. В каталоге тем временем есть готовые сборки для соседних задач — например, LiteLLM для проксирования запросов к LLM, если Piper со временем станет частью более крупного ИИ-стека.
Честный минимум и комфортный вариант — в таблице:
| Минимум | Комфортно | |
|---|---|---|
| vCPU | 1 | 2–4 |
| RAM | 1–2 ГБ | 4–8 ГБ |
| Диск | 20 ГБ NVMe | 40–60 ГБ NVMe |
| Что получаете | один голос, тесты, редкие запросы бота | несколько голосов, HTTP API под нагрузкой за Nginx, место под Whisper рядом для полного голосового цикла |
Минимум честно тесноват, если рядом крутится что-то ещё — сам бот, Nginx, база под него: берите 2 ГБ, а не 1, для запаса под ОС. GPU не нужен ни в одном из вариантов — это касается только более тяжёлых моделей вроде XTTS, если до них дойдёт дело.
Локация — Великобритания (Лондон). Синтез у Piper полностью локальный: после того как голос один раз скачан, движок не делает ни одного внешнего запроса, и местоположение сервера не влияет на скорость самого синтеза. Влияет оно на другое — на то, откуда физически идёт запрос к вашему API. Если сервис обслуживает международную или европейскую аудиторию — продукт для клиентов за пределами России, интеграция с зарубежным сервисом, — UK даёт короткий пинг до Европы и деловую репутацию адреса по соседству с юрисдикциями GDPR, что уместно дополняет историю «текст никуда не уходит», если TTS обрабатывает пользовательские данные как часть внешнего продукта. Если аудитория целиком в России, разумнее взять российскую локацию ради минимальной задержки до конечных пользователей.
Оплата — картой российского банка, по СБП, криптовалютой или токеном MAAT: сервер в Лондоне не требует иностранной карты. После заказа у вас чистый Ubuntu с root-доступом — дальше применяете эту инструкцию от первой команды до systemd-юнита.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Нужен ли GPU для Piper?
Нет. Это его главное отличие от тяжёлых движков вроде XTTS: инференс полностью на CPU, проект изначально рассчитан на Raspberry Pi 4, так что любой современный vCPU справляется с запасом. GPU понадобится, только если вы отдельно добавите более качественную модель с клонированием голоса.
Как заставить Piper правильно ставить ударения в сложных словах?
Явно — вставив комбинирующий знак ударения U+0301 сразу после ударной гласной в проблемном слове перед отправкой текста в синтез. Способ не устраняет все ошибки фонемизатора espeak-ng, но заметно улучшает разборчивость известных омографов вроде «за́мок»/«замо́к».
Можно ли держать несколько голосов на одном сервере?
Да, и это дёшево по диску: голос среднего качества — это 60–70 МБ на пару файлов .onnx/.onnx.json. Запускайте несколько экземпляров piper.http_server на разных портах или пишите обёртку, которая выбирает --model по параметру запроса.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.