忙しい人のための爆速SDXL(1batch/3s)
特に意味はありませんが
SDXLで1枚あたり3秒台を目指します。
RTAをしたいわけではないので、みなさんはそのまま普通に使ってください。
強いていうなら社会人になって時間がないのでとかいう適当な理由で生成を加速させます。
前回
前回こんな感じの記事を書きました。
これを少し応用します。
本題
やることはそんなに難しくないです。
そうですね。
応用といったので、今回使用するのは
- stable-fast
- LCM LoRA
主にこの2つです。
stable-fast
既存のPyTorch周りの機能をそのままに、高速化しよう!っていうやつです。
Diffusers向けの超軽量推論最適化フレームワークで、以下のような特徴があります
-
CUDNN Convolution Fusion: 様々な計算パターン(
Conv + Bias + Add + Act
など)に対応するCUDNN Convolution Fusion演算子を実装 -
Low Precision & Fused GEMM:
fp16
精度で計算する融合GEMM演算子を使用し、PyTorchのデフォルトよりも高速 -
NHWC & Fused GroupNorm: OpenAIの
Triton
を用いた最適化された融合NHWCGroupNorm + GELU
演算子を実装し、メモリフォーマットの変換が不要に -
Fully Traced Model:
torch.jit.trace
インターフェースを改善し、複雑なモデルのトレースに最適
StableDiffusionPipeline
のほぼ全ての部分がトレース可能で、TorchScriptに変換可能 -
CUDA Graph: UNet構造をCUDAグラフ形式に変換して、小さなバッチサイズの場合のCPUオーバーヘッドを削減
-
Fused Multihead Attention: xformersを使用し、TorchScriptとの互換性を保持
LCM
自分は論文読んでもなんも分からん人なので、知りたい人は以下を読んでください。
まぁとにかく生成が爆速になるモデルをLoRAにして、既存のモデルでも爆速にしよう!!!っていうやつです。
なにをしたいのか
ようは既存のアニメモデルを使って限界まで高速化したいです。(他に犠牲になったとしても)
既存のLCM LoRA(SDXL)で4秒くらいになるので、みなさんはそちらだけでいいと思います。(それはそう)
実際に使用したflowはここにあります。
必要はファイルは以下になります。
- 自分の使用したいSDXLのモデル
- 自分の使用したいLoRA
- LCM LoRA SDXL
結論
SDXL + LCM LoRAでだいたい4.5秒以降くらいだったのが、3.7秒台くらいになっています。
まぁその代わり初回生成で300秒くらい失ってるので、誤差どころじゃないんですけどね..。
バッチ処理するとかimage2videoとかやりたい方にはいいと思います。
その場合は上でやってる人がいるのでそっち参考にしてください。
ではまた
Discussion