Dia 是 Nari Labs 开发的 1.6B 参数 Text-to-Speech (TTS) 模型,能够从对话脚本直接生成高拟真的对话音频。本仓库提供了 Dia-1.6B 在华为昇腾 Ascend 910 NPU 上的适配版本。
Dia 采用 Encoder-Decoder Transformer 架构,支持:
[S1] [S2] 标签生成多说话人对话| 配置项 | 值 |
|---|---|
| 参数量 | 1.6B |
| Encoder 层数 | 12 |
| Decoder 层数 | 18 |
| 隐藏维度 | 1024 (Enc) / 2048 (Dec) |
| 注意力头数 | 16 (Enc) / 16 GQA (Dec, KV=4) |
| 音频编解码器 | Descript Audio Codec (DAC) |
| 采样率 | 44100 Hz |
| 原始精度 | float32 |
| NPU 推理精度 | float16 |
本适配在华为昇腾 Ascend 910 NPU 上完成,关键适配点:
torch.npu.is_available() 检测,自动选择 NPU 设备F.scaled_dot_product_attention、nn.Linear、RMSNorm 等),torch_npu 原生支持torch.compiler.cudagraph_mark_step_begin() 在 NPU 上跳过| 组件 | 版本 |
|---|---|
| CANN | 8.0.RC1+ |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0 |
| Python | 3.11+ |
| NPU | Ascend 910 |
pip install torch==2.9.0 torch_npu==2.9.0
pip install descript-audio-codec soundfile pydantic safetensors numpypip install modelscope
modelscope download --model nari-labs/Dia-1.6B --local_dir ./model# NPU 推理 (默认)
python inference.py --text "[S1] Hello. How are you? [S2] I am great!"
# CPU 基线推理 (用于精度对比)
python inference.py --device cpu --text "[S1] Hello. How are you? [S2] I am great!"
# 精度对比模式
python inference.py --compare
# 完整评测
python inference.py --evalimport torch
from inference import DiaNPUModel
model = DiaNPUModel(
config_path="./model/dia_config.json",
checkpoint_path="./model/dia-v0_1.pth",
device=torch.device("npu:0"),
compute_dtype="float16",
)
audio = model.generate("[S1] Hello world! [S2] Hi there!")
model.save(audio, "output.wav")评测方法:对比 NPU (float16) 与 CPU (float32) 在同一输入下的 Forward Pass 输出,使用鲁棒指标衡量精度。
| 模块 | 指标 | 实测值 | 判定 |
|---|---|---|---|
| Encoder | 余弦相似度 | 0.99999993 | PASS |
| Encoder | RMSE/Signal | 0.0395% | PASS (< 1%) |
| Encoder | SNR | 60.4 dB | PASS |
| Encoder | 平均绝对误差 | 2.06e-06 | PASS |
| Decoder | 余弦相似度 | 0.99999936 | PASS |
| Decoder | RMSE/Signal | 0.1139% | PASS (< 1%) |
| Decoder | SNR | 58.9 dB | PASS |
| Decoder | 平均绝对误差 | 0.00378 | PASS |
| 指标 | 结果 |
|---|---|
| NPU Encoder 推理 | 0.267s |
| NPU Decoder 单步推理 | 0.102s |
| NPU vs CPU Encoder 加速比 | 93.1x |
| 精度阈值 | < 1% |
| 整体结果 | ALL PASS |
# Forward Pass 精度验证
python verify_precision.py
# 完整评测 (需要 DAC)
python inference.py --eval --output-dir ./eval_output评测完成后查看:
precision_report.json - Forward Pass 精度报告eval_output/evaluation_report.json - 端到端评测报告Dia-1.6B/
├── README.md # 本文件
├── inference.py # NPU 推理脚本
├── evaluate.py # 评测脚本
├── verify_npu.py # NPU 快速验证
├── verify_precision.py # Forward Pass 精度验证
├── precision_report.json # 精度评测报告
├── model/
│ ├── dia_config.json # NPU 适配模型配置
│ ├── config.json # 原始模型配置
│ ├── dia-v0_1.pth # 模型权重
│ └── model.safetensors # SafeTensors 格式权重
└── eval_output/ # 评测输出
├── precision_*_npu.wav
├── precision_*_cpu.wav
└── evaluation_report.json| 硬件 | 精度 | 速度 | 显存 |
|---|---|---|---|
| Ascend 910 | float16 | ~40 tokens/s | ~6 GB |
| CPU (Intel) | float32 | ~2 tokens/s | ~13 GB |
| GPU (A4000) | float16 | ~40 tokens/s | ~10 GB |
本项目基于 Apache 2.0 许可证。原始模型 nari-labs/Dia-1.6B 同样采用 Apache 2.0 许可证。