Речь / ASR Apache-2.0

Parler TTS

Transformer · Hugging Face · 2024

VRAM по точности

Точность VRAM Качество Рекомендация
FP16 6 ГБ Максимальное Для продакшена
INT8 3 ГБ Хорошее

Совместимые GPU

GPU VRAM Поддерживает
24 ГБ FP16, INT8 Арендовать
24 ГБ FP16, INT8 Арендовать

Рекомендуемые фреймворки

Характеристики модели

Технические параметры

Разработчик
Hugging Face
Год выпуска
2024
Архитектура
Transformer
Лицензия
Apache-2.0
Формат вывода
WAV
Realtime factor

Применение

Text-to-speech Controlled voice synthesis Podcast generation

Parler TTS — открытая генеративная TTS от Hugging Face, где голос и манера задаются не только ID спикера, но и текстовым описанием (просодия, тембр, стиль чтения). Это удобно для контента, где нужны вариации «как диктор новостей» / «спокойно и тепло» без обучения отдельных эмбеддингов. Лицензия Apache-2.0; качество и выразительность выше, чем у сверхмалых 100M-классов, ценой большего веса и VRAM.

Запуск на cloudcompute.ru

Шаг 1 — Арендуйте GPU

Ориентир — около 6 ГБ VRAM и выше; комфортно на RTX 3090 или RTX 4090. Перейдите в каталог GPU.

Шаг 2 — Запустите модель

pip install torch soundfile transformers parler-tts
import torch
import soundfile as sf
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer

device = "cuda"
model_id = "parler-tts/parler-tts-large-v1"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = ParlerTTSForConditionalGeneration.from_pretrained(model_id).to(device, dtype=torch.float16)

prompt = "Hey, how are you doing today?"
description = (
    "Laura's voice is calm, slightly breathy, and very clear audio recording."
)

desc_inputs = tokenizer(description, return_tensors="pt").to(device)
prompt_inputs = tokenizer(prompt, return_tensors="pt").to(device)

with torch.inference_mode():
    audio = model.generate(
        input_ids=prompt_inputs.input_ids,
        attention_mask=prompt_inputs.attention_mask,
        prompt_input_ids=desc_inputs.input_ids,
        prompt_attention_mask=desc_inputs.attention_mask,
    )

audio = audio.to(torch.float32).cpu().numpy().squeeze()
sf.write("out.wav", audio, model.config.sampling_rate)

Оптимизация

  • Держите описание голоса стабильным между запросами, если нужна узнаваемая персона — меняйте только текст фразы.
  • Используйте fp16/bfloat16 на GPU и отключайте лишние логи transformers в продакшне.