使用 🤗 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 卸載,以同時獲得延遲與記憶體使用的最佳整體減少。