🤗 Transformers を使用した Bark の最適化
Hugging Face は、Bark テキスト読み上げ(TTS)モデルのメモリ使用量を削減し、推論速度を向上させる方法を詳細に説明しています。3 つの特定の最適化技術—Better Transformer、半精度浮動小数点 (fp16)、および CPU オフロード—を組み合わせることで、ユーザーはメモリフットプリントを最大 80% 削減し、速度を 23% 向上させることができます。
Bark モデルアーキテクチャ
Bark は Suno AI が開発したトランスフォーマーベースの TTS モデルで、音声、音楽、バックグラウンドノイズ、および非言語音(例:笑い声やため息)を生成できます。アーキテクチャは、順次動作する 4 つの主要コンポーネントで構成されています:
- BarkSemanticModel: 意味的テキストトークンを予測する因果自己回帰トランスフォーマー。
- BarkCoarseModel: EnCodec 用の最初の 2 つのオーディオコードブックを予測する因果自己回帰トランスフォーマー。
- BarkFineModel: 残りのコードブックを反復的に予測する非因果オートエンコーダートランスフォーマー。
- EncodecModel: 最終コードブックチャネルをデコードし、出力オーディオ配列を生成します。
最適化技術
最適化は、🤗 Optimum と 🤗 Accelerate ライブラリを使用して最小限のコード変更で達成されます。
Better Transformer
Better Transformer は、カーネル融合と Flash Attention を利用して GPU 操作を最適化します。Flash Attention は、シーケンス長に対して線形にメモリ使用量を削減し(二次から線形へ)、モデルの性能を劣化させずに速度を向上させます。
Key Benefit: 出力品質を損なうことなく、20% から 30% の速度向上を提供します。
半精度 (fp16)
単精度浮動小数点 (fp32, 1 数あたり 32 ビット) から半精度 (fp16, 1 数あたり 16 ビット) に切り替えることで、モデルのストレージ要件が半分になります。
Key Benefit: メモリフットプリントを 50% 削減し、約 5% の modest な速度向上を提供します(ただし、わずかな性能劣化を引き起こす可能性があります)。
CPU オフロード
Bark の 4 つのサブモデルは順次呼び出されるため、一度にアクティブなのは 1 つだけで、他はアイドル状態になります。CPU オフロードは、アイドル状態のサブモデルを GPU から CPU にアンロードし、貴重な GPU メモリを解放します。
Key Benefit: 約 60% のメモリフットプリント削減と、わずか (10%) のレイテンシ増加を実現します。
パフォーマンスベンチマーク
ベンチマークは、NVIDIA TITAN RTX 24GB 上で Bark の large バージョンを使用し、最大 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 モデルを 5GB 代わりに 2GB のフットプリントで実行します。
- 高スループットを重視する場合: バッチサイズ 8 を使用し、Better Transformer と半精度 (
fp16) を組み合わせます。 - バランスの取れたパフォーマンスを求める場合:
fp16、Better Transformer、および CPU オフロードを組み合わせ、レイテンシとメモリ使用量の両方において最も全体的な削減を達成します。