Skip to content

在我的機器上做基準測試

本頁面用於 直接測量 HayaKoe 在您的硬體上有多快

如果已經 clone 了儲存庫,一條指令即可完成。

為什麼要自己測?

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/ 目錄下,並在瀏覽器中直接開啟。

需要 clone 儲存庫

dev-tools 不包含在 pip 套件中。

需要從 專案 GitHub clone 並安裝 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 可以不等待全部合成完畢,從第一句就開始發送(句子級串流傳輸)。