Перейти к содержимому
Инструменты

Клонирование голоса локально без обучения — Qwen3-TTS и 6 ГБ

Клонирование голоса локально без обучения — Qwen3-TTS и 6 ГБ

Клонирование голоса локально не требует ночи с раскалённым компьютером. Qwen3-TTS-12Hz-1.7B-Base берёт трёхсекундный образец речи и синтезирует уже им — обучения нет вообще, это и называется zero-shot.

Путаница здесь стоит дорого: люди ставят «первый прогон обучения» на ночь, утром смотрят на забитую видеопамять и делают вывод, что локально ничего не работает. Работает, просто шаг был лишний.

Что на самом деле значит zero-shot

Zero-shot — это синтез без единого шага обучения на вашем голосе. Модель уже обучена, вы даёте ей образец на входе, она копирует тембр на лету. Дообучение, оно же fine-tuning, — отдельная процедура: вы меняете веса модели под конкретного диктора, и вот она действительно занимает часы и требует датасет.

В карточке Qwen3-TTS это разведено явно. Базовые модели описаны как способные на быстрый клон с трёх секунд аудио и отдельно помечены как пригодные для дообучения других моделей. Одно не является стадией другого. Если агент в вашем редакторе пишет «зеро-шот прошёл, ставим второй прогон» — он путает термины, а вы платите за это временем.

Как выглядит клонирование голоса локально на Qwen3-TTS

Разработчики рекомендуют чистое окружение и Python 3.12, чтобы не собирать конфликты зависимостей:

conda create -n qwen3-tts python=3.12 -y
conda activate qwen3-tts
pip install -U qwen-tts

Дальше нужен референс: файл, URL, base64 или пара массив-частота, плюс его текстовая расшифровка. Минимальный вызов такой:

wavs, sr = model.generate_voice_clone(
    text="Текст, который надо озвучить.",
    language="Russian",
    ref_audio=ref_audio,
    ref_text=ref_text,
)

Если расшифровки нет, есть режим x_vector_only_mode=True: тогда берётся только эмбеддинг диктора и ref_text не нужен. Карточка честно предупреждает, что качество клона при этом падает. Когда один и тот же голос нужен на десятках реплик, промпт собирается один раз через create_voice_clone_prompt и переиспользуется — иначе признаки референса пересчитываются на каждую генерацию.

Пощупать без кода можно так:

qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base --ip 0.0.0.0 --port 8000

Тут есть неочевидная ловушка. Для базовой модели документация рекомендует поднимать демо по HTTPS: без него современный браузер не отдаст доступ к микрофону, и записать референс прямо в интерфейсе не выйдет. Самоподписанный сертификат генерируется через openssl req -x509 и подключается флагами --ssl-certfile и --ssl-keyfile.

Признаки, что клон выйдет плохим

  • У референса нет текстовой расшифровки, и вы идёте через режим только с эмбеддингом. Разработчики сами пишут, что качество клонирования снижается.
  • В образце есть музыка, второй голос или реверберация зала. Модель копирует акустику вместе с тембром — вычистить это потом нечем.
  • Вы ждёте от русского того же, что от английского. В собственной таблице Qwen по мультиязычному тесту WER для русского у модели 3,212 против 0,934 у английского — русский оказался вторым с конца после японского.
  • В карточке модели среди языков только en и zh. Так у Microsoft VibeVoice-1.5B и у IndexTeam/IndexTTS-2: русского в заявленных языках нет, и никакой референс этого не исправит.
  • Эмоцию вы ждёте от настроек, а не от образца. Тон, темп и подача уезжают из референса: записали ровно — получите ровно.

Сколько это ест на самом деле

Модель Qwen3-TTS-12Hz-1.7B-Base — 1,93 млрд параметров в BF16, около 4,5 ГБ на диске. У меня на одном прогоне синтеза целой сказки пик составил примерно 6,5 ГБ видеопамяти и 4,2 ГБ оперативной памяти. Это один замер на одной машине, не бенчмарк: длина текста и размер батча его сдвинут. Но порядок понятен — карта на 8 ГБ такое тянет.

А вот попытка дообучения на своём голосе у меня забила все 16 ГБ и не закончилась за ночь. Разница принципиальная: zero-shot — это инференс, дообучение — это тренировка. Ещё разработчики рекомендуют FlashAttention 2 для экономии памяти, он ставится отдельно и требует совместимого железа, а при малом объёме оперативки сборку надо ограничивать через MAX_JOBS=4.

Из локальных альтернатив с русским: F5-TTS-Russian — дообученный чекпойнт на Common Voice 17, Golos и SOVA RuDevices, последнее обновление 25 января 2025 года. И XTTS-v2, который в разговорах всплывает чаще всех. Прежде чем строить на них продукт, посмотрите, какая лицензия TTS разрешает коммерческое использование: у обоих там неприятный сюрприз.

Что сделать сейчас

  1. Запишите чистый референс на 10–15 секунд ровным темпом и сразу сохраните его текстовую расшифровку в отдельный файл. Это половина качества клона.
  2. Прогоните zero-shot и послушайте результат до того, как ставить что-либо на дообучение. В большинстве бытовых задач второй шаг не нужен.
  3. Замерьте пик видеопамяти на своём тексте, а не на моём. Одна длинная реплика и десять коротких грузят карту по-разному.
  4. Если вам нужен не свой тембр, а просто ровный русский диктор на CPU, клонирование вообще лишнее — берите готовые русские голоса Piper без видеокарты.

Источники