CTranslate2 新增了将文字转换为声音的 Drama 3 模型的实验性离线执行功能。希望将语音合成加入本地服务的开发者,可以先使用普通处理器,再按需借助图形处理器加速部分运算。

转换并备好官方模型文件后,合成时无需另行使用大型框架。该方式将模型准备与实际语音生成分开,让开发者能在现有 CTranslate2 执行环境中尝试本地语音合成。

1. 实验功能涵盖从音频码生成到波形重建

CTranslate2 4.8.4 于 2026 年 10 月 25 日发布。该功能先从文本生成声音的中间表示,即音频码,再将其重建为单声道、单路声音信号的波形。它不仅支持模型转换,还涵盖生成可实际聆听的语音的过程。

此次发布还新增了音频模型所用运算的 CPU·GPU 实现。官方指南将 CPU 作为默认执行路径,并列出 CUDA 和 ROCm 作为可选加速方案。即使没有加速设备,也能开始语音合成。

2. 转换官方检查点,准备本地模型

转换 Drama 3 检查点,即保存训练结果的模型文件时,使用 Transformers 转换器。下面的模拟命令用于检查映射(名称与位置的对应方式)及张量(沿多个轴排列的数值数据)的形状。它不会读取权重(模型通过训练获得的数值),也不会创建输出目录;实际转换时需移除 --dry-run。

ct2-transformers-converter \
  --model /path/to/drama-3-official \
  --output_dir /path/to/drama-3-ct2 \
  --quantization float32 --dry-run

转换过程不会下载文件,因此需使用本地备好的检查点。在 Python 中也可以使用标准 CTranslate2 转换器接口。实际转换时,模型及波形重建所需的权重会在保存前载入内存。

3. 构建文本提示并调用合成

调用合成前,需要使用转换后模型的本地分词器,将文本转换为数值数组;分词器是将句子拆分为模型输入单元的工具。各文本片段需分别编码,以保留词元边界,第一列填入分词器 ID,其余音频码列填入 0。

该数组作为模型输入,生成结果可保存为单声道 PCM16 WAV 文件,这种音频格式以 16 位记录音量。开发者需将文本输入准备与语音文件保存这两部分接入应用程序。

4. GPU 加速部分模型运算,CPU 负责波形处理

在 CPU 上,合成过程与波形重建使用 32 位浮点运算,即以近似方式表示小数的数值运算。可直接使用压缩存储权重的默认 FP8 检查点,该格式以 8 位存储浮点数,无需另行准备以 8 位存储整数的 INT8 模型。运算会根据输入选用部分专家权重组,即按输入选择的模型内部计算组,但全部权重组仍驻留 RAM。

使用 NVIDIA 设备时可构建支持 CUDA 的版本,使用 AMD 设备时可构建支持 ROCm 的版本。GPU 负责模型核心及输出转换所用的运算,其余运算与最终波形重建由 CPU 完成。专家权重在首次使用时载入 GPU,并保留在缓存这一临时存放常用数据的空间中,因此选用的新权重组越多,GPU 显存占用就越大。

5. 本地执行的优势与实验阶段的支持范围

本地执行在合成时无需 PyTorch 或 Transformers 等大型框架,因而减少了执行环境的依赖。不过,仍需考量内存容量。例如,对 FP8 权重选择 INT8 执行时,转换后的张量会额外占用内存,因此最好同时确定存储格式与执行精度。

独立请求可以分配给多个执行副本,即分别运行的相同模型实例。每个副本一次生成一个序列,即按顺序排列的值,因此可通过将请求分配给多个副本来实现并发处理。

当前支持范围为离线合成与波形重建,不支持通过参考录音克隆声音,也不支持自动拆分长文本并进行流式处理。即使限制 GPU 专家缓存的大小,也不等于设定了 GPU 总显存占用的上限。

此次发布的实用价值在于,让开发者能够先用 CPU 开始本地语音合成,再按需为部分模型运算加入 GPU 加速。