使用 🤗 Transformers 優化 Bark

Hugging Face 已詳細說明一種優化 Bark 文字轉語音 (TTS) 模型的方法,以減少記憶體使用並提升推理速度。透過結合三種特定的優化技術——Better Transformer、半精度浮點數 (fp16) 與 CPU 卸載——使用者可達成記憶體佔用最多減少 80% 以及速度提升 23%。

Bark 模型架構

Bark 是由 Suno AI 開發的基於 Transformer 的文字轉語音 (TTS) 模型,能夠生成語音、音樂、背景噪音以及非語音聲音(例如笑聲和嘆息)。其架構由四個主要組件依序運作組成:

  • BarkSemanticModel:一個因果自回歸 Transformer,用於預測語義文本標記。
  • BarkCoarseModel:一個因果自回歸 Transformer,用於預測 EnCodec 的前兩個音訊 codebook。
  • BarkFineModel:一個非因果自編碼 Transformer,會迭代預測剩餘的 codebook。
  • EncodecModel:將最終的 codebook 通道解碼為輸出音訊陣列。

優化技術

透過 🤗 Optimum 和 🤗 Accelerate 庫,僅需最少的程式碼變更即可實現優化。

Better Transformer

Better Transformer 透過核心融合與 Flash Attention 最佳化 GPU 運算。Flash Attention 將記憶體使用從平方級降低至線性級(相對於序列長度),從而在不降低模型效能的情況下提升速度。

主要優勢:在不損失輸出品質的情況下,提供 20% 至 30% 的速度提升。

半精度 (fp16)

透過將單精度浮點數 (fp32, 每個數字 32 位元) 切換為半精度浮點數 (fp16, 每個數字 16 位元),模型的儲存需求將減半。

主要優勢:將記憶體佔用減少 50%,並提供約 5% 的適度 速度提升,但可能會引入輕微的效能下降。

CPU 卸載

由於 Bark 的四個子模型會依序被呼叫,因此同一時間只有一個處於活動狀態,其餘則保持閒置。CPU 卸載會將不活動的子模型從 GPU 卸載到 CPU,以釋放寶貴的 GPU 記憶體。

主要優勢:將記憶體佔用減少約 60%,同時延遲僅增加約 10%。

效能基準測試

基準測試是在 NVIDIA TITAN RTX 24GB 上使用 Bark 的大型版本進行,最多生成 256 個新標記,並以 100 個樣本的平均值計算。

單樣本生成 (批次大小 = 1)

在生成單一樣本時,Better Transformer、CPU 卸載與 fp16 的組合能帶來最顯著的提升:

優化 延遲變化 記憶體變化
無優化 0% 0%
僅 Better Transformer -27% -1%
卸載 + Better Transformer -15% -59%
卸載 + Better Transformer + fp16 -23% -80%

批次生成 (批次大小 = 8)

將多個樣本組合成批次可顯著提升吞吐量。當 Better Transformer 預設啟用時,觀察到以下結果:

優化 延遲變化 記憶體變化 吞吐量變化
基準案例 (Better Transformer) 0% 0% 0%
+ fp16 -46% -50% +87%
+ 卸載 +6% -38% -6%
+ 卸載 + fp16 -43% -69% +77%

最佳配置摘要

根據使用情況,建議採用不同的優化組合:

  • 針對記憶體效率:使用 Better Transformer 與 CPU 卸載來運行大型 Bark 模型,使其佔用 2GB 而非 5GB。
  • 針對高吞吐量:結合批次大小 8、Better Transformer 與半精度 (fp16) 使用。
  • 針對平衡效能:結合 fp16、Better Transformer 與 CPU 卸載,以同時獲得延遲與記憶體使用的最佳整體減少。

Sources