# MOSS-TTS-Nano 教程 02:CLI 与 Web Demo 实战

这篇教程聚焦两个最常用入口:

  • generate
  • serve

同时也会整理一套更实用的排坑经验,尤其是:

  • GPU 没生效怎么办
  • Web Demo 实时流式为什么会断断续续
  • 哪些参数值得调,哪些参数收益很低

1. 先把 CLI 跑起来

如果你已经在仓库根目录,最稳的方式不是直接赌 moss-tts-nano 命令在不在 PATH 里,而是用模块方式启动。

bash 复制代码
python -m moss_tts_nano generate ^
  --prompt-speech assets/audio/zh_1.wav ^
  --text "你好,这是一次测试。"

这样做的好处是:

  • 不依赖系统 PATH
  • 更容易确认当前到底用的是哪个 Python 环境

2. generate 的常见用法

2.1 最小用法

bash 复制代码
python -m moss_tts_nano generate ^
  --prompt-speech assets/audio/zh_1.wav ^
  --text "你好,这是一次测试。"

它做的事情很简单:

  • 使用参考音频做语音克隆
  • 把文本合成为语音
  • 输出到默认 wav 文件

2.2 指定 GPU

如果你想走 CUDA:

bash 复制代码
python -m moss_tts_nano generate ^
  --device cuda ^
  --dtype float16 ^
  --prompt-speech assets/audio/zh_1.wav ^
  --text "你好,这是一次 GPU 推理测试。"

这一步非常适合验证:

  • 你的 GPU 环境是不是通的
  • 当前 torch 是不是 CUDA 版

2.3 长文本相关参数

常见参数:

  • --voice-clone-max-text-tokens
  • --max-new-frames

其中:

  • voice-clone-max-text-tokens 越小,越容易分块
  • voice-clone-max-text-tokens 越大,单次处理文本越长

如果是长文本,建议理解成:

这是控制语音克隆场景下文本分块强度的参数

3. serve 的本质

serve 不是新的模型能力,而是把已有推理能力包装成:

  • 本地网页
  • HTTP 接口

典型命令:

bash 复制代码
python -m moss_tts_nano serve

如果你要显式走 GPU:

bash 复制代码
python -m moss_tts_nano serve --device cuda --dtype float16

启动后默认访问:

4. Web Demo 里几个最关键的参数

4.1 Execution Device

这个参数决定请求走哪个执行设备:

  • auto
  • cpu
  • cuda

如果你已经确认 GPU 环境没问题,建议优先用:

  • cuda

4.2 Realtime Streaming Decode

这个选项决定你是不是要边生成边播。

关闭时:

  • 更像"先生成完整音频,再播放"
  • 听感通常更稳定

开启时:

  • 更像"实时生成、实时播放"
  • 延迟更低
  • 但也更容易出现轻微不连续

4.3 Initial Playback Delay

这个参数非常关键。

它本质上是在告诉浏览器:

"先攒一点音频再播,还是尽快开始播。"

如果太小:

  • 首音更快
  • 但更容易断粮

如果太大:

  • 更稳定
  • 但首音更慢

在一台 RTX 2060 Max-Q 6GBRyzen 7 4800H32GB RAM 的笔记本上,实际调试结果是:

  • 0.08 太激进
  • 0.30 明显比 0.08
  • 0.500.30 更好
  • 再往上到 0.70 / 0.80 收益不明显

所以一个更稳的经验值是:

  • Initial Playback Delay = 0.50

4.4 Max TTS Batch Size / Max Codec Batch Size

这两个参数影响的是实时流式中每次处理音频块的粒度。

调试中一组更优的参数是:

  • Max TTS Batch Size = 8
  • Max Codec Batch Size = 4

它比默认值更有助于提升连续性,但也不能彻底解决实时流式里那一点点不连续。

5. GPU 没生效时怎么判断

先不要看显存占用,先看事实。

执行:

bash 复制代码
python -c "import torch; print('torch=', torch.__version__); print('cuda_available=', torch.cuda.is_available()); print('torch_cuda=', torch.version.cuda)"

如果输出类似:

bash 复制代码
torch= 2.7.0+cpu
cuda_available= False
torch_cuda= None

说明你当前装的是 CPU 版 PyTorch,不可能真正走 GPU。

6. 一个非常典型的坑:环境串了

这类项目很容易出现这样的问题:

  • 你以为自己在 conda 环境里
  • 实际运行时却调到了系统 Python
  • 然后出现各种奇怪报错

最常见的现象包括:

  • typing_extensions 缺失
  • tn 模块缺失
  • 明明安装过包却提示找不到

解决方式很朴素:

bash 复制代码
python -c "import sys; print(sys.executable)"

看当前到底是哪个 Python。

如果你想彻底避免串环境,可以直接:

bash 复制代码
conda run -n moss-tts-nano python -m moss_tts_nano serve --device cuda --dtype float16 --port 18084

7. No module named 'tn' 是怎么来的

如果你在 Web Demo 里看到:

text 复制代码
RuntimeError: No module named 'tn'

这通常不是模型本身的问题,而是文本归一化依赖没有装完整。

它经常发生在:

  • 错误的 Python 环境
  • WeTextProcessing 没装完整
  • tn 相关依赖不在当前环境里

短期绕开方法:

  • 在页面里关闭 Enable WeTextProcessing

长期正确做法:

  • 使用干净环境
  • 正确安装 pynini
  • 正确安装 WeTextProcessing

8. 实时流式为什么很难完全丝滑

这是这次调试里最重要的认识之一。

实时模式不是单纯"模型生成快不快"的问题,它至少包含这些环节:

  1. 文本归一化
  2. 文本分块
  3. 模型流式推理
  4. codec 流式解码
  5. 服务端传输
  6. 浏览器播放调度

只要其中任意一环有轻微抖动,最终就会表现成:

  • 偶尔一小下不连续

这也是为什么:

  • 调大显存占用不一定能解决
  • 单纯增大 Initial Playback Delay 到某个点后收益就很有限

9. 实测后更稳的一组参数

基于这次真实调试,一个更稳的参考组合是:

text 复制代码
Execution Device = cuda
Realtime Streaming Decode = 开
Initial Playback Delay = 0.50
Voice Clone Max Text Tokens = 120
Max TTS Batch Size = 8
Max Codec Batch Size = 4

注意,这组参数的含义是:

  • 在当前机器上更平衡
  • 并不是说一定绝对最优
  • 也不代表实时流式会完全没有轻微断续

10. 实用建议

如果你的目标是:

做演示

可以用实时模式,强调"边生成边播"的体验。

真正听结果

优先关闭实时流式,听最终一次性生成结果,通常更稳定。

继续调优

不要一直盯着显存数字,而要看:

  • 首音速度
  • 听感连续性
  • 是否新增副作用

小结

serve 好用,但实时流式更像"工程平衡题",不是单个参数越大越好。

相关推荐
卖酸奶的不错2 小时前
FlowPrompt Studio v3.1
大数据·人工智能
牛奶还是纯的好2 小时前
从“塞文本进 Prompt“到“结构化记忆“:Agent 记忆的正确姿势
人工智能·ai·agents
Bat U2 小时前
JavaEE|多线程(三)
java·前端·java-ee
m0_743106462 小时前
【浙大&南洋理工最新综述】Feed-Forward 3D Scene Modeling(五)
人工智能·算法·计算机视觉·3d·几何学
智象科技2 小时前
AI重构IT运维:从被动救火到智能自治,这场革命已不可逆!
大数据·运维·人工智能·ai·重构·一体化运维
badfl3 小时前
OpenAI最新模型gpt-image-2:介绍、API价格、使用教程全汇总
人工智能·gpt·ai
亿电连接器替代品网4 小时前
Bulgin连接器在自动化与能源系统中的应用及国产替代策略
大数据·网络·人工智能·经验分享·物联网·硬件工程·材料工程
Tutankaaa10 小时前
从被动接受到主动挑战:知识竞赛如何重塑学习价值
人工智能·经验分享·笔记·学习
Jmayday11 小时前
机器学习基本理论
人工智能·机器学习