跳到主要内容
feedback
feedback

部署音频生成模型 (TTS)

一、模型原理与结构

文本转语音(TTS)模型将文字转换为自然流畅的语音,现代 TTS 系统通常包含:

  • 文本编码器:将文本转换为语音学特征(音素、韵律标记)
  • 声学模型:生成声学特征(梅尔频谱图),采用 Transformer、Flow Matching 或 Diffusion 架构
  • 声码器(Vocoder):将梅尔频谱图转换为音频波形,如 HiFi-GAN、BigVGAN
  • 零样本克隆:通过参考音频提取说话人嵌入,实现音色迁移

IndexTTS 系列采用自回归架构融合 XTTS 与 Tortoise 优势,通过情感向量解耦实现精细的情感与音色控制,支持可控时长生成。

二、应用场景

语音合成模型可应用于:

  • 有声读物与播客:自动朗读文章、新闻
  • 虚拟主播与数字人:直播、短视频配音
  • 智能客服:电话机器人、语音导航
  • 无障碍辅助:为视障人士朗读屏幕内容
  • 游戏与影视配音:角色对话生成、多语言配音

三、部署指南与示例

本指南以 IndexTTS 框架为例,演示在国产算力环境中完成高质量语音合成的部署流程。我们将以 IndexTTS-2 为示例模型。

推理框架概览

  • 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 的情感。
  • emo_vector (list[float], (0~1)可选): 8维情感向量,用于手动精确控制情感混合比例。
索引 (Index)情感 (Emotion)说明 (Description)
0Happy (开心)快乐、愉悦
1Angry (生气)愤怒、激动
2Sad (悲伤)难过、低沉
3Fear (恐惧)害怕、紧张
4Disgust (厌恶)嫌弃、反感
5Melancholy (忧郁)惆怅
6Surprise (惊讶)震惊、意外
7Calm/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 或无法调用加速卡。

一、 沐曦 (MetaX) 部署指南

本章节适用于 曦云 C500 等沐曦系列算力卡。

1. 通用环境准备

所有沐曦模型部署均需基于以下环境配置进行:

  • 算力型号:曦云 C500 (64GB/32GB)
  • 镜像选择: PyTorch / 2.6.0 / Python 3.10 / maca 3.2.1.3
  • 版本要求pytorch>=2.4

镜像选择

基础操作步骤:

  1. 进入工作台:启动实例后,点击 JupyterLab 进入容器环境。

    进入容器

  2. 新建脚本:点击 “Notebook” 图标,新建一个 .ipynb 文件。

    新建Notebook


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

镜像选择

基础操作步骤:

  1. 进入工作台:启动实例后,点击 JupyterLab 进入容器。

    进入容器

  2. 新建脚本:点击图标新建一个 .ipynb 文件。

    新建Notebook


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不支持播放音频文件,可下载至本地主机进行播放。 图像结果


三、本地访问与服务验证

请参考【SSH 隧道配置指南】建立安全连接。


四、实战课题

课题目标

使用 Qwen3-TTS-12Hz-1.7B-Base 模型完成以下两项任务,所有输出文件请保存至 /data/exam/ 目录。

任务一:单次推理测试

任务要求

  • 使用 Qwen3-TTS-12Hz-1.7B-Base 模型(路径:/mnt/moark-models/Qwen3-TTS-12Hz-1.7B-Base
  • 合成以下文本:
    欢迎来到模力方舟平台,这里汇聚了最前沿的国产算力资源,为您的AI研发提供强大支持。
  • 可使用参考音频:/mnt/moark-models/tts_reference_voice.wav(如模型支持音色克隆)
  • 将生成音频保存为 /data/exam/tts_output.wav

实现提示

  • 使用 Hugging Face Transformers 或对应的 TTS 框架
  • 注意音频采样率(12kHz)
  • 使用 soundfile 或 librosa 保存音频文件

任务二:部署 OpenAI 兼容 API

任务要求

  • 使用 FastAPI 创建语音合成服务
  • 8188 端口运行
  • 提供 /v1/audio/speech 端点,兼容 OpenAI 格式
  • 接收 JSON 请求,必须包含 input(克隆文本),克隆的音色不做要求,能够处理input文本即可
  • 返回 base64 编码的音频数据或直接返回音频流

实现提示

  • 在服务启动时加载 TTS 模型
  • 将生成的音频转换为 WAV 格式
  • 使用 BytesIO 和 base64 进行音频编码
  • 通过 SSH 隧道映射到本地测试

提交要求: 完成作答后,直接提交检测即可。本课程采取程序自动检测的方式。

需确保以下文件输出完整:

  1. 合成音频文件:/data/exam/tts_output.wav