MAATRIX / Блог / Как установить и настроить XTTS на VPS

Как установить и настроить XTTS на VPS

Как установить и настроить XTTS на VPS

MAATRIX

Поиск «xtts установка» выводит на инструкции трёхлетней давности: они ставят архивный пакет TTS, спотыкаются об ошибку weights_only в свежем PyTorch и ни слова не говорят о том, что модель распространяется по некоммерческой лицензии. Разберём по порядку: какой пакет ставить в 2026 году, что реально разрешает лицензия, как поднять синтез и клонирование голоса на VPS и где CPU упирается в потолок, если нужна работа в реальном времени.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое XTTS-v2 и какой пакет ставить в 2026 году

XTTS-v2 — модель синтеза речи с клонированием голоса от Coqui: генерирует речь на 17 языках по короткому референсному ролику голоса, на выходе — аудио 24 кГц. Список языков: английский, испанский, французский, немецкий, итальянский, португальский, польский, турецкий, русский, нидерландский, чешский, арабский, китайский, японский, венгерский, корейский и хинди.

С пакетом сложнее, чем кажется. Компания Coqui AI закрылась в январе 2024 года, репозиторий coqui-ai/TTS заброшен и не обновляется — старый pip install TTS тянет версию, замороженную на 0.22.x, без поддержки текущих Python и PyTorch. Актуальную разработку продолжает форк idiap/coqui-ai-TTS, пакет на PyPI называется coqui-tts. Импортируется он по-прежнему как TTS, так что код из старых гайдов не меняется — меняется только команда установки.

Актуальный релиз — coqui-tts 0.27.5 от 26 января 2026 года, требует Python от 3.10 до 3.15 (не включительно). Начиная с версии 0.27.4 PyTorch в зависимости не входит — его ставят отдельно. Сама модель весит немало: model.pth — 1,87 ГБ, vocab.json — 361 КБ, speakers_xtts.pth — 7,75 МБ, все три файла скачиваются с Hugging Face при первом обращении к модели. Приятная деталь: в отличие от VITS и других моделей той же библиотеки, XTTS не использует фонемайзер — espeak-ng ей не нужен вовсе, текст идёт в модель напрямую.

Лицензия CPML: когда XTTS нельзя использовать

Это единственный пункт, который стоит прочитать до установки, а не после. Код библиотеки coqui-tts распространяется по MPL 2.0 — с ним можно делать что угодно, включая коммерческие продукты. А вот сами веса XTTS-v2, тот самый model.pth, который вы скачаете, лицензированы отдельно — по Coqui Public Model License. Это некоммерческая лицензия: личный проект, исследование, внутренний инструмент без монетизации — можно; платное приложение, голосовая фича в SaaS, любой продукт с оплатой — уже коммерческое использование.

Честный и неприятный момент: в 2023 году Coqui предлагала коммерческую лицензию за отдельную плату для компаний с выручкой до $1 млн, но компания закрылась в январе 2024-го. Продавать лицензии сейчас некому — то есть легального пути купить право на коммерческое использование весов XTTS-v2 через Coqui на сегодняшний день просто не существует, и это не вопрос дополнительных денег, а вопрос отсутствия контрагента. Если задача — голос в платном продукте для клиентов, честнее сразу смотреть в сторону моделей с permissive-лицензией вроде Piper (MIT), пусть клонирование голоса там заметно скромнее. XTTS для такого сценария — риск, а не готовое решение.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка на VPS: venv, зависимости и первая загрузка модели

Ubuntu 24.04 приходит с Python 3.12, Debian 12 — с 3.11, оба укладываются в требуемый диапазон coqui-tts.

apt update && apt install -y python3-venv python3-pip libsndfile1
useradd -r -m -d /opt/xtts -s /usr/sbin/nologin xtts
sudo -u xtts python3 -m venv /opt/xtts/venv

libsndfile1 — не опция, а системная зависимость пакета soundfile, через который XTTS читает и пишет WAV; без неё падение случится не при установке, а при первом вызове tts_to_file. Ставить пакет от root на свежей Ubuntu не выйдет:

error: externally-managed-environment
× This environment is externally managed

Это PEP 668, а не поломка — лечится тем же venv из команды выше.

sudo -u xtts /opt/xtts/venv/bin/pip install --no-cache-dir "coqui-tts==0.27.5"
sudo -u xtts /opt/xtts/venv/bin/pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu

Индекс cpu здесь не для галочки: с версии PyTorch 2.11 голая команда pip install torch тянет колёса под CUDA 13.0, даже если видеокарты на сервере нет, и раздувает окружение на пустом месте. Если видеокарта всё же есть, а драйвер старше свежего CUDA 13.0 — ставьте --index-url https://download.pytorch.org/whl/cu126. Такое GPU-колесо тащит за собой россыпь пакетов nvidia-* (cublas, cudnn, nccl) — суммарно несколько гигабайт диска сверх весов самой модели, это стоит учитывать при выборе размера NVMe.

При первом обращении к модели библиотека выводит в консоль текст лицензии CPML и просит подтверждение — для systemd-сервиса это означает зависший без вывода процесс, который ждёт нажатия y в терминал, которого нет. Обход — переменная окружения:

sudo -u xtts COQUI_TOS_AGREED=1 TTS_HOME=/opt/xtts/models /opt/xtts/venv/bin/python -c "
from TTS.api import TTS
TTS('tts_models/multilingual/multi-dataset/xtts_v2')
"

COQUI_TOS_AGREED=1 означает согласие с лицензией из раздела выше — ставьте её осознанно. По умолчанию модель ложится в ~/.local/share/tts того пользователя, от которого её скачали; TTS_HOME переопределяет путь на свой, как в команде выше. Прогрели кэш под root без этой переменной, а сервис работает от xtts — второе скачивание 1,87 ГБ случится посреди рабочего запроса. Держите TTS_HOME одинаковым при прогреве и в systemd-юните — тот же /opt/xtts/models пригодится в следующем разделе.

Первый синтез и клонирование голоса: скрипт и типичные ошибки

Минимальный рабочий скрипт:

from TTS.api import TTS

tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False)
tts.tts_to_file(
    text="Сервер готов к работе.",
    speaker_wav="reference.wav",
    language="ru",
    file_path="out.wav",
)

Референсный ролик — не формальность. Технически хватает и 3 секунд чистой речи, но стабильный результат начинается от 6 секунд без музыки и шума; можно передать список из нескольких файлов вместо одного — на скорость это не влияет, а на устойчивость клонирования влияет заметно.

Три ошибки встречаются почти всем, кто ставит XTTS впервые на свежем окружении:

Текст ошибкиПричинаРешение
Weights only load failed ... GLOBAL TTS.tts.configs.xtts_config.XttsConfig was not an allowed globalС PyTorch 2.6 torch.load по умолчанию требует weights_only=TrueРазрешить классы вручную или закрепить torch<2.6
AttributeError: 'GPT2InferenceModel' object has no attribute 'generate'transformers 4.50 убрал GenerationMixin из базового наследования PreTrainedModelОбновить coqui-tts до 0.27.0+ или закрепить transformers<4.50
Процесс висит без вывода при первом запускеЖдёт согласия с лицензией CPML в интерактивном терминалеЗадать COQUI_TOS_AGREED=1

Для первой ошибки рабочий обход — явно разрешить классы конфигурации перед загрузкой:

import torch
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import XttsAudioConfig, XttsArgs
from TTS.config.shared_configs import BaseDatasetConfig

torch.serialization.add_safe_globals([XttsConfig, XttsAudioConfig, XttsArgs, BaseDatasetConfig])

Обе ошибки — не баги вашей установки, а трение версий: coqui-tts актуальной версии их уже обходит, и если текст всё же вылезает — почти наверняка в requirements.txt где-то закреплён старый TTS или устаревший transformers.

CPU или GPU: честно о скорости и xtts-api-server вместо своего кода

XTTS — архитектура, спроектированная под видеокарту. На CPU она формально работает (gpu=False в скрипте выше), но по многочисленным отчётам в issues проекта и на демо-пространствах Hugging Face синтез одного абзаца текста занимает не доли секунды, а десятки секунд, иногда больше минуты — заметно медленнее реального времени. Собственную оценку разработчики coqui-tts в официальной документации не публикуют, а вот проект openedai-speech, оборачивающий XTTS в OpenAI-совместимый API, в своей документации прямо указывает требование для этого бэкенда: видеокарта Nvidia с CUDA и около 4 ГБ VRAM. Без этого — либо переключаться на Piper внутри того же openedai-speech, либо мириться со скоростью CPU.

Отсюда практический вывод: CPU-сервер годится для офлайн-синтеза — озвучка роликов, IVR-подсказок, рекламных вставок, где результат нужен через минуту-другую, а не мгновенно. Для живого голосового бота или синхронного дубляжа нужна видеокарта; расчёт VRAM под связку из распознавания, языковой модели и синтеза разобран в статье как поднять голосового бота на своей модели на сервере.

Писать свою обёртку вокруг TTS.api не обязательно — есть готовый xtts-api-server:

sudo -u xtts /opt/xtts/venv/bin/pip install xtts-api-server
sudo -u xtts /opt/xtts/venv/bin/python -m xtts_api_server --host 127.0.0.1 --port 8020

По умолчанию сервер слушает localhost:8020, документация эндпоинтов — на /docs. Флаг --deepspeed ускоряет инференс в несколько раз на GPU, --lowvram держит модель в оперативной памяти и подгружает в видеопамять по запросу, --streaming-mode отдаёт аудио потоком. В README проекта отдельно оговорены требования к образцу голоса для папки спикеров: моно, 22050 Гц, 16 бит, 7–9 секунд — жёстче, чем общая рекомендация для API, но именно под эти параметры настроена нарезка образца внутри сервера. Есть и готовый образ daswer123/xtts-api-server в Docker Hub, если контейнер удобнее venv.

В прод: systemd, Nginx и безопасность

Юнит для xtts-api-server выглядит так:

[Unit]
Description=XTTS API server
After=network-online.target

[Service]
User=xtts
WorkingDirectory=/opt/xtts
Environment=COQUI_TOS_AGREED=1
Environment=TTS_HOME=/opt/xtts/models
ExecStart=/opt/xtts/venv/bin/python -m xtts_api_server --host 127.0.0.1 --port 8020
Restart=on-failure
RestartSec=5
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

TimeoutStartSec=300 не для перестраховки: если модели нет в TTS_HOME, старт растянется на время скачивания 1,87 ГБ. Наружу сервис выставляют через Nginx:

location / {
    proxy_pass http://127.0.0.1:8020;
    client_max_body_size 50m;
    proxy_read_timeout 120s;
    proxy_buffering off;
}

client_max_body_size увеличен ради загрузки образцов голоса — иначе 413 Request Entity Too Large на первой же попытке клонирования по файлу больше мегабайта. proxy_buffering off важен для --streaming-mode: с буферизацией по умолчанию клиент получит аудио одним куском в конце, а не потоком. Порт 8020 наружу не открывайте — ufw allow 22/tcp, ufw allow 'Nginx Full', и весь трафик к синтезу идёт только через Nginx с TLS. Открытый порт TTS без авторизации — это чужой текст, озвученный клонированным голосом на вашей видеокарте и за ваш счёт.

Если приложению нужен именно OpenAI-совместимый /v1/audio/speech, а не собственный API xtts-api-server, посмотрите на openedai-speech — тот же принцип обёртки, но с бэкендами XTTS и Piper под одним знакомым многим клиентам форматом запроса.

Какой сервер под XTTS брать в MAATRIX

Задача делится на два непохожих сценария, и путать их дорого.

СценарийКонфигурацияДля чего хватает
Офлайн-синтез на CPU2 vCPU, 4 ГБ RAM, 40 ГБ NVMeЕдиничные ролики, IVR, озвучка постов — без спешки
Комфортный CPU-режим4 vCPU, 8 ГБ RAM, 60 ГБ NVMeОчередь запросов, венв с PyTorch и запас на пиковую память
Реальное времяGPU-сервер, от 6 ГБ VRAMГолосовой бот, синхронная озвучка диалога

Сама модель по требованиям openedai-speech укладывается примерно в 4 ГБ VRAM, но карты младше 6 ГБ на рынке GPU-аренды почти не встречаются, а запас нужен под CUDA-буферы и параллельные запросы — отсюда разница между «модели достаточно» и «стоит брать».

Честный минимум — 2 vCPU, 4 ГБ RAM, 40 ГБ NVMe. Веса модели — 1,87 ГБ, CPU-сборка PyTorch с зависимостями добавляет ещё около гигабайта, а сам процесс синтеза держит в памяти и модель, и промежуточные тензоры. На 2 ГБ инференс упадёт по OOM на первом же запросе, подтверждение — journalctl -k | grep -i oom; тарифом ниже сюда не заходите.

Комфортный вариант — 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe. Запас на очередь запросов через xtts-api-server, место под несколько альтернативных образцов голоса и логи. Но для живого диалога это всё ещё не то — очередь на CPU растёт, а не сокращается.

Локация — Лондон (UK). Причина та же, что и для распознавания речи: веса скачиваются с huggingface.co, а с российских адресов до этого хоста часто не достучаться напрямую — первая же загрузка XTTS-v2 зависает на 1,87 ГБ. С британского адреса модель качается без танцев с прокси, плюс низкий пинг до Европы, если готовый звук нужен зарубежной аудитории.

XTTS-v2 нет в каталоге готовых приложений apps.maatrix.io — инструмент нишевый, и сервер под него приходит чистым: Ubuntu или Debian, дальше установка по шагам из этой статьи. Зато в каталоге есть готовые сборки соседей по голосовому стеку — Whisper для распознавания речи (подробности — в статье как установить и настроить faster-whisper на VPS) и Ollama для языковой модели, которые ставятся автоматически при заказе. Если нужна видеокарта под синтез в реальном времени, у MAATRIX есть отдельные GPU-серверы — конфигурации и логика выбора карты разобраны в статье про GPU-сервер для инференса LLM. Оплата — картами российских банков, по СБП, криптовалютой или токеном MAAT, независимо от того, CPU это или GPU.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Можно ли использовать XTTS в коммерческом проекте?

По умолчанию нет: веса модели лицензированы по Coqui Public Model License — только некоммерческое использование. Легального способа купить коммерческую лицензию у Coqui сейчас нет, компания закрылась в январе 2024 года. Для платного продукта смотрите в сторону моделей с permissive-лицензией вроде Piper.

Обязательна ли видеокарта для XTTS?

Нет, но с оговоркой: на CPU синтез абзаца текста занимает десятки секунд и больше, это нормально для офлайн-озвучки, но не для живого диалога. Для реального времени нужна видеокарта — сам openedai-speech в требованиях к своему XTTS-бэкенду называет Nvidia с CUDA и около 4 ГБ VRAM.

Как исправить ошибку Weights only load failed при загрузке модели?

Это следствие PyTorch 2.6+, где torch.load по умолчанию требует weights_only=True. Быстрее всего закрепить torch<2.6 в зависимостях; правильнее — разрешить классы конфигурации через torch.serialization.add_safe_globals([XttsConfig, XttsAudioConfig, XttsArgs, BaseDatasetConfig]) перед загрузкой модели.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.