🦔

忙しい人のための爆速SDXL(1batch/3s)

2023/11/18に公開

特に意味はありませんが

SDXLで1枚あたり3秒台を目指します。
RTAをしたいわけではないので、みなさんはそのまま普通に使ってください。

強いていうなら社会人になって時間がないのでとかいう適当な理由で生成を加速させます。

前回

前回こんな感じの記事を書きました。
https://zenn.dev/aics/articles/14ce486c13c2a5

これを少し応用します。

本題

やることはそんなに難しくないです。

そうですね。
応用といったので、今回使用するのは

  • stable-fast
  • LCM LoRA

主にこの2つです。

stable-fast

既存のPyTorch周りの機能をそのままに、高速化しよう!っていうやつです。

Diffusers向けの超軽量推論最適化フレームワークで、以下のような特徴があります

  1. CUDNN Convolution Fusion: 様々な計算パターン(Conv + Bias + Add + Actなど)に対応するCUDNN Convolution Fusion演算子を実装

  2. Low Precision & Fused GEMM: fp16精度で計算する融合GEMM演算子を使用し、PyTorchのデフォルトよりも高速

  3. NHWC & Fused GroupNorm: OpenAIのTritonを用いた最適化された融合NHWC GroupNorm + GELU演算子を実装し、メモリフォーマットの変換が不要に

  4. Fully Traced Model: torch.jit.traceインターフェースを改善し、複雑なモデルのトレースに最適
    StableDiffusionPipelineのほぼ全ての部分がトレース可能で、TorchScriptに変換可能

  5. CUDA Graph: UNet構造をCUDAグラフ形式に変換して、小さなバッチサイズの場合のCPUオーバーヘッドを削減

  6. Fused Multihead Attention: xformersを使用し、TorchScriptとの互換性を保持

LCM

自分は論文読んでもなんも分からん人なので、知りたい人は以下を読んでください。

https://zenn.dev/discus0434/articles/484be111f7862d

https://zenn.dev/aics/articles/3875b6e7f066d3

まぁとにかく生成が爆速になるモデルをLoRAにして、既存のモデルでも爆速にしよう!!!っていうやつです。

なにをしたいのか

ようは既存のアニメモデルを使って限界まで高速化したいです。(他に犠牲になったとしても)
既存のLCM LoRA(SDXL)で4秒くらいになるので、みなさんはそちらだけでいいと思います。(それはそう)

実際に使用したflowはここにあります。

https://gist.github.com/Katsuyuki-Karasawa/9f0995eb969d15300bc33d09f34670c7

必要はファイルは以下になります。

  • 自分の使用したいSDXLのモデル
  • 自分の使用したいLoRA
  • LCM LoRA SDXL

結論

SDXL + LCM LoRAでだいたい4.5秒以降くらいだったのが、3.7秒台くらいになっています。
まぁその代わり初回生成で300秒くらい失ってるので、誤差どころじゃないんですけどね..。

バッチ処理するとかimage2videoとかやりたい方にはいいと思います。
その場合は上でやってる人がいるのでそっち参考にしてください。

ではまた

https://twitter.com/R0u9h

AIものづくり研究会

Discussion