Stable Diffusion XL on Mac における 高度な Core ML 量子化
Hugging Face と Apple は、Stable Diffusion XL の Core ML ポートをリリースし、Apple Silicon Mac 上で高品質な 1024x1024 画像生成を可能にしました。このリリースでは、モデルサイズとメモリ要件を大幅に削減し、均一量子化に関連する深刻な品質低下を伴わない圧縮技術である mixed-bit パレット化 を導入しています。
Core ML 実装とパフォーマンス
Stable Diffusion XL は現在、Core ML 形式で利用可能となり、Apple Silicon Mac で公式ベータ版の macOS 14 を実行している Swift アプリケーションでネイティブに実行できます。実装では現在、ORIGINAL アテンション実装(CPU と GPU コンピュートユニット向けに設計)を使用しています。リファイナーステージはまだポートされていないことに注意してください。
ハードウェア パフォーマンス ベンチマーク
CPU_AND_GPU コンピュートユニットと ORIGINAL アテンション実装を使用すると、デバイスによってエンドツーエンド遅延と拡散速度が異なります:
| デバイス | エンドツーエンド遅延 (s) | 拡散速度 (iter/s) |
|---|---|---|
| MacBook Pro (M1 Max) | 46 | 0.46 |
| MacBook Pro (M2 Max) | 37 | 0.57 |
| Mac Studio (M1 Ultra) | 25 | 0.89 |
| Mac Studio (M2 Ultra) | 20 | 1.11 |
Mixed-Bit パレット化技術
Mixed-Bit パレット化は、出力品質への影響に基づいて異なるレイヤーに異なるビット深度を割り当てることでモデルサイズを最適化する事後トレーニング量子化手法です。標準の 6 ビット パレット化は均一なビット深度を適用しますが、Mixed-Bit パレット化は品質劣化を最小限に抑えるために各レイヤーあたりの最適なビット数を決定します。
Mixed-Bit パレット化の仕組み
このプロセスは2つの主要なフェーズから構成されます:
- 分析フェーズ: システムは各レイヤーを調べ、さまざまなビット深度(1, 2, 4, 8 ビット)をテストします。品質劣化は、入力セットを使用して量子化モデルと元の
float16モデルのピーク信号対雑音比(PSNR)を比較することで測定されます。目標は、PSNR が特定のしきい値を上回るように各レイヤーあたりの最低ビット深度を特定することです。 - 適用フェーズ: 各レイヤーのビット深度を指定する JSON 辞書である「レシピ」が分析中に生成され、その後モデルの重みに適用されます。
圧縮結果
Stable Diffusion XL の UNet に 4.5 ビット平均レシピを適用すると、サイズが 71% 削減され、4.8 GB から 1.4 GB に減少しました。
技術的な分析によると、同じモデルサイズにおいて、Mixed-Bit パレット化は線形 8 ビット量子化(1 ビット量子化を除く)よりも優れた性能を示します。高い圧縮率(例えば 3.41 ビット)では、たとえば「サーフィンする犬」のプロンプトでサーフボードが消失するなど、特定のプロンプトの詳細が失われる可能性がありますが、4.50 ビットおよび 6.55 ビット版は現実性の観点から元の 16 ビット品質に近い状態を保ちます。
デプロイと変換リソース
ユーザーと開発者は、以下に示すリソースを使用して Mac 上で Stable Diffusion XL をデプロイできます:
- 事前に変換されたモデル: Hugging Face は、フルプレシジョン パイプライン (
apple/coreml-stable-diffusion-xl-base) と mixed-bit パレット化パイプライン (apple/coreml-stable-diffusion-mixed-bit-palettization) の両方を提供します。 - 変換ツール: Apple の
ml-stable-diffusionリポジトリは、ユーザーが独自のファインチューン済みモデルを変換できるようにします。XL モデルの場合、ユーザーは--attention-implementation ORIGINALフラグを使用する必要があります。 - カスタム量子化:
mixed_bit_compression_pre_analysis.pyとmixed_bit_compression_apply.pyのスクリプトは、独自の量子化レシピを生成および適用したいユーザーのために利用可能です。 - 事前に計算されたレシピ: 長い分析フェーズを避けるため、Stable Diffusion 1.5、2.1、および XL 1.0 ベースの事前に計算されたレシピがコミュニティ向けに利用可能です。