Ръководство за извеждане с TTS модел¶
Успешно сте обучили или донастроили TTS модел и сте избрали обещаващ checkpoint. Сега можете да използвате този модел, за да превръщате нов текст в реч, процес, който обикновено се нарича inference или synthesis.
Ако някой термин за inference или deployment е неясен, използвайте речника. Тук са обяснени само термините, които пряко влияят върху генерирането, оценката или споделянето на модела.
Извеждане: синтезиране на реч¶
Тази част обяснява как да стартирате inference с обучения модел.
Намерете inference скрипта и подходящия checkpoint¶
- Inference скрипт: Потърсете Python скрипт като
inference.py,synthesize.py,infer.pyилиtts.py. Името и аргументите се различават между рамките. - Най-добър checkpoint: Намерете checkpoint файла (
.pth,.pt,.ckpt), който искате да използвате. Най-често това еbest_model.pthили друг checkpoint, избран след слушане на validation sample-и. - Конфигурационен файл: Почти винаги ще ви трябва същият
.yamlили.jsonconfig, който е използван по време на обучението на този checkpoint. Ако config и checkpoint не съвпадат, често ще получите грешка при зареждане или лош изход.
Основно извеждане за едно изречение¶
-
Цел: Да генерирате аудио за едно кратко изречение, подадено от командния ред.
python inference.py \ --config ../checkpoints/my_yoruba_voice_run1/config.yaml \ --checkpoint_path ../checkpoints/my_yoruba_voice_run1/best_model.pth \ --text "Hello, this is a test of my custom trained voice." \ --output_wav_path ./output_sample.wav # По избор: # --speaker_id "main_speaker" # --device "cuda" -
Основни аргументи:
--configили-c: Път до training config файла.--checkpoint_pathили--model_path: Път до checkpoint файла.--textили-t: Входният текст за синтез.--output_wav_pathили--out_path: Къде да се запише генерираният WAV файл.--speaker_id: Нужен е при многоговорителни модели.--device: Обикновеноcuda, ако е налично, иначеcpu.
Първи smoke test за inference¶
При първия тест не започвайте с дълъг абзац или голям batch файл. Използвайте едно кратко изречение, например:
Ако това не работи, оправете базовия pipeline първо. Пакетното извеждане няма да поправи грешен config, грешен checkpoint или грешен speaker ID.
Пакетно извеждане от текстов файл¶
- Цел: Да синтезирате няколко изречения от текстов файл и да ги запишете като отделни WAV файлове.
-
Подгответе входния файл: Направете
sentences.txt, в който всеки ред е отделно изречение. -
Примерна команда:
-
Ключови аргументи:
--input_fileили--text_file: Път до текстовия файл.--output_dirили--out_dir: Папка за генерираните WAV файлове.- Останалите аргументи са подобни на single sentence inference.
Извеждане при многоговорителни модели¶
- Ако моделът е обучен върху данни от няколко говорителя, трябва да зададете кой говорител искате.
- Използвайте
--speaker_idсъс същия идентификатор, който сте използвали в manifest файловете. - Ако пропуснете
speaker_id, inference скриптът може да върне грешка, да използва speaker 0 по подразбиране или да даде размит резултат.
Разширени контроли за inference¶
- Някои рамки поддържат допълнителни параметри:
- Скорост на речта:
--speedили--length_scale - Контрол на pitch
- Стил или емоция:
--style_text,--style_wavи подобни - Настройки на вокодера
- Параметри за diffusion step-ове
- Скорост на речта:
- Винаги проверявайте
python inference.py --helpи документацията на конкретната рамка.
Чести проблеми при inference¶
- CUDA Out-of-Memory: Много дългите изречения могат да използват повече памет от очакваното.
- Несъответствие между model и config: Много често срещана причина за счупен изход.
- Грешен speaker ID: Особено при multi-speaker модели.
- Лошо качество на звука: Върнете се към Ръководство 1 и Ръководство 3, ако изходът е шумен, нестабилен или неразбираем.
По избор: оценка и deployment¶
Тази секция е нарочно по избор. Ако сте начинаещи, не блокирайте върху MOS тестове, ASR метрики или production deployment преди да можете надеждно да генерирате няколко добри локални sample-а.
За повечето лични и първи проекти локалното слушане е достатъчно, за да решите дали даден checkpoint си струва да бъде запазен. Приемайте метриките по-долу като инструменти за сравнение и дебъгване, а не като задължително условие за използване на модела.
Оценка на качеството на TTS модела¶
Субективното слушане остава най-важният критерий, но някои обективни метрики могат да помогнат.
Обективни метрики за оценка¶
| Метрика | Какво измерва | Инструмент или реализация | Тълкуване |
|---|---|---|---|
| MOS (Mean Opinion Score) | Общо възприемано качество | Хора оценяват sample-ите по скала 1-5 | По-високо е по-добре; изисква оценители |
| PESQ | Качество спрямо референтен запис | Python пакет pypesq |
Диапазон -0.5 до 4.5; по-високо е по-добре |
| STOI | Разбираемост на речта | Python пакет pystoi |
Диапазон 0 до 1; по-високо е по-добре |
| CER / WER | Разбираемост чрез ASR | Пуснете ASR върху синтезираната реч и сравнете с входния текст | По-ниско е по-добре |
| MCD | Спектрално разстояние спрямо референция | Собствена реализация с librosa |
По-ниско е по-добре; често 2-8 при TTS |
| F0 RMSE | Точност на pitch-а | Собствена реализация с librosa |
По-ниско е по-добре; измерва точността на pitch контура |
| Voicing Decision Error | Точност на voiced/unvoiced решенията | Собствена реализация | По-ниско е по-добре |
Практичен подход за оценка¶
- Подгответе кратък набор от тестови изречения, които не са използвани при обучението.
- Генерирайте sample-и с избрания checkpoint.
- Прослушайте ги за естественост, стабилност, произношение и правилен говорител.
- Ако е нужно, добавете обективни метрики като вторичен сигнал, а не като единствен критерий.
Практична бележка: този подход е за експерименти, а не готов production pipeline. Започнете с малък и постоянен набор за слушане и добавете обективни метрики само ако ви трябват по-ясни сравнения между checkpoint-и или версии.
Deployment на TTS модели¶
Бележка за обхвата: deployment е отделен инженерен проблем. Ако още оправяте произношение, нестабилност или объркан говорител, продължете локално преди да мислите за production.
Практично правило: не започвайте с Kubernetes, autoscaling или serverless инфраструктура, преди да имате стабилна локална inference команда и повторяем начин за зареждане на модела. Локалната надеждност е първа.
Основни съображения за production deployment¶
- Оптимизация на модела: Quantization намалява точността от FP32 към FP16 или INT8; pruning премахва ненужни тегла; distillation обучава по-малък student модел; ONNX подобрява преносимостта.
- Оптимизация на латентността: Използвайте batch processing за несинхронни заявки, streaming за реално време, caching за чести фрази и GPU/TPU ускорение.
- Мащабируемост: Docker пакетира модела и зависимостите, Kubernetes оркестрира контейнерите, autoscaling настройва ресурсите според натоварването, а request queues поемат пикове.
- Наблюдение и поддръжка: Следете latency, throughput, error rates, използването на ресурсите, качеството на изхода и A/B тестовете между версии.
Примерна production deployment архитектура¶
flowchart TD
clients["Client Applications"] --> lb["Load Balancer"]
lb --> gateway["API Gateway"]
gateway --> validation["Request Validation"]
validation --> rateLimit["Rate Limiting"]
rateLimit --> auth["Authentication"]
auth --> queue["Request Queue"]
queue --> workers["TTS Worker Pods<br/>(Kubernetes)"]
workers --> model["TTS Model Container"]
model --> post["Audio Post-Processing"]
post --> storage["Audio Storage"]
workers --> cache["Audio Cache"]
storage --> cache
Локални варианти за deployment¶
За много поддържащи проекта малък wrapper скрипт или лек Gradio demo са достатъчни за дълго време. Не ви е необходим production stack само за да използвате модела локално или да го покажете на няколко тестери.
- Команден интерфейс: скрипт, който обгръща inference кода и приема
--text,--model,--config,--outputи--speakerаргументи. - Прост уеб интерфейс: базов интерфейс с Flask или Gradio, който зарежда модела при стартиране и връща генерирания аудио файл.
- Gradio demo: подходящ за локално тестване или бързо споделяне на модел с тестери.
Облачни варианти за deployment¶
За production употреба разгледайте:
- Hugging Face Spaces: качете модела и създайте Gradio или Streamlit приложение.
- REST API: обвийте модела във FastAPI или Flask приложение и го разположете в облачна услуга.
- Serverless функции: подходящи за по-леки модели.
- Docker контейнери: пакетирайте модела и зависимостите за по-предсказуемо разгръщане.
Оптимизация на производителността¶
За да подобрите скоростта и ефективността на inference:
- Quantization: преобразувайте теглата към FP16 или INT8.
- ONNX export: конвертирайте PyTorch модела за по-бърз inference.
- Batch processing: обработвайте няколко текстови входа наведнъж за по-висок throughput.
- Caching: кеширайте често заявявани фрази, за да не ги генерирате повторно.
- По-кратки входове: използвайте предвидими inference входове за по-нисък latency.
Сега, когато можете да генерирате реч с обучения модел, следващата логична стъпка е да организирате файловете на модела за по-лесно бъдещо използване, споделяне или deployment.
Преди да продължите¶
- Checkpoint файлът и config файлът са от едно и също training изпълнение.
- Тествали сте едно кратко изречение преди голям batch job.
- Output пътят или output папката съществува и е записваема.
- Подали сте правилния speaker ID при multi-speaker модел, ако е нужен.
- Ако звукът е грешен, проверили сте sampling rate, config съвпадение и избора на checkpoint преди да променяте inference текста.