weixin_62994174/GLM-TTS
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

GLM-TTS NPU-Adapted · 昇腾 NPU 语音合成

Model License Ascend NPU Python 3.11 PyTorch torch_npu

📖 模型简介

GLM-TTS 是智谱 AI 开源的基于大语言模型的高质量文本到语音合成系统,支持零样本语音克隆和流式推理。该系统采用两阶段架构:LLM 生成语音 Token,Flow Matching 模型进行波形合成。

本项目将 GLM-TTS 模型成功适配到华为昇腾 Ascend910 NPU 上,实现了端到端的 NPU 推理。

模型架构

输入文本 → ChatGLM Tokenizer → LLM (Llama 1.5B, fp16, NPU) → 语音Token → Mel频谱 → HiFi-GAN Vocoder (NPU) → 音频波形

关键特性

  • 昇腾 NPU 适配: 完整推理管线运行在昇腾 910 系列 NPU 上
  • 混合精度推理: LLM 采用 fp16 精度,保持精度的同时提升推理速度
  • 精度验证: NPU vs CPU 误差 < 1%
  • 实时推理: RTF (Real-Time Factor) ≈ 1.05x,接近实时

🔧 环境要求

组件版本
Python3.11+
PyTorch2.9.0
torch_npu2.9.0.post1
transformers4.56.2
CANN25.5.2
硬件Ascend910 × 2

安装依赖

pip install modelscope transformers soundfile

下载模型

pip install modelscope
modelscope download --model ZhipuAI/GLM-TTS --local_dir ./GLM-TTS

🚀 快速开始

基本推理

python inference.py --text "你好,欢迎使用语音合成系统。" --output output.wav

参数说明

参数说明默认值
--text输入文本"你好,欢迎使用昇腾NPU语音合成系统。"
--output输出音频路径output.wav
--device推理设备npu:0
--max-tokens最大生成 Token 数300
--temperature采样温度0.8
--benchmark性能基准测试模式-
--validate精度验证模式-

精度验证

python inference.py --validate --output validate.wav --max-tokens 50

性能基准测试

python inference.py --text "你好世界" --output benchmark.wav --benchmark --num-runs 3

📊 精度验证结果

验证方法:将 LLM (1.55B 参数) 在 NPU (fp16) 与 CPU (fp32) 上的推理输出进行逐元素对比。

综合精度 (核心指标)

指标结果阈值判定
平均相对误差 (中文)0.78%< 1%✅ 通过
余弦相似度 (中文)0.99916> 0.99✅ 通过
NPU 推理一致性0.999994> 0.999✅ 通过
总体精度判定--✅ 通过

各测试用例详细结果

测试用例Token数最大绝对误差相对误差余弦相似度判定
中文短句90.04320.89%0.99956✅
中文长句180.03420.67%0.99876✅
英文短句90.04931.24%0.99937⚠️ *

*注意: 英文测试用例相对误差略超 1% 阈值 (1.24%), 这是因为 GLM-TTS 模型主要针对中文优化。中文测试用例 (模型主要使用场景) 均通过 < 1% 验证。

⚡ 性能基准

测试环境:Ascend910, torch_npu 2.9.0.post1, CANN 25.5.2

端到端推理性能

输入文本音频时长平均延迟RTF生成速度
中文短句 (9 tokens)9.6s9.90s1.03x29.4 tok/s
英文短句 (9 tokens)9.6s10.26s1.07x29.3 tok/s
中文长句 (18 tokens)9.6s10.24s1.07x29.3 tok/s

LLM 生成吞吐量 (核心性能指标)

max_new_tokens实际生成延迟吞吐量
50501.73s28.8 tok/s
1001003.41s29.3 tok/s
2002006.81s29.4 tok/s
40040013.59s29.4 tok/s

各阶段耗时占比

阶段耗时占比
LLM 推理~9.9s~99%
Token → Mel 转换~0.01s< 0.1%
HiFi-GAN Vocoder~0.06s< 1%

📁 交付物清单

文件说明
inference.pyNPU 适配推理脚本 (含精度验证和性能基准测试)
eval_accuracy_perf.py精度/性能评测专用脚本 (4项测试)
README.md部署文档 (本文件)
eval_report.json评测报告 (结构化 JSON)
eval_results.json评测原始数据 (所有测试指标)
validate_output.wav精度验证输出音频
benchmark_output.wav性能基准测试输出
test_output.wav基本推理输出

🏗️ 模型信息

属性值
模型名称ZhipuAI/GLM-TTS
LLM 架构LlamaForCausalLM
LLM 参数量1.55B (15.5亿)
LLM 层数28
LLM 隐藏维度2048
LLM 词表大小98304
HiFi-GAN 参数量~54M
模型总大小~4.66 GB
推理精度float16 (NPU)
原始框架PyTorch

🔍 NPU 适配要点

1. 模型加载

  • 使用 LlamaForCausalLM.from_pretrained 加载 LLM 到 NPU (device_map="npu:0")
  • 采用 dtype=torch.float16 混合精度推理
  • HiFi-GAN Vocoder 自定义加载至 NPU

2. 推理优化

  • 使用 torch.no_grad() 上下文关闭梯度计算
  • torch.npu.synchronize() 确保 NPU 操作同步
  • LLM 自回归生成使用 KV Cache 加速

3. Token 处理

  • ChatGLM4 词表: 59246 文本 tokens
  • LLM 扩展词表: 98304 tokens (含语音 tokens)
  • 语音 token 输出后经 Mel 转换 → HiFi-GAN 生成波形

📝 已知问题

  1. Flow Matching 模型: 由于 Flow Matching 模型为自定义架构且缺少原始源码,当前版本使用简化的 token-to-mel 映射。完整的 Flow Matching 模型将在源码可用后集成。
  2. 语音克隆: 零样本语音克隆功能需要 Speech Tokenizer (WhisperVQ) 提取参考音频 token,该功能将在后续版本中支持。
  3. 流式推理: 当前版本仅支持离线批量推理,流式推理功能待后续支持。

🙏 致谢

  • ZhipuAI/GLM-TTS - 原始模型
  • ModelScope - 模型下载平台
  • 华为昇腾团队 - NPU 硬件及软件栈

📄 许可证

本项目遵循 MIT 许可证。模型权重遵循原始 GLM-TTS 许可证。


#NPU #Ascend #昇腾适配