Skip to content

後端選擇 (CPU vs GPU)

HayaKoe 支援 CPU (ONNX Runtime) 和 GPU (PyTorch) 兩種後端。

在程式碼層面只是 device 參數的區別。

python
tts_cpu = TTS(device="cpu").load("tsukuyomi").prepare()
tts_gpu = TTS(device="cuda").load("tsukuyomi").prepare()

從安裝設定就開始不同 — CPU 只需 pip install hayakoe,GPU 還需要 hayakoe[gpu] + PyTorch CUDA 建置。

在同一環境中同時安裝兩者執行也是可能的,但實際部署中通常根據目標環境 只安裝一個(詳見 安裝 — CPU vs GPU)。

底層結構也完全不同。

以下整理幫助您判斷哪種適合自己的部署環境。

CPU (ONNX) 適用的場景

  • 沒有 GPU 的伺服器環境 — 在一般 Web 託管、VPS、託管容器平台等沒有 CUDA 支援的環境中直接執行。
  • 需要最小化映像檔大小的場景 — PyTorch + CUDA 堆疊在數 GB 級別,而僅包含 ONNX Runtime 的映像檔可縮減至數百 MB。
  • 低並發請求的工作負載 — 個人專案或內部工具等並發負載不大的情況下,僅 CPU 也能確保足夠的處理量。
  • 需要短冷啟動時間時 — ONNX 路徑行程啟動後 prepare() 立即完成,可以馬上開始合成。GPU 路徑的預設值同樣很快,但如果開啟 compile=True,首次 prepare() 需要承受約 80 秒的 BERT 編譯時間,在自動擴縮·無伺服器環境中體感差異很大。
CPU 路徑構成
  • BERTbert_q8.onnx (Q8 量化 DeBERTa), ONNX Runtime CPUExecutionProvider
  • Synthesizersynthesizer.onnx (匯出為 ONNX 的 VITS 解碼器)
  • Duration Predictorduration_predictor.onnx

GPU (PyTorch) 適用的場景

  • 要求低延遲的即時服務 — 面向使用者的回應、對話式 UI 等單請求回應時間直接影響體驗品質的場景。
  • 需要高並發處理量的環境 — 一塊 GPU 上可以並行合成多個說話人,比 CPU 的並發請求容納能力大得多。
  • 已有 GPU 基礎設施的環境 — 無需額外投資即可利用現有資源,以相同成本獲得更好的延遲和處理量。
  • 長期執行的伺服器工作負載 — 透過 prepare(compile=True) 對 BERT 套用 torch.compile,以約 80 秒的預熱為代價,steady-state 合成速度每句提升約 20%。
GPU 路徑構成
  • BERT — FP32 DeBERTa 載入到 GPU VRAM 中計算嵌入。因未量化,精度比 CPU ONNX 路徑略高。是 prepare(compile=True) 時唯一套用 torch.compile 的組件。
  • Synthesizer — PyTorch VITS 解碼器 (eager 執行)。
  • Duration Predictor — 與 Synthesizer 相同的 PyTorch 路徑 (eager 執行)。

縮短 GPU 後端冷啟動

GPU 後端的首次 prepare() 可能因交織模型下載而耗時較久,開啟 compile=True 時還會再加上約 80 秒的 BERT 編譯時間。

在實際服務中建議透過以下兩種方式提前支付此成本。

  • Docker 建置時 pre_download() — 在建置階段將權重烘焙到映像檔中,執行時 prepare() 無需 HF · S3 存取直接從快取載入。映像檔啟動後立即無網路延遲地進行初始化。(→ Docker 映像檔)
  • prepare(warmup=True, compile=True) — 在 prepare 時預先執行虛擬推論,將 BERT 編譯和 cuDNN 初始化提前到 prepare 階段。prepare 本身更久但 第一個實際請求不承擔 warmup 成本。(→ FastAPI 整合)

並排對比

項目CPU (ONNX)GPU (PyTorch)
安裝pip install hayakoepip install hayakoe[gpu]
映像檔大小數百 MB數 GB
冷啟動快 (秒級)快 (秒級) — compile=True 時約 80 秒
單請求延遲一般最低
並發處理量受核心數限制1 塊 GPU 上並行
記憶體 (載入 1 個說話人)≈ 1.7 GB RAM≈ 1.3 GB RAM + 1.8 GB VRAM
記憶體 (每說話人增加)+300~400 MB RAM+250~300 MB VRAM
所需硬體任何 CPUNVIDIA GPU + CUDA

具體數值請看基準測試

倍速·記憶體·延遲數值高度依賴硬體。