docs: simplify customer README and align runtime package
Browse filesPublish the customer-facing README and synchronized standard package from MOSS-TTS-Nano.AXERA_HUG.
README.md
CHANGED
|
@@ -8,197 +8,97 @@ tags:
|
|
| 8 |
license: apache-2.0
|
| 9 |
---
|
| 10 |
|
| 11 |
-
# MOSS-TTS-Nano.
|
| 12 |
|
| 13 |
-
AX650
|
| 14 |
-
|
| 15 |
-
C++ 源码或浮点 checkpoint。
|
| 16 |
|
| 17 |
-
源码
|
| 18 |
|
| 19 |
-
|
| 20 |
-
https://github.com/AXERA-TECH/Moss-TTS-Nano.AXERA
|
| 21 |
-
```
|
| 22 |
-
|
| 23 |
-
## 发布内容
|
| 24 |
-
|
| 25 |
-
```text
|
| 26 |
-
models/axmodels_650/
|
| 27 |
-
├── tts_prefill.axmodel
|
| 28 |
-
├── tts_decode_step.axmodel # 量化模型,诊断/低延迟实验用
|
| 29 |
-
├── tts_local_fixed_sampled_frame.axmodel
|
| 30 |
-
└── codec_decode.axmodel
|
| 31 |
-
|
| 32 |
-
models/onnxmodels/
|
| 33 |
-
├── moss_tts_decode_step.onnx # 默认质量路径:static320 FP32
|
| 34 |
-
├── moss_tts_decode_step.data
|
| 35 |
-
└── candidates/
|
| 36 |
-
├── default_512_fp32/ # 原始 512-KV FP32 备份
|
| 37 |
-
├── static320_fp32/ # 默认模型的来源副本
|
| 38 |
-
└── static320_int8_qdq/ # 可选速度候选,静态 KV=320
|
| 39 |
-
|
| 40 |
-
bin/moss_tts_ax650/
|
| 41 |
-
├── moss_tts_ax650
|
| 42 |
-
├── libonnxruntime.so.1.23.2
|
| 43 |
-
└── libonnxruntime_providers_shared.so
|
| 44 |
-
```
|
| 45 |
-
|
| 46 |
-
## 推荐质量路径
|
| 47 |
-
|
| 48 |
-
```text
|
| 49 |
-
tts_prefill.axmodel
|
| 50 |
-
→ tts_local_fixed_sampled_frame.axmodel
|
| 51 |
-
→ moss_tts_decode_step.onnx(ONNX Runtime CPU)
|
| 52 |
-
→ codec_decode.axmodel
|
| 53 |
-
```
|
| 54 |
-
|
| 55 |
-
这是当前默认的质量和速度平衡路径。它使用 static320 FP32 decode ONNX,板端多句测试中
|
| 56 |
-
与原始 512-KV FP32 路径生成的 Token 和 WAV 完全一致。稳态结果:
|
| 57 |
-
|
| 58 |
-
```text
|
| 59 |
-
Total RTF: 1.10–1.13
|
| 60 |
-
Generation RTF: 1.01–1.04
|
| 61 |
-
Decode: 69–70 ms/frame
|
| 62 |
-
```
|
| 63 |
-
|
| 64 |
-
以上数值来自板端空闲、关闭其他 NPU/CPU 服务后的多句稳态测试;单句冷启动或板端同时运行
|
| 65 |
-
`axllm serve` 等任务时,ONNX CPU decode 会受到资源争用影响,RTF 可能显著升高。模型加载
|
| 66 |
-
时间不计入 RTF,但首帧运行时初始化和系统负载仍会影响实测值。
|
| 67 |
-
|
| 68 |
-
模型加载时间不计入 RTF。默认 static320 路径要求:
|
| 69 |
|
| 70 |
-
|
| 71 |
-
实际 prefill 长度 + max_new_frames <= 320
|
| 72 |
-
```
|
| 73 |
-
|
| 74 |
-
当前脚本默认 `max_new_frames=110`、decode warmup 为 32 帧;长文本请按标点分段。全 AXModel 路径速度约 `RTF 0.44–0.48`,但长句存在提前停止
|
| 75 |
-
或尾部噪音风险,因此仅保留为诊断选项。
|
| 76 |
-
|
| 77 |
-
## 可选速度候选:static320 INT8 QDQ
|
| 78 |
-
|
| 79 |
-
`models/onnxmodels/candidates/static320_int8_qdq/` 是经过主机和板端测试的 ONNX Runtime
|
| 80 |
-
INT8 候选,只量化常量权重 Linear,注意力、LayerNorm、Softmax 和 KV 保持 FP32。它的静态
|
| 81 |
-
KV 容量为 320,必须满足:
|
| 82 |
-
|
| 83 |
-
```text
|
| 84 |
-
实际 prefill 长度 + max_new_frames <= 320
|
| 85 |
-
```
|
| 86 |
-
|
| 87 |
-
板端多句测试在一次模型已缓存、32 帧 decode warmup 的运行中得到:
|
| 88 |
-
|
| 89 |
-
```text
|
| 90 |
-
Total RTF:0.8462
|
| 91 |
-
Generation RTF:0.7547
|
| 92 |
-
```
|
| 93 |
-
|
| 94 |
-
这是最佳观测值,不是空闲/繁忙状态下都能保证的固定值;同一板端后台服务运行时曾测得
|
| 95 |
-
`RTF 1.8502`,并出现过 AXEngine 句柄资源不足。因此候选只作为实验速度路径,默认发布
|
| 96 |
-
路径仍保持 FP32 ONNX。它的 Token 流与默认 FP32 质量路径也不是逐 token 一致,使用前必须
|
| 97 |
-
在目标板端试听确认。示例:
|
| 98 |
-
|
| 99 |
-
```bash
|
| 100 |
-
bash run_ax650.sh \
|
| 101 |
-
--text "你好,今天是美好的一天。" \
|
| 102 |
-
--decode-backend onnx \
|
| 103 |
-
--decode-onnx models/onnxmodels/candidates/static320_int8_qdq/moss_tts_decode_step.onnx \
|
| 104 |
-
--max-new-frames 110 \
|
| 105 |
-
--decode-warmup-frames 32 \
|
| 106 |
-
--output-wav outputs/static320_int8_qdq.wav
|
| 107 |
-
```
|
| 108 |
|
| 109 |
-
|
| 110 |
-
回归对比。若需使用原始路径:
|
| 111 |
|
| 112 |
```bash
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
--decode-backend onnx \
|
| 116 |
-
--decode-onnx models/onnxmodels/candidates/default_512_fp32/moss_tts_decode_step.onnx \
|
| 117 |
-
--max-new-frames 128 \
|
| 118 |
-
--decode-warmup-frames 32 \
|
| 119 |
-
--output-wav outputs/default_512_fp32.wav
|
| 120 |
```
|
| 121 |
|
| 122 |
-
|
| 123 |
|
| 124 |
-
|
| 125 |
|
| 126 |
-
|
| 127 |
-
python3 -m pip install -r requirements.txt
|
| 128 |
-
python3 -c "import axengine, numpy, sentencepiece; print('Python runtime OK')"
|
| 129 |
-
```
|
| 130 |
-
|
| 131 |
-
运行 Python 参考链路:
|
| 132 |
|
| 133 |
```bash
|
| 134 |
python3 python/infer_moss_tts.py \
|
| 135 |
--config-dir config \
|
| 136 |
--axmodel-dir models/axmodels_650 \
|
| 137 |
--onnx-dir models/onnxmodels \
|
| 138 |
-
--text "
|
| 139 |
--voice Junhao \
|
| 140 |
--sample-mode fixed \
|
| 141 |
-
--local-fixed-backend axmodel \
|
| 142 |
--prefill-backend axmodel \
|
|
|
|
| 143 |
--decode-backend onnx \
|
| 144 |
-
--output-audio-path outputs/
|
| 145 |
```
|
| 146 |
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
```
|
| 150 |
-
python3 python/infer_moss_tts.py \
|
| 151 |
-
--config-dir config --axmodel-dir models/axmodels_650 \
|
| 152 |
-
--onnx-dir models/onnxmodels \
|
| 153 |
-
--text "你好,今天是美好的一天。" --voice Junhao \
|
| 154 |
-
--decode-backend axmodel \
|
| 155 |
-
--output-audio-path outputs/python_all_axmodel.wav
|
| 156 |
-
```
|
| 157 |
|
| 158 |
-
## C++ AX650 推理
|
| 159 |
|
| 160 |
-
|
| 161 |
-
脚本会自动设置 `LD_LIBRARY_PATH`:
|
| 162 |
|
| 163 |
```bash
|
| 164 |
bash run_ax650.sh \
|
| 165 |
-
--text "
|
| 166 |
--voice Junhao \
|
| 167 |
-
--
|
| 168 |
-
--output-
|
| 169 |
-
--output-log outputs/cpp_decode_onnx.log
|
| 170 |
```
|
| 171 |
|
| 172 |
-
|
| 173 |
|
| 174 |
-
```
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
```
|
| 180 |
|
| 181 |
-
|
| 182 |
|
| 183 |
-
```
|
| 184 |
-
|
| 185 |
-
./bin/moss_tts_ax650/moss_tts_ax650 --help
|
| 186 |
```
|
| 187 |
|
| 188 |
-
|
|
|
|
| 189 |
|
| 190 |
-
|
| 191 |
|
| 192 |
-
|
| 193 |
-
GCC:/data/shared/huyuan/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu
|
| 194 |
-
AX650 BSP:/data/shared/huyuan/toolchains/ax650n_bsp_sdk/msp/out
|
| 195 |
-
```
|
| 196 |
|
| 197 |
-
|
|
|
|
|
|
|
| 198 |
|
| 199 |
-
|
|
|
|
| 200 |
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 204 |
```
|
|
|
|
|
|
|
|
|
| 8 |
license: apache-2.0
|
| 9 |
---
|
| 10 |
|
| 11 |
+
# MOSS-TTS-Nano.AXERA
|
| 12 |
|
| 13 |
+
MOSS-TTS-Nano 的 AX650 板端推理包,包含量化 AXModel、默认质量路径 ONNX、Python 推理
|
| 14 |
+
脚本和已经编译好的 C++ 程序。
|
|
|
|
| 15 |
|
| 16 |
+
源码和模型转换工程:
|
| 17 |
|
| 18 |
+
<https://github.com/AXERA-TECH/Moss-TTS-Nano.AXERA>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
+
## 1. 安装 Python 依赖
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
+
板端需要匹配 AX650 的 `axengine/pyaxengine`,并安装:
|
|
|
|
| 23 |
|
| 24 |
```bash
|
| 25 |
+
python3 -m pip install -r requirements.txt
|
| 26 |
+
python3 -c "import axengine, numpy, sentencepiece; print('runtime OK')"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
```
|
| 28 |
|
| 29 |
+
如果只使用 C++ 程序,可以跳过 Python 依赖安装。
|
| 30 |
|
| 31 |
+
## 2. Python 推理
|
| 32 |
|
| 33 |
+
在本目录执行:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
```bash
|
| 36 |
python3 python/infer_moss_tts.py \
|
| 37 |
--config-dir config \
|
| 38 |
--axmodel-dir models/axmodels_650 \
|
| 39 |
--onnx-dir models/onnxmodels \
|
| 40 |
+
--text "你好,今天是美好的一天。" \
|
| 41 |
--voice Junhao \
|
| 42 |
--sample-mode fixed \
|
|
|
|
| 43 |
--prefill-backend axmodel \
|
| 44 |
+
--local-fixed-backend axmodel \
|
| 45 |
--decode-backend onnx \
|
| 46 |
+
--output-audio-path outputs/python.wav
|
| 47 |
```
|
| 48 |
|
| 49 |
+
支持内置音色,例如 `Junhao`、`Zhiming`、`Weiguo`、`Xiaoyu`、`Yuewen`、`Lingyu`、
|
| 50 |
+
`Ava`、`Bella`、`Adam`、`Nathan`、`Soyo`、`Saki`、`Mortis`、`Umiri`、`Mei`、`Anon`、
|
| 51 |
+
`Arisa` 和 `Trump`。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
|
| 53 |
+
## 3. C++ AX650 推理(推荐)
|
| 54 |
|
| 55 |
+
程序已经编译好,不需要在板端编译:
|
|
|
|
| 56 |
|
| 57 |
```bash
|
| 58 |
bash run_ax650.sh \
|
| 59 |
+
--text "你好,今天是美好的一天。" \
|
| 60 |
--voice Junhao \
|
| 61 |
+
--output-wav outputs/moss_tts.wav \
|
| 62 |
+
--output-log outputs/moss_tts.log
|
|
|
|
| 63 |
```
|
| 64 |
|
| 65 |
+
脚本默认使用以下链路:
|
| 66 |
|
| 67 |
+
```text
|
| 68 |
+
tts_prefill.axmodel
|
| 69 |
+
→ tts_local_fixed_sampled_frame.axmodel
|
| 70 |
+
→ models/onnxmodels/moss_tts_decode_step.onnx(static320 FP32,CPU)
|
| 71 |
+
→ codec_decode.axmodel
|
| 72 |
```
|
| 73 |
|
| 74 |
+
默认参数为 `max_new_frames=110`、decode warmup 32 帧。static320 模型要求:
|
| 75 |
|
| 76 |
+
```text
|
| 77 |
+
实际 prefill 长度 + max_new_frames <= 320
|
|
|
|
| 78 |
```
|
| 79 |
|
| 80 |
+
长文本请按标点分段或降低 `--max-new-frames`。默认质量路径已在多句测试中与原始 512-KV
|
| 81 |
+
FP32 路径产生一致的 Token/WAV,稳态 RTF 约 `1.10–1.13`。
|
| 82 |
|
| 83 |
+
程序加载时间不计入 RTF。板端同时运行其他 NPU/CPU 任务时,RTF 会升高。
|
| 84 |
|
| 85 |
+
## 4. 可选模型
|
|
|
|
|
|
|
|
|
|
| 86 |
|
| 87 |
+
`models/onnxmodels/candidates/static320_int8_qdq/` 是速度实验模型,最佳观测 RTF 约
|
| 88 |
+
`0.85`,但 Token 可能与默认 FP32 路径不同,使用前请先试听。原始 512-KV FP32 模型位于
|
| 89 |
+
`models/onnxmodels/candidates/default_512_fp32/`,仅用于回归对比。
|
| 90 |
|
| 91 |
+
全 AXModel 的 `tts_decode_step.axmodel` 仅用于诊断;长句可能提前停止或出现尾部噪音,
|
| 92 |
+
默认不推荐。
|
| 93 |
|
| 94 |
+
## 5. 文件说明
|
| 95 |
+
|
| 96 |
+
```text
|
| 97 |
+
models/axmodels_650/ AX650 量化模型
|
| 98 |
+
models/onnxmodels/ 默认 static320 FP32 decode ONNX 和候选模型
|
| 99 |
+
bin/moss_tts_ax650/ C++ 可执行文件和 ONNX Runtime 库
|
| 100 |
+
config/ tokenizer 和推理元数据
|
| 101 |
+
python/ Python 推理入口
|
| 102 |
```
|
| 103 |
+
|
| 104 |
+
`config.json` 按发布规范保留,内容为空对象 `{}`。
|