Skip to content

在我的机器上做基准测试

本页面用于 直接测量 HayaKoe 在您的硬件上有多快

如果已经克隆了仓库,一条命令即可完成。

为什么要自己测?

TTS 推理速度很大程度上取决于 CPU 代次、内存带宽、ONNX Runtime 版本和后台负载。

文档中的数据仅供参考,直接在自己的 PC 上运行测量要准确得多。

测量一次数值后,在决定如何使用时也会很有帮助。

术语 — 倍速

HayaKoe 使用 倍速 (speed factor) 作为性能指标。

text
倍速 = 生成的音频时长(秒) / 推理耗时(秒)

达到 1.0x 以上时可以感受到准实时。

当然越快越好。

例如,想象一下生成 10 秒的音频。

  • 1.0x — 需要等待整整 10 秒
  • 5.0x — 2 秒即可
  • 10.0x — 1 秒即可

运行基准测试

使用仓库中 dev-tools 的基准测试 CLI。

bash
uv run poe cli benchmark

运行后在交互式菜单中可以选择 CPU (ONNX)GPU (torch.compile)CPU + GPU

预热 2 次 + 测量 5 次,自动对短·中·长三种长度的文本进行测试,并将结果整理成表格。

测量完成后同样的内容会以 HTML 报告的形式保存在 benchmarks/ 目录下,并在浏览器中直接打开。

需要克隆仓库

dev-tools 不包含在 pip 包中。

需要从 项目 GitHub 克隆并安装 dev 依赖。

解读结果

同时运行 CPU + GPU 时,终端输出大致如下。

数字因机器而异(以下为锐龙 3950X / RTX 3080 组合下,在运行其他任务时顺便测量的值)。

text
  倍速 = 音频时长 / 推理耗时 (越高越快)
  例: 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.169s0.8s0.3x
13.042s4.1s0.3x
35.119s10.8s0.3x

用于对话式 UI 的实时场景略显吃力(0.3x,约慢 3 倍),但离线批量合成或个人项目可以直接使用。

首次运行模型下载可能较慢(约 10 分钟)

在像树莓派这样 SD 卡 I/O 和网络较慢的环境中,从 HuggingFace 下载 BERT · Synthesizer · 风格向量权重可能需要 约 10 分钟

下载一次后会缓存到 hayakoe_cache/,之后运行可以立即启动。

日志中出现的 ORT / HF 警告可以忽略

运行中可能会混杂以下两个警告。两者都不影响 CPU 推理的行为和结果,直接继续即可。

text
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 可以不等待全部合成完毕,从第一句就开始发送(句子级流式传输)。