🦊高速化と軽量化
🏠 | 🦊雑に学ぶComfyUI
👈️ |
👉️ |
Stable Diffusion 1.5 は登場当初、VRAMが10GB必要とされhttps://github.com/CompVis/stable-diffusion/issues/175?utm_source=chatgpt.com、RTX3080で一枚生成するのに5秒程度必要https://lambda.ai/blog/inference-benchmark-stable-diffusion?utm_source=chatgpt.comでした
それも今や昔、技術が進み現在ではCPUのみで5秒程度で推論できたり、100FPSという速さで画像を生成出来るようになりました(SDXS)
拡散モデルの歴史は、高速化と軽量化の歴史、ということも出来るわけですね😚
高速化と軽量化はちょくちょくごっちゃにされますが、軽量化のための技術(量子化/GGUF等)を使うと、推論速度は下がることもあり、目的によって技術を使い分ける必要があります
※ここでは軽量化をGPUでの計算量削減および VRAM 使用量削減としています
table:高速化・軽量化技術一覧
手法名 タイプ 高速化 軽量化 汎用度 品質低下
GGUF 形式 モデル圧縮・量子化 ― ○(モデル容量・VRAM節約) 低 微~小
8-bit 量子化 量子化 ○ ○(VRAM約半減) 高 ほぼ無
4-bit 量子化 量子化 ○ ○(VRAM大幅削減) 中 小~中
蒸留 (多段階) 蒸留(Progressive) ◎ ―(モデルサイズは変化なし) 低 微小
注意量子化 (Sage-Attn) Attention 最適化 ○ ― 中 無
TeaCache サンプリング最適化・キャッシュ ○ ― 低 微小
TAESD 構造改良(小型VAE置換) ◎ ○(VAEの計算負荷大幅削減) 高 小
Torch.compile フレームワーク最適化 ○ ― 高 無
CPUオフロード メモリオフロード ✕ ◎(VRAMを数GBまで削減可能) 高 無
Block Swap 動的メモリ管理 ✕ ◎ 高 ほぼ無
VAEタイル化 メモリ削減手法 ― ○(大画像生成時のVRAM節約) 高 小
量子化 (8/4bit,GGUF)
モデルの重みを低精度化する手法
8bitよりも4bitのほうがVRAM削減効果は大きいが、その分品質への影響も大きい
低精度への変換処理や、GPUの最適化不足でオーバーヘッドが生じ推論速度は低下する
e.g. fp8, fp4,GGUF
蒸留
より少ないサンプリングステップで生成出来るように知識蒸留(以外にも色々ある)を行う手法
代表例にFLUX.1-schnell、SDXL-Lightningなど
1~4stepsで同等品質の画像を生成出来る
モデルサイズは変わらないため軽量化効果はない
Attention最適化 (SageAttention)
Attentionテンソルを8bit量子化しつつ、精度を維持しながら計算を行う
FlashAttention2やxformersと比較して約2.1倍高速
サンプリングキャッシュ (TeaCache)
DiTモデル向けのキャッシュ技術
一部の計算結果をキャッシュすることで、追加学習なしに高速化する
小型VAE (TAESD)
VAEを蒸留したことで爆速でデコードできる
CPUオフロード
推論時にVRAMが足りなくなったとき、モデルの一部をCPUに退避させる
デバイス間のデータ転送が頻繁に発生するため、推論速度は大幅に低下する
Block Swap
Transformerモデルを「ブロック」単位に分割し、計算に必要なブロックのみをGPUメモリに保持、使用頻度の低いブロックをCPUメモリに退避させる
VAEタイル化 (Tiled VAE)
空間をタイル状に分割することで超巨大な画像であっても計算量を減らし、デコードできるようにする
最近広がってきている動画生成モデルでは、時間軸上で数フレームずつに分けることで計算量を減らしている(Temporal Tiling)