在我的机器上做基准测试
本页面用于 直接测量 HayaKoe 在您的硬件上有多快。
如果已经克隆了仓库,一条命令即可完成。
为什么要自己测?
TTS 推理速度很大程度上取决于 CPU 代次、内存带宽、ONNX Runtime 版本和后台负载。
文档中的数据仅供参考,直接在自己的 PC 上运行测量要准确得多。
测量一次数值后,在决定如何使用时也会很有帮助。
术语 — 倍速
HayaKoe 使用 倍速 (speed factor) 作为性能指标。
倍速 = 生成的音频时长(秒) / 推理耗时(秒)达到 1.0x 以上时可以感受到准实时。
当然越快越好。
例如,想象一下生成 10 秒的音频。
1.0x— 需要等待整整 10 秒5.0x— 2 秒即可10.0x— 1 秒即可
运行基准测试
使用仓库中 dev-tools 的基准测试 CLI。
uv run poe cli benchmark运行后在交互式菜单中可以选择 CPU (ONNX)、GPU (torch.compile) 或 CPU + GPU。
预热 2 次 + 测量 5 次,自动对短·中·长三种长度的文本进行测试,并将结果整理成表格。
测量完成后同样的内容会以 HTML 报告的形式保存在 benchmarks/ 目录下,并在浏览器中直接打开。
解读结果
同时运行 CPU + GPU 时,终端输出大致如下。
数字因机器而异(以下为锐龙 3950X / RTX 3080 组合下,在运行其他任务时顺便测量的值)。
倍速 = 音频时长 / 推理耗时 (越高越快)
例: 10.0x → 1 秒的语音仅需 0.1 秒生成
基准测试结果
┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━┓
┃ 后端 ┃ 文本 ┃ 推理耗时 ┃ 音频时长 ┃ 倍速 ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━┩
│ ONNX (CPU) │ 短 │ 0.393s │ 0.8s │ 2.1x │
│ ONNX (CPU) │ 中 │ 1.297s │ 4.1s │ 3.2x │
│ ONNX (CPU) │ 长 │ 3.318s │ 11.0s │ 3.3x │
│ torch.compile (CUDA) │ 短 │ 0.182s │ 0.9s │ 4.7x │
│ torch.compile (CUDA) │ 中 │ 0.547s │ 4.9s │ 8.9x │
│ torch.compile (CUDA) │ 长 │ 0.747s │ 12.4s │ 16.6x │
└──────────────────────┴────────┴───────────┴─────────────┴───────┘
基准测试完成!
benchmarks/benchmark_20260414_211131.html
? 是否在浏览器中打开? Yes单句越长倍速越高
每次模型调用都有固定开销,句子越长这些开销就分摊得越好。
但是 HayaKoe 内部会按句子拆分处理,因此句子多并不一定更快。
必须排除预热
首次调用中混入了 ONNX 会话初始化或(GPU 的话)torch.compile 图编译时间。
CLI 设置 WARMUP = 2 丢弃前两次就是这个原因。
在没有其他进程时测量
关闭浏览器·构建·后台下载后测量,数值会更稳定。
多次运行确认方差
尝试运行同一基准测试 2~3 次。
如果倍速在几个百分点以内复现,该值就更可信。
偏差较大时可能有其他程序在占用资源。
Raspberry Pi 4B 实测
HayaKoe 在 arm64 环境下同样可以运行。参考 Raspberry Pi 4B 上运行相同基准测试的结果如下。
- Linux 6.8 · aarch64 · Python 3.10 · ONNX Runtime 1.23.2
| 文本 | 推理耗时 | 音频时长 | 倍速 |
|---|---|---|---|
| 短 | 3.169s | 0.8s | 0.3x |
| 中 | 13.042s | 4.1s | 0.3x |
| 长 | 35.119s | 10.8s | 0.3x |
用于对话式 UI 的实时场景略显吃力(0.3x,约慢 3 倍),但离线批量合成或个人项目可以直接使用。
首次运行模型下载可能较慢(约 10 分钟)
在像树莓派这样 SD 卡 I/O 和网络较慢的环境中,从 HuggingFace 下载 BERT · Synthesizer · 风格向量权重可能需要 约 10 分钟。
下载一次后会缓存到 hayakoe_cache/,之后运行可以立即启动。
日志中出现的 ORT / HF 警告可以忽略
运行中可能会混杂以下两个警告。两者都不影响 CPU 推理的行为和结果,直接继续即可。
Warning: You are sending unauthenticated requests to the HF Hub. ...
[W:onnxruntime:Default, device_discovery.cc:...] GPU device discovery failed: ...- HF 匿名请求警告 — 提示正在无 token 向 HuggingFace 发送请求。仅影响下载速度和速率限制。设置
HF_TOKEN环境变量后消失。 - ORT GPU 探测失败警告 — ONNX Runtime 在扫描系统是否有 GPU 时失败。在像树莓派这样没有 GPU 的环境中属于正常行为,对 CPU 推理没有任何影响。
倍速在 1.0x 附近时
如果 CPU 测量的倍速接近 1.0x,在实际服务中实时使用会比较吃力。
有几个选择。
- 切换到 GPU — 最确定的解决方案。
- 句子级流式传输 — 对话式 UI 可以不等待全部合成完毕,从第一句就开始发送(句子级流式传输)。
