部署音频生成模型
推理框架概览
- IndexTTS:IndexTTS(及其二代 IndexTTS2)是一个面向工业级应用的、支持**零样本(Zero-shot)语音克隆的自回归(Autoregressive)**TTS 框架。它在架构设计上融合了 XTTS 和 Tortoise 的优点 ,并引入了 BigVGAN 作为声码器,核心解决了传统自回归模型“时长不可控”和“情感与音色难解耦”的两大痛点。
IndexTTS2.infer() 推理方法
IndexTTS2.infer()是核心的生成函数,用于合成语音。它支持多种控制模式(声音克隆、情感控制、时长控制等),具体参数说明如下。
spk_audio_prompt(str, 必填): 音色参考音频的路径。模型会克隆该音频的说话人音色。text(str, 必填): 需要转换成语音的目标文本。output_path(str, 必填): 生成的.wav音频文件的保存路径。emo_audio_prompt(str, 可选): 情感参考音频的路径。- IndexTTS2 支持“音色”与“情感”解耦。如果不传此参数,默认使用
spk_audio_prompt的情感;如果传入,则使用spk_audio_prompt的音色 +emo_audio_prompt的情感。
- IndexTTS2 支持“音色”与“情感”解耦。如果不传此参数,默认使用
emo_vector(list[float], (0~1)可选): 8维情感向量,用于手动精确控制情感混合比例。
| 索引 (Index) | 情感 (Emotion) | 说明 (Description) |
|---|---|---|
| 0 | Happy (开心) | 快乐、愉悦 |
| 1 | Angry (生气) | 愤怒、激动 |
| 2 | Sad (悲伤) | 难过、低沉 |
| 3 | Fear (恐惧) | 害怕、紧张 |
| 4 | Disgust (厌恶) | 嫌弃、反感 |
| 5 | Melancholy (忧郁) | 惆怅 |
| 6 | Surprise (惊讶) | 震惊、意外 |
| 7 | Calm/Neutral (平静) | 正常说话、无明显情绪 |
使用示例: 如果你想要一个“既惊讶又有点开心”的声音,可以设置混合向量: emo_vector=[0.5, 0, 0, 0, 0, 0, 0.5, 0] (0.5 Happy + 0.5 Surprise)
use_emo_text(bool, 可选): 是否启用“文字描述情感”功能。emo_text(str, 可选): 情感描述文本(例如 "悲伤"、"angry")。如果启用了use_emo_text,模型会根据这段文字自动生成情感向量。emo_alpha(float, 可选): 情感强度系数,默认1.0。数值越大,情感表达越强烈。在使用文本控制情感时,推荐设置为0.6左右以获得更自然的效果。use_random(bool, 可选): 是否启用随机采样。默认为False(确定性生成),开启后每次生成的结果会有细微变化(韵律、语调等)。interval_silence(int, 可选): 长文本分段生成时,段落之间的静音时长(毫秒),默认200ms。verbose(bool, 可选): 是否打印详细的推理日志(如进度条、分段信息)。max_text_tokens_per_segment(int, 可选): 自动切分长文本的阈值,防止显存溢出或生成崩溃。
隐藏/高级参数(通过 **generation_kwargs 传递):
target_dur/duration_seconds: 指定生成音频的目标时长(秒)。这是 IndexTTS2 的核心特性之一,用于视频配音对齐。
前提条件
- 资源准备:
- 内置模型:使用平台内置模型库(路径
/mnt/moark-models/IndexTTS-2),零等待、零流量,实现即刻加载。 - 内置推理包:使用平台内置推理包(路径
/mnt/moark-models/github/index-tts/indextts)
- 内置模型:使用平台内置模型库(路径
- 环境一致性:
- 镜像匹配:国产芯片对底层驱动(Driver)和编译工具链(Toolkit)有严格要求。请严格按照各章节指定的镜像版本创建实例,错误的镜像将导致
import error或无法调用 加速卡。
- 镜像匹配:国产芯片对底层驱动(Driver)和编译工具链(Toolkit)有严格要求。请严格按照各章节指定的镜像版本创建实例,错误的镜像将导致
一、 沐曦 (MetaX) 部署指南
本章节适用于 曦云 C500 等沐曦系列算力卡。
1. 通用环境准备
所有沐曦模型部署均需基于以下环境配置进行:
- 算力型号:曦云 C500 (64GB/32GB)
- 镜像选择:
PyTorch>=2.6.0

基础操作步骤:
-
进入工作台:启动实例后,点击 JupyterLab 进入容器环境。

-
新建脚本:点击 “Notebook” 图标,新建一个
.ipynb文件。
2. 模型部署实战
请根据您需要的模型选择对应的实战案例代码。
2.1 IndexTTS-2
本示例演示如何在 曦云 C500 算力环境下,加载平台内置模型合成一段音频
运行推理代码
第一步安装相关的依赖 在notebook上新建单元格,运行以下代码
#安装必要的依赖库
!pip install bentoml \
accelerate==1.8.1 \
transformers==4.52.1 \
cn2an==0.5.22 \
ffmpeg-python==0.2.0 \
Cython==3.0.7 \
g2p-en==2.1.0 \
jieba==0.42.1 \
keras==2.9.0 \
numba==0.58.1 \
numpy==1.26.2 \
pandas==2.1.3 \
matplotlib==3.8.2 \
opencv-python==4.9.0.80 \
vocos==0.1.0 \
tensorboard==2.9.1 \
omegaconf \
sentencepiece \
munch==4.0.0 \
librosa==0.10.2.post1 \
descript-audiotools==0.7.2 \
"textstat>=0.7.10" \
tokenizers==0.21.0 \
json5==0.10.0 \
modelscope \
pydub \
tqdm \
"WeTextProcessing; platform_machine != 'Darwin'" \
"wetext; platform_system == 'Darwin'"

第二步加载模型 等待上述依赖安装完成后,在下方新起单元格,运行以下代码
!cp -rf /mnt/moark-models/github/index-tts/indextts ./
from indextts.infer_v2 import IndexTTS2
#请不要修改cfg_path和model_dir的路径
tts = IndexTTS2(cfg_path="/mnt/moark-models/github/index-tts/checkpoints/config.yaml", model_dir="/mnt/moark-models/IndexTTS-2", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
#如果需要生成不同的音色和音频内容,请替换spk_audio_prompt所需的参考音频以及text的输出内容。
text = "快躲起来!是他要来了!他要来抓我们了!"
tts.infer(spk_audio_prompt='/mnt/moark-models/github/index-tts/emo_sad.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)
查看结果与排查:
代码运行结束后,您可以在左侧文件栏找到 gen.wav,由于jupyter不支持播放音频文件,可下载至本地主机进行播放。

二、 燧原 (Enflame) 部署指南
1. 通用环境准备
所有燧原模型部署均需基于以下环境配置进行:
- 算力型号:Enflame S60 (48GB)
- 镜像选择:
Ubuntu / 22.04 / Python 3.13 / ef 1.5.0.604

基础操作步骤:
-
进入工作台:启动实例后,点击 JupyterLab 进入容器。

-
新建脚本:点击图标新建一个
.ipynb文件。
2. 模型部署实战
请根据您需要的模型选择对应的实战案例代码。
2.1 IndexTTS-2
本示例演示如何在 Enflame S60 算力环境下,加载平台内置模型合成一段音频
运行推理代码
第一步安装相关的依赖 在notebook上新建单元格,运行以下代码
#安装必要的依赖库
!pip install --break-system-packages \
transformers==4.52.1 \
librosa \
pydub \
omegaconf \
json5 \
g2p-en \
munch \
descript-audiotools \
WeTextProcessing \
python-magic \
textstat \
vocos \
jieba \
cn2an \
ffmpeg-python \
"numpy<1.24" -i https://mirrors.aliyun.com/pypi/simple

第二步加载模型 等待上述依赖安装完成后,在下方新起单元格,运行以下代码
!cp -rf /mnt/moark-models/github/index-tts/indextts ./
from indextts.infer_v2 import IndexTTS2
#请不要修改cfg_path和model_dir的路径
tts = IndexTTS2(cfg_path="/mnt/moark-models/github/index-tts/checkpoints/config.yaml", model_dir="/mnt/moark-models/IndexTTS-2", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
#如果需要生成不同的音色和音频内容,请替换spk_audio_prompt所需的参考音频以及text的输出内容。
text = "快躲起来!是他要来了!他要来抓我们了!"
tts.infer(spk_audio_prompt='/mnt/moark-models/github/index-tts/emo_sad.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)
查看结果与排查:
代码运行结束后,您可以在左侧文件栏找到 gen.wav,由于jupyter不支持播放音频文件,可下载至本地主机进行播放。

三、本地访问与服务封装 (通用)
由于安全原因,平台暂不开放公网直接访问端口。若您将 IndexTTS2 模型封装为 API 服务(如使用 FastAPI 监听 8188 端口),需通过 SSH 隧道进行本地访问。
1. 建立 SSH 隧道
1.1 设置密码
在工作台找到对应实例,点击“设置密码”并牢记。

1.2 打开本地终端
Windows:打开“我的电脑”,在地址栏输入 powershell 或 cmd 并回车。

1.3 获取连接信息
在工作台复制登录指令(包含 ssh 命令、用户名、IP 和端口)。

1.4 执行映射指令
在本地终端执行以下指令(注意替换为您的实际信息):
# 格式:ssh -CNg -L 本地端口:127.0.0.1:容器端口 用户名@IP -p SSH端口
ssh -CNg -L 8188:127.0.0.1:8188 root+vm-xxxxx@xxx.xx.xxx.xxx -p xxxxx

(注意:输入密码后终端会呈静默状态,保持窗口开启即可)
2. 本地调用
隧道建立后,您可以在本地代码或浏览器中访问 http://localhost:8188/ 来调用云端的推理服务。