🚀 SVDQuant
SVDQuantは、4ビットの重みと活性化に対するトレーニング後の量子化技術で、視覚的な忠実度を維持します。12BのFLUX.1-devでは、BF16モデルと比較して3.6倍のメモリ削減を達成します。CPUオフロードを排除することで、16GBのラップトップ4090 GPU上で16ビットモデルよりも8.7倍の高速化を実現し、NF4 W4A16ベースラインよりも3倍高速です。PixArt-∑では、他のW4A4やW4A8ベースラインよりも著しく優れた視覚品質を示します。

🚀 クイックスタート
SVDQuantは、4ビットの重みと活性化に対するトレーニング後の量子化技術で、視覚的な忠実度を維持します。以下のセクションでは、その詳細を説明します。
✨ 主な機能
- 4ビットの重みと活性化に対するトレーニング後の量子化技術で、視覚的な忠実度を維持します。
- 12BのFLUX.1-devでは、BF16モデルと比較して3.6倍のメモリ削減を達成します。
- CPUオフロードを排除することで、16GBのラップトップ4090 GPU上で16ビットモデルよりも8.7倍の高速化を実現します。
- PixArt-∑では、他のW4A4やW4A8ベースラインよりも著しく優れた視覚品質を示します。
🔧 技術詳細
量子化方法 -- SVDQuant
SVDQuantの概要。ステージ1: もともと、活性化 X と重み W の両方に外れ値が含まれており、4ビット量子化が困難です。ステージ2: 我々は活性化から重みへ外れ値を移動させ、更新された活性化と重みを得ます。活性化は量子化しやすくなりますが、重みはより難しくなります。ステージ3: SVDQuantはさらに、SVDを使用して重みを低ランク成分と残差に分解します。これにより、16ビット精度で実行される低ランクブランチによって量子化の難易度が軽減されます。
Nunchakuエンジン設計
(a) ランク32の低ランクブランチを単純に実行すると、Down Projection での16ビット入力の追加読み取りと Up Projection での16ビット出力の追加書き込みにより、57%のレイテンシオーバーヘッドが発生します。Nunchakuはカーネル融合によってこのオーバーヘッドを最適化します。(b) Down Projection と Quantize カーネルは同じ入力を使用し、Up Projection と 4-Bit Compute カーネルは同じ出力を共有します。データ移動のオーバーヘッドを削減するために、最初の2つと後の2つのカーネルを融合します。
📚 ドキュメント
モデルの説明
属性 |
详情 |
開発者 |
MIT、NVIDIA、CMU、Princeton、UC Berkeley、SJTU、Pika Labs |
モデルタイプ |
INT W4A4モデル |
モデルサイズ |
6.64GB |
モデル解像度 |
ピクセル数は65,536の倍数である必要があります。 |
ライセンス |
Apache-2.0 |
📦 インストール
Diffusers
mit-han-lab/nunchaku の指示に従って環境をセットアップしてください。その後、以下のコードでモデルを実行できます。
import torch
from diffusers import FluxPipeline
from nunchaku.models.transformer_flux import NunchakuFluxTransformer2dModel
transformer = NunchakuFluxTransformer2dModel.from_pretrained("mit-han-lab/svdq-int4-flux.1-dev")
pipeline = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev", transformer=transformer, torch_dtype=torch.bfloat16
).to("cuda")
image = pipeline("A cat holding a sign that says hello world", num_inference_steps=50, guidance_scale=3.5).images[0]
image.save("example.png")
Comfy UI
使用方法については、comfyui/README.md を確認してください。
💻 使用例
基本的な使用法
import torch
from diffusers import FluxPipeline
from nunchaku.models.transformer_flux import NunchakuFluxTransformer2dModel
transformer = NunchakuFluxTransformer2dModel.from_pretrained("mit-han-lab/svdq-int4-flux.1-dev")
pipeline = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev", transformer=transformer, torch_dtype=torch.bfloat16
).to("cuda")
image = pipeline("A cat holding a sign that says hello world", num_inference_steps=50, guidance_scale=3.5).images[0]
image.save("example.png")
📄 ライセンス
このモデルは flux-1-dev-non-commercial-license
ライセンスの下で提供されています。
⚠️ 制限事項
- このモデルは、アーキテクチャがsm_86 (Ampere: RTX 3090, A6000)、sm_89 (Ada: RTX 4090)、sm_80 (A100) のNVIDIA GPUでのみ実行可能です。詳細はこのissueを参照してください。
- BF16モデルと比較して、細部に若干の違いが見られる場合があります。
引用
このモデルが役に立った場合や、あなたの研究に関連する場合は、以下のように引用してください。
@inproceedings{
li2024svdquant,
title={SVDQuant: Absorbing Outliers by Low-Rank Components for 4-Bit Diffusion Models},
author={Li*, Muyang and Lin*, Yujun and Zhang*, Zhekai and Cai, Tianle and Li, Xiuyu and Guo, Junxian and Xie, Enze and Meng, Chenlin and Zhu, Jun-Yan and Han, Song},
booktitle={The Thirteenth International Conference on Learning Representations},
year={2025}
}