針對(duì)基于 Diffusion 和 LLM 類(lèi)別的 TTS 模型,NVIDIA Triton 和 TensorRT-LLM 方案能顯著提升推理速度。在單張 NVIDIA Ada Lovelace GPU 上,F(xiàn)5-TTS 模型每秒可生成長(zhǎng)達(dá) 25 秒的音頻;Spark-TTS 在流式合成場(chǎng)景下,首包延遲可低至 200 余毫秒。
Text-to-Speech (TTS) 是智能語(yǔ)音技術(shù)的核心組成部分。隨著大模型時(shí)代的到來(lái),TTS 模型的參數(shù)量和計(jì)算量持續(xù)增長(zhǎng),如何高效利用 GPU 部署 TTS 模型,構(gòu)建低延遲、高吞吐的生產(chǎn)級(jí)應(yīng)用,已成為開(kāi)發(fā)者日益關(guān)注的焦點(diǎn)。
本文將圍繞兩款 Github 社區(qū)流行的 TTS 模型——F5-TTS[1]和 Spark-TTS[2]——詳細(xì)介紹運(yùn)用NVIDIA Triton推理服務(wù)器和 TensorRT-LLM 框架實(shí)現(xiàn)高效部署的實(shí)踐經(jīng)驗(yàn),包括部署方案的實(shí)現(xiàn)細(xì)節(jié)、具體使用方法及最終的推理效果等。開(kāi)發(fā)者可根據(jù)不同的應(yīng)用場(chǎng)景選擇合適的方案,并可利用性能分析工具調(diào)整配置,以最大化利用 GPU 資源。
方案介紹
當(dāng)前主流的 TTS 大模型大致可分為兩類(lèi):非自回歸擴(kuò)散模型和自回歸 LLM 模型。非自回歸擴(kuò)散模型因其解碼速度快,易于實(shí)現(xiàn)高吞吐性能;而自回歸 LLM 模型則以更佳的擬人效果和對(duì)流式合成的天然支持為特點(diǎn)。實(shí)踐中,常有方案將兩者結(jié)合,先使用自回歸 LLM 生成語(yǔ)義 Token,再利用非自回歸擴(kuò)散模型生成音頻細(xì)節(jié)。
圖1: TTS 部署方案結(jié)構(gòu)
F5-TTS
F5-TTS 是一款非自回歸擴(kuò)散 TTS 模型,它基于 DiT (Diffusion Transformer) 和 Flow-matching 算法,移除了傳統(tǒng)非自回歸 TTS 模型中的 Duration 模塊,使模型能直接學(xué)習(xí)文本到語(yǔ)音特征的對(duì)齊。
其推理加速方案利用NVIDIA TensorRT-LLM加速計(jì)算密集的 DiT 模塊,并采用 NVIDIA TensorRT 優(yōu)化 Vocos 聲碼器,最后通過(guò) NVIDIA Triton 進(jìn)行服務(wù)部署。
方案地址:
https://github.com/SWivid/F5-TTS/tree/main/src/f5_tts/runtime/triton_trtllm
Spark-TTS
Spark-TTS 是一款自回歸 LLM TTS 模型,它采用經(jīng)過(guò)擴(kuò)詞表預(yù)訓(xùn)練的 Qwen2.5-0.5B LLM 來(lái)預(yù)測(cè) Speech Token,并基于 VAE Decoder 重構(gòu)最終音頻。
其部署方案通過(guò) NVIDIA TensorRT-LLM 加速基于 LLM 的語(yǔ)義 Token 預(yù)測(cè)模塊,并借助 NVIDIA Triton 串聯(lián)其余組件,支持離線合成與流式推理兩種模式。
方案地址:
https://github.com/SparkAudio/Spark-TTS/tree/main/runtime/triton_trtllm
方案性能
我們從WenetSpeech4TTS 測(cè)試集[3]中選取了 26 組 Prompt Audio 和 Target Text 音頻文本對(duì),在 Zero-shot 音色克隆任務(wù)上測(cè)試了模型的推理性能。測(cè)試細(xì)節(jié)如下:
F5-TTS
針對(duì) F5-TTS,我們?cè)?Offline 模式下(即直接在本地進(jìn)行推理,不涉及服務(wù)部署和請(qǐng)求調(diào)度)測(cè)試了 TensorRT-LLM 推理方案的性能:
測(cè)試結(jié)果如下(Batch Size 固定為 1,因當(dāng)前 F5-TTS 版本暫不支持 Batch 推理;Flow-matching 推理步數(shù)固定為 16):
如上表所示,與原生 PyTorch 實(shí)現(xiàn)(默認(rèn)啟用 SDPA 加速)相比,NVIDIA TensorRT-LLM方案在 Ada Lovelace GPU 上實(shí)現(xiàn)了約 3.6 倍的加速,每秒可生成的音頻時(shí)長(zhǎng)從 7 秒提升至 25 秒。
Spark-TTS
對(duì)于 Spark-TTS,我們?cè)?Client-Server 模式下(即客戶端向服務(wù)器發(fā)送請(qǐng)求)測(cè)試了端到端推理服務(wù)的性能。測(cè)試結(jié)果如下(Offline 模式不統(tǒng)計(jì)首包延遲,Streaming 模式首包音頻長(zhǎng)度為 1 秒):
上表結(jié)果中,LLM 模塊默認(rèn)啟用了 TensorRT-LLM 的inflightbatching 模式。為模擬多路并發(fā)場(chǎng)景,我們基于 Python asyncio 庫(kù)實(shí)現(xiàn)了一個(gè)異步并發(fā)客戶端。此部署方案在 Ada Lovelace GPU 上,每秒可生成約 15 秒音頻,流式模式下的首包延遲低至 200 余毫秒。
快速上手
本節(jié)將指導(dǎo)您如何快速部署和測(cè)試 F5-TTS 與 Spark-TTS 模型。在此之前,建議您先克隆對(duì)應(yīng)的代碼倉(cāng)庫(kù),并進(jìn)入runtime/triton_trtllm目錄操作。
F5-TTS
詳細(xì)步驟請(qǐng)參考F5-TTS/src/f5_tts/runtime/triton_trtllm/README.md和run.sh腳本。
1. 最簡(jiǎn)部署 (Docker Compose):這是啟動(dòng) F5-TTS 服務(wù)最快捷的方式。
# 根據(jù)您的模型選擇,例如 F5TTS_Base MODEL=F5TTS_Base docker compose up
(注意:F5TTS_v1_Base的支持可能仍在開(kāi)發(fā)中,請(qǐng)檢查項(xiàng)目 README)
2. 手動(dòng)部署與服務(wù)啟動(dòng):如果您需要更細(xì)致地控制部署流程,可以使用run.sh腳本分階段執(zhí)行。
# 腳本參數(shù):[model_name] # 例如,執(zhí)行階段0到4,使用 F5TTS_Base 模型 bashrun.sh04F5TTS_Base
這個(gè)命令會(huì)依次執(zhí)行以下主要步驟:
Stage 0:下載 F5-TTS 模型文件。
Stage 1:轉(zhuǎn)換模型權(quán)重為 TensorRT-LLM 格式并構(gòu)建引擎。
Stage 2:導(dǎo)出 Vocos 聲碼器為 TensorRT 引擎。
Stage 3:構(gòu)建 Triton 推理服務(wù)器所需的模型倉(cāng)庫(kù)。
Stage 4:?jiǎn)?dòng) Triton 推理服務(wù)器。
3. 測(cè)試服務(wù):服務(wù)啟動(dòng)后,您可以使用提供的客戶端腳本進(jìn)行測(cè)試。
gRPC 客戶端 (數(shù)據(jù)集 Benchmark):
# 示例命令,對(duì)應(yīng) run.sh stage 5 # 具體參數(shù)(如 num_task, dataset)請(qǐng)根據(jù)需求調(diào)整 python3 client_grpc.py --num-tasks 1 --huggingface-dataset yuekai/seed_tts --split-name wenetspeech4tts --log-dir ./log_f5_grpc_bench
HTTP 客戶端(單句測(cè)試):
# 示例命令,對(duì)應(yīng) run.sh stage6 # audio, reference_text, target_text 請(qǐng)?zhí)鎿Q為您的測(cè)試數(shù)據(jù) python3 client_http.py--reference-audio ../../infer/examples/basic/basic_ref_en.wav --reference-text "Some call me nature, others call me mother nature." --target-text "I don't really care what you call me. I've been a silent spectator, watching species evolve, empires rise and fall. But always remember, I am mighty and enduring."
4. OfflineTensorRT-LLM基準(zhǔn)測(cè)試:如果您希望直接測(cè)試 TensorRT-LLM 在 Offline 模式下的性能(不通過(guò) Triton 服務(wù)),可以執(zhí)行run.sh中的 Stage 7。
# 此命令對(duì)應(yīng) run.sh stage 7 # 環(huán)境變量如 F5_TTS_HF_DOWNLOAD_PATH, model, vocoder_trt_engine_path, F5_TTS_TRT_LLM_ENGINE_PATH # 通常在 run.sh 腳本頂部定義,請(qǐng)確保它們已正確設(shè)置或替換為實(shí)際路徑。 batch_size=1 model=F5TTS_Base# 示例模型名稱(chēng) split_name=wenetspeech4tts backend_type=trt log_dir=./log_benchmark_batch_size_${batch_size}_${split_name}_${backend_type} # 確保以下路徑變量已設(shè)置,或直接替換 # F5_TTS_HF_DOWNLOAD_PATH=./F5-TTS (示例) # F5_TTS_TRT_LLM_ENGINE_PATH=./f5_trt_llm_engine (示例) # vocoder_trt_engine_path=vocos_vocoder.plan (示例) rm-r$log_dir2>/dev/null # ln -s ... # 符號(hào)鏈接通常在 run.sh 中處理,按需創(chuàng)建 torchrun --nproc_per_node=1 benchmark.py --output-dir$log_dir --batch-size$batch_size --enable-warmup --split-name$split_name --model-path$F5_TTS_HF_DOWNLOAD_PATH/$model/model_1200000.pt --vocab-file$F5_TTS_HF_DOWNLOAD_PATH/$model/vocab.txt --vocoder-trt-engine-path$vocoder_trt_engine_path --backend-type$backend_type --tllm-model-dir$F5_TTS_TRT_LLM_ENGINE_PATH||exit1
Spark-TTS
詳細(xì)步驟請(qǐng)參考Spark-TTS/runtime/triton_trtllm/README.md和run.sh腳本。
1. 最簡(jiǎn)部署 (Docker Compose):
dockercompose up
2. 手動(dòng)部署與服務(wù)啟動(dòng):使用run.sh腳本進(jìn)行分階段部署。
#腳本參數(shù):[service_type] #service_type 可為'streaming'或'offline',影響模型倉(cāng)庫(kù)配置 #例如,執(zhí)行階段0到3,部署為 offline 服務(wù) bash run.sh 0 3 offline
此命令會(huì)執(zhí)行:
Stage 0:下載 Spark-TTS 模型。
Stage 1:轉(zhuǎn)換模型權(quán)重并構(gòu)建 TensorRT 引擎。
Stage 2:根據(jù)指定的 service_type (streaming/offline) 創(chuàng)建 Triton 模型倉(cāng)庫(kù)。
Stage 3:?jiǎn)?dòng) Triton 推理服務(wù)器。
3. 測(cè)試服務(wù) (Client-Server 模式):服務(wù)啟動(dòng)后,可使用客戶端腳本進(jìn)行測(cè)試。
gRPC 客戶端 (數(shù)據(jù)集 Benchmark):此命令對(duì)應(yīng)run.sh中的 stage 4。
# 示例:測(cè)試 offline 模式,并發(fā)數(shù)為2 # bash run.sh 4 4 offline # 其核心命令如下: num_task=2 mode=offline# 或 streaming python3 client_grpc.py --server-addr localhost --model-name spark_tts --num-tasks$num_task --mode$mode --huggingface-dataset yuekai/seed_tts --split-name wenetspeech4tts --log-dir ./log_concurrent_tasks_${num_task}_${mode}
單句測(cè)試客戶端: 此命令對(duì)應(yīng)run.sh中的 stage 5。
Streaming 模式 (gRPC):
# bash run.sh55streaming # 其核心命令如下: python client_grpc.py --server-addr localhost --reference-audio ../../example/prompt_audio.wav --reference-text $prompt_audio_transcript --target-text $target_audio_text --model-name spark_tts --chunk-overlap-duration 0.1 --mode streaming
Offline 模式 (HTTP):
# bash run.sh 5 5 offline # 其核心命令如下: python client_http.py --reference-audio ../../example/prompt_audio.wav --reference-text$prompt_audio_transcript --target-text$target_audio_text --model-name spark_tts
兼容 OpenAI 格式的 API
許多開(kāi)源對(duì)話項(xiàng)目 (如 OpenWebUI)[4]已支持 OpenAI 格式的 TTS API。為方便開(kāi)發(fā)者集成,我們提供了兼容 OpenAI API 的服務(wù),用法如下:
git clone https://github.com/yuekaizhang/Triton-OpenAI-Speech.git cdTriton-OpenAI-Speech docker compose up curl$OPENAI_API_BASE/audio/speech -H"Content-Type: application/json" -d '{ "model":"spark_tts", "input":$target_audio_text, "voice":"leijun", "response_format":"pcm" }'| sox-t raw-r16000-e signed-integer-b16-c1-output3_from_pcm.wav
總結(jié)
無(wú)論是 F5-TTS 或是 Spark-TTS,都可以看到 NVIDIA Triton 推理服務(wù)器和 TensorRT-LLM 框架可以大幅提升 TTS 模型的推理速度,也方便開(kāi)發(fā)者進(jìn)行模型部署。我們將持續(xù)增加對(duì)更多語(yǔ)音多模態(tài)模型的部署支持。
除了TTS,NVIDIA 技術(shù)團(tuán)隊(duì)也為多種社區(qū)流行的多模態(tài)模型開(kāi)發(fā)了最佳實(shí)踐,詳細(xì)方案介紹以及教程,請(qǐng)參閱 mair-hub[5]項(xiàng)目。
近期我們還將舉辦一場(chǎng)和該主題相關(guān)的在線研討會(huì),歡迎大家報(bào)名參加,共同交流和探討。
作者
張悅鎧
張悅鎧是 NVIDIA 解決方案架構(gòu)師,碩士畢業(yè)于約翰霍普金斯大學(xué),導(dǎo)師為 Shinji Watanabe 教授,主要研究方向?yàn)?a href="http://www.asorrir.com/tags/語(yǔ)音識(shí)別/" target="_blank">語(yǔ)音識(shí)別。NVIDIA 中文語(yǔ)音識(shí)別解決方案主要開(kāi)發(fā)者,對(duì)基于 GPU 的語(yǔ)音識(shí)別服務(wù)部署及優(yōu)化有豐富經(jīng)驗(yàn)。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5258瀏覽量
105844 -
gpu
+關(guān)注
關(guān)注
28文章
4915瀏覽量
130714 -
模型
+關(guān)注
關(guān)注
1文章
3499瀏覽量
50058 -
LLM
+關(guān)注
關(guān)注
1文章
321瀏覽量
695
原文標(biāo)題:使用 NVIDIA Triton 和 TensorRT-LLM 部署 TTS 應(yīng)用的最佳實(shí)踐
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
TensorRT-LLM初探(一)運(yùn)行l(wèi)lama

NVIDIA Triton助力騰訊PCG加速在線推理

基于NVIDIA Triton的AI模型高效部署實(shí)踐
周四研討會(huì)預(yù)告 | 注冊(cè)報(bào)名 NVIDIA AI Inference Day - 大模型推理線上研討會(huì)
現(xiàn)已公開(kāi)發(fā)布!歡迎使用 NVIDIA TensorRT-LLM 優(yōu)化大語(yǔ)言模型推理

點(diǎn)亮未來(lái):TensorRT-LLM 更新加速 AI 推理性能,支持在 RTX 驅(qū)動(dòng)的 Windows PC 上運(yùn)行新模型

如何在 NVIDIA TensorRT-LLM 中支持 Qwen 模型

利用NVIDIA產(chǎn)品技術(shù)組合提升用戶體驗(yàn)
NVIDIA加速微軟最新的Phi-3 Mini開(kāi)源語(yǔ)言模型
魔搭社區(qū)借助NVIDIA TensorRT-LLM提升LLM推理效率
NVIDIA Nemotron-4 340B模型幫助開(kāi)發(fā)者生成合成訓(xùn)練數(shù)據(jù)

TensorRT-LLM低精度推理優(yōu)化

NVIDIA TensorRT-LLM Roadmap現(xiàn)已在GitHub上公開(kāi)發(fā)布

解鎖NVIDIA TensorRT-LLM的卓越性能
在NVIDIA TensorRT-LLM中啟用ReDrafter的一些變化

評(píng)論