ONNX Runtime と Olive を使用した SD Turbo と SDXL Turbo 推論の高速化
TL;DR
Hugging Face と Microsoft は、ONNX Runtime と Olive 最適化ツールを使用して SD Turbo と SDXL Turbo の推論を最適化し、PyTorch に比べて SDXL Turbo で最大 229%、SD Turbo で最大 120% のスループット向上を実現しました。これらの最適化により、わずか 1 ステップで高性能な画像生成が可能になり、C# や Java などの非 Python 言語でもモデルを利用できるようになります。
パフォーマンスベンチマーク: ONNX Runtime と PyTorch の比較
ONNX Runtime は、NVIDIA GPU 上の SD Turbo と SDXL Turbo の両モデルに対し、テストされたすべてのバッチサイズとステップ数において PyTorch を大幅に上回ります。
主なスループット向上
- SDXL Turbo: スループットは PyTorch と比較して最大 229% に達しました。
- SD Turbo: スループットは PyTorch と比較して最大 120% に達しました。
- Execution Providers: CUDA と TensorRT の両実行プロバイダーは、静的形状と動的形状の両方で PyTorch に対して顕著な改善を示しました。
ハードウェアと構成結果
ベンチマークは、LCM Scheduler と fp16 モデルを使用し、A100-SXM4-80GB と RTX-4090 GPU で実施されました。
- Static vs. Dynamic Shapes: バッチサイズと画像サイズがグラフ定義時に分かっている場合、静的形状は一般的に高速なパフォーマンスを提供します。動的形状はより柔軟で、エンジンを再構築せずに実行中にバッチや画像サイズを変更できます。
- GPU Specifics: A100 GPU では、CUDA 実行プロバイダーを使用した ONNX Runtime が動的形状に対してしばしば最適な選択です。RTX-4090 GPU では、TensorRT 実行プロバイダーが動的形状で若干優れた性能を示すことが多いです。
技術的最適化とツール
パフォーマンス向上は、Olive モデル最適化ツールと ONNX Runtime 内の特定の GPU レベルの強化によって実現されています。
Olive 最適化ツール
モデルはハードウェア対応のモデル最適化ツールである Olive を使用して生成されます。最大のパフォーマンスを得るには、コマンドラインで fp16 VAE を有効にする必要があります。
GPU 固有の強化
標準的な Stable Diffusion の最適化に加えて、以下の具体的な技術的改善が実装されました:
- CUDA Graph: 静的形状入力に対して有効化し、オーバーヘッドを削減しました。
- Flash Attention V2: 注意機構を高速化するために統合しました。
- Text Encoder Optimization: テキストエンコーダの余分な出力を削除し、
clip_skipパラメータで指定された隠れ状態出力のみを残しました。 - SkipGroupNorm Fusion: Group Normalization を前の Add ノードと融合させました。
- LoRA Support: 潜在一貫性モデル(LCM)の LoRA 重みのサポートを追加しました。
クロスプラットフォームのアクセシビリティと統合
ONNX Runtime を利用することで、SD Turbo と SDXL Turbo は Python 環境に限定されず、より多様なソフトウェアスタックへの統合が可能になります。
言語サポート
- C#: OnnxStack などのコミュニティプロジェクトが Stable Diffusion 推論用の .NET ライブラリを提供しています。
- Java: Oracle が ONNX Runtime 上で推論を実行する Stable Diffusion サンプル(
sd4j)をリリースしています。
Web UI 統合
Automatic1111 の SD WebUI 用 ONNX Runtime 拡張により、CUDA 実行プロバイダーと Olive 最適化モデルを使用して、NVIDIA GPU 上で Stable Diffusion UNet モデルを最適化された形で実行できます。
今後のロードマップ
Hugging Face と Microsoft は、これらの最適化を以下を含む追加の機能やモデルへ拡張する計画です。
- Feature Support: IP Adapter と ControlNet の統合。
- Model Support: Stable Video Diffusion への拡張。
- UI Improvements: 既存の Stable Diffusion Web UI 拡張内での SD Turbo と SDXL Turbo のパフォーマンスのさらなる最適化と、コミュニティが開発した Windows UI のサポート。