分享 NVIDIA 基于 GPU 的 TTS 解决方案介绍。
1. 基于 FastPitch+Hifi-GAN 的 Streaming TTS 效果优化
NVIDIA 在 TTS 领域也做了一些供大家参考的工作,例如提供了高效的流式 TTS 部署方案,利用 TensorRT 加速模型推理速度,并通过 Triton Inference Server 实现了高效的流水线。今年,我们对流式 TTS 的效果进行了提升,主要集中在两个方面。
-
首先 我们发现许多 TTS 模型采用并行模型,其结构通常是非自回归的,并使用卷积等网络层一次性生成所有音频帧。然而,这种并行模型并不适合流式 TTS 合成。尤其在 chunk 之间的接缝处可能存在抖动瑕疵。因此,我们引入了一种 Incremental FastPitch 的方法,将完全并行的 FastPitch 转换为基于 chunk 的 FastPitch。通过使用 casual 卷积替代常规普通卷积,并采用基于 chunk 的 mask MultiHeadAttention,可以控制 chunk size 和 history size。这种 Mask 使得每个 chunk 内的帧不仅可以看到 chunk 内的其他帧,还能够看到之前 chunk 的帧,通过这种方式实现了基于 chunk 的 FastPitch 并且使得 chunk 之间的信息可以互相关联提升流式 TTS 的质量。Incremental FastPitch 的训练过程仍然可以利用带 mask 的注意力机制来实现并行运算。在推理过程中,可以逐个 chunk 地生成,实现类似迭代的自回归生成过程,从而在流式生成中考虑到历史信息,提升生成效果。
-
其次 我们采用了 stream GAN 逻辑,即在 Hifi GAN 的训练中,利用 discriminator 强制学习如何让 Generator 生成两个能够良好拼接的连续音频 chunk。
基于先前提到的两种流式 TTS 优化方案,我们开发了相应的推理服务框架,同样基于 Triton Inference Server 加上 TensorRT。
在这个框架中,使用 Triton 的 C++ custom backend 实现了高性能的 TTS 调度器。该调度器负责组织整个 TTS 管线的各个模块,并在这个过程中实现了“Inflight batching”,即连续批处理。新进来的请求可以随时加入到正在执行的 batch 中。新合成的音频 chunk 会以流式方式返回给 Triton Client。已完成的请求会立即终止,为新到达的请求腾出 slot。
此外,我们使用 Triton 的 Ensemble Model 功能以零代码的方式组合了需要同时运行的多个模块,如 Front End、声学模型的编码器总是要对输入的文本共同做一次处理。我们使用 Triton Ensemble 将它们无缝组合在一起,而无需编写任何串联代码,实现了零代码的模型串联功能。对于声学模型的解码器、vocoder 以及最后的 Chunk 拼接的 Blender,同样使用 Triton ensemble 功能以零代码的方式将它们组合在一起。最后,对于每个模型,包括声学模型的 encoder 和 vocoder,都使用 TensorRT 来加速推理。
2. 关于声音克隆的参考工作
首先,我们开发了一个 Multi-speaker FastPitch 的训练方案,并在开源项目中提供了这个解决方案。在我们的实验中,混合了三个开源数据集(AIShell 3、CSS 10 Chinese、LJSpeech),共计 220 个 Speaker,进行了训练。
获得了多说话人的 FastPitch 模型后,则可进入声音克隆的 Finetuning 阶段。用户首先录制 20 句话。接着,根据用户的声音在训练集中找到一个与之最相似的 Speaker,用其声音的 embedding 初始化用户的 Speaker Embedding。然后,使用用户上传的 20 句话进 finetuning,保持 FastPitch 不变,对 finetuning Speaker 的 Embedding 进行微调。最终,该模型使用 Multi-speaker FastPitch 生成与用户声音相似的音频效果。
为了实现这一思路的工程化,我们同样采用 Triton Inference Server 进行部署。在此我们配置了两个 Triton Server,一个用于声音克隆,另一个用于 TTS 生成。用户录制的 20 句话可以通过 Triton 的客户端上传到声音克隆 Triton Server。在声音克隆 Triton Server 上,运行声音克隆的 finetuning 过程,使用 Triton 的 Python backend,在其中引用 PyTorch 包来实现 finetuning 流程。在这个管线中,能够同时处理多个用户的请求,以 batch 的方式进行 finetuning 提高 GPU 利用率和并发效率。
最后,将每个 Speaker 的 Embedding 返回给客户端,并将 finetuning 完成的 Speaker Embedding 存储在 Embedding Pool 中。用户想要生成自己的声音只需获取返回的 Speaker Embedding,并访问我们的 Triton TTS Server,即我们部署的 Multi-speaker TTS 模型。该模型使用 fine-tuning 完成的 Speaker Embedding 生成与用户声音相似的音频。这就是我们的声音克隆工作的流程。
原文地址:一文搞懂 NVIDIA 在 GPU 上高效部署语音 AI 模型的最新应用