Skip to content

後端選擇 (CPU vs GPU)

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

在程式碼層面只是 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 路徑沒有 torch.compile 編譯步驟,行程啟動後 prepare() 立即完成,可以馬上開始合成。GPU 路徑的首次 prepare() 需要承受數十秒的圖編譯時間,在自動擴縮·無伺服器環境中體感差異很大。
CPU 路徑構成
  • BERTbert_q8.onnx (Q8 量化 DeBERTa), ONNX Runtime CPUExecutionProvider
  • Synthesizersynthesizer.onnx (匯出為 ONNX 的 VITS 解碼器)
  • Duration Predictorduration_predictor.onnx

GPU (PyTorch) 適用的場景

  • 要求低延遲的即時服務 — 面向使用者的回應、對話式 UI 等單請求回應時間直接影響體驗品質的場景。
  • 需要高並發處理量的環境 — 一塊 GPU 上可以並行合成多個說話人,比 CPU 的並發請求容納能力大得多。
  • 已有 GPU 基礎設施的環境 — 無需額外投資即可利用現有資源,以相同成本獲得更好的延遲和處理量。
  • 反覆合成長句子的工作負載torch.compile 的圖最佳化收益隨合成長度成比例增長。
GPU 路徑構成
  • BERT — FP32 DeBERTa 載入到 GPU VRAM 中計算嵌入。因未量化,精度比 CPU ONNX 路徑略高。
  • Synthesizer — PyTorch VITS 解碼器。套用了 torch.compile
  • Duration Predictor — 與 Synthesizer 相同的 PyTorch 路徑,一同包含在 torch.compile 目標中。

縮短 GPU 後端冷啟動

GPU 後端的首次 prepare() 可能因模型下載 + torch.compile 初始化交織而耗時數十秒。

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

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

並排對比

項目CPU (ONNX)GPU (PyTorch + compile)
安裝pip install hayakoepip install hayakoe[gpu]
映像檔大小數百 MB數 GB
冷啟動快 (秒級)慢 (數十秒,首次 compile)
單請求延遲一般最低
並發處理量受核心數限制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

具體數值請看基準測試

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