【AnimateDiff】GIFアニメ生成の処理速度を改善する方法

【AnimateDiff】GIFアニメ生成の処理速度を改善する方法 ツール

「AnimateDiffの処理に時間がかかり過ぎる・・・」
「AnimateDiffのGIF生成の速度を改善したい」

このような場合には、この記事の内容が参考になります。
この記事では、AnimateDiffの処理速度を改善する方法を解説しています。

本記事の内容

  • AnimateDiffの起動ツール
  • AnimateDiffの処理速度をUPする方法
  • AnimateDiffの処理速度UPの効果

それでは、上記に沿って解説していきます。

AnimateDiffの起動ツール

AnimateDiffについては、次の記事で説明しています。

AnimateDiffを使えば、プロンプトでGIFアニメを生成できるようになります。
そして、AnimateDiffを動かすには以下のツールが利用可能です。

  • コマンド(Pythonスクリプト)
  • Gradio(専用GUI)
  • web UI

オススメは、web UIです。
おそらく、多くの方が普段からweb UIを利用していることでしょう。

機能的にも、web UIを利用する方が優れています。
また、速度に関してもweb UIの方が速いです。

したがって、web UIでAnimateDiffを利用することをオススメしています。
ここで言うweb UIは、AUTOMATIC1111版web UIとなります。

これだけ推しているweb UIですが、さらにAnimateDiffの速度UPが可能です。
「2倍以上UP!!」とまでは行きませんが、確実に処理速度はUPします。

その方法を以下で説明します。

AnimateDiffの処理速度をUPする方法

AnimateDiffの処理速度をUPする方法とは、web UIの処理速度をUPする方法とも言えます。
もっと言うと、PyTorchの処理速度をUPする方法となります。

PyTorchの処理速度UPと言うと、xFormersを思い浮かべるかもしれません。

実は、PyTorch 2系では別の処理速度UPの方法があります。
それは、「–opt-sdp-attention」オプションを利用する方法です。

ただ、現在はPyTorch 2系でもxFormersを利用することができます。
しかし、AnimateDiffの拡張機能にxFormersは適用されません。

拡張機能の開発者が、公式ページで回答しています。
https://github.com/continue-revolution/sd-webui-animatediff

よって、残された道は「–opt-sdp-attention」を利用する選択肢のみとなります。
おそらく、速度だけで言えばxFormersよりは上だと思いますけどね。
(画質云々がどうなるのかは未検証)

具体的には、以下のコマンドがAnimateDiffの処理速度をUPする方法となります。

python launch.py --no-half-vae --opt-sdp-attention --opt-sdp-no-mem-attention

上記コマンドでweb UIを起動すれば、AnimateDiffの速度をUPできます。

以下では、実際にどれほど処理速度がUPしたのかを説明します。

AnimateDiffの処理速度UPの効果

効果を判定するために、以下のパターンで検証しています。

  1. なし
  2. 「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」
  3. 「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」 + 「–opt-channelslast」

「–opt-channelslast」については、環境次第のところがあると言われています。
おまけ程度に捉えてください。

本命は、パターン1とパターン2の比較です。
そして、GIFアニメは以下の2種類を生成します。

  • 512 x 512の16フレーム
  • 768 x 768の24フレーム

それぞれの種類毎に確認していきます。
なお、検証したマシン(Windows 11)のGPUは以下となります。

> nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader
NVIDIA GeForce RTX 3090, 24576 MiB, 18561 MiB

画像生成のためのプロンプトは、すべて同じモノを用いています。

512 x 512の16フレーム

まず、画像生成はデフォルト設定とします。

AnimateDiffの設定もデフォルトです。

上記の設定で全パターンを10回実行した結果が以下となります。

1.なし

Time taken: 31.29s Torch active/reserved: 13940/17258 MiB, Sys VRAM: 19784/24576 MiB (80.5%)
Time taken: 33.82s Torch active/reserved: 13940/17258 MiB, Sys VRAM: 19773/24576 MiB (80.46%)
Time taken: 33.84s Torch active/reserved: 13940/17260 MiB, Sys VRAM: 19783/24576 MiB (80.5%)
Time taken: 31.59s Torch active/reserved: 13940/17258 MiB, Sys VRAM: 19769/24576 MiB (80.44%)
Time taken: 31.54s Torch active/reserved: 13940/17260 MiB, Sys VRAM: 19702/24576 MiB (80.17%)
Time taken: 31.29s Torch active/reserved: 13940/17258 MiB, Sys VRAM: 19696/24576 MiB (80.14%)
Time taken: 31.59s Torch active/reserved: 13940/17260 MiB, Sys VRAM: 19750/24576 MiB (80.36%)
Time taken: 31.32s Torch active/reserved: 13940/17260 MiB, Sys VRAM: 19683/24576 MiB (80.09%)
Time taken: 31.13s Torch active/reserved: 13940/17260 MiB, Sys VRAM: 19682/24576 MiB (80.09%)
Time taken: 31.35s Torch active/reserved: 13940/17258 MiB, Sys VRAM: 19711/24576 MiB (80.2%)

2.「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」

Time taken: 27.47s Torch active/reserved: 8846/10396 MiB, Sys VRAM: 12762/24576 MiB (51.93%)
Time taken: 28.13s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.73s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.80s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.49s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.61s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.58s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.47s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)
Time taken: 27.40s Torch active/reserved: 8853/10090 MiB, Sys VRAM: 12464/24576 MiB (50.72%)

3.「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」 + 「–opt-channelslast」

Time taken: 29.87s Torch active/reserved: 8844/10040 MiB, Sys VRAM: 12406/24576 MiB (50.48%)
Time taken: 29.33s Torch active/reserved: 8844/10042 MiB, Sys VRAM: 12408/24576 MiB (50.49%)
Time taken: 29.57s Torch active/reserved: 8844/10040 MiB, Sys VRAM: 12406/24576 MiB (50.48%)
Time taken: 29.56s Torch active/reserved: 8844/10042 MiB, Sys VRAM: 12408/24576 MiB (50.49%)
Time taken: 29.45s Torch active/reserved: 8844/10040 MiB, Sys VRAM: 12406/24576 MiB (50.48%)
Time taken: 29.34s Torch active/reserved: 8844/10040 MiB, Sys VRAM: 12406/24576 MiB (50.48%)
Time taken: 29.50s Torch active/reserved: 8844/10040 MiB, Sys VRAM: 12406/24576 MiB (50.48%)
Time taken: 29.40s Torch active/reserved: 8844/10042 MiB, Sys VRAM: 12408/24576 MiB (50.49%)
Time taken: 29.96s Torch active/reserved: 8844/10042 MiB, Sys VRAM: 12408/24576 MiB (50.49%)
Time taken: 29.29s Torch active/reserved: 8844/10042 MiB, Sys VRAM: 12408/24576 MiB (50.49%)

パターン2の「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」が、最速ですね。
パターン1と比べると、4秒程度は速度がUPできています。

でも、次のように感じる人もいるかもしれません。
「4秒程度なら、別に今のままでもいいかなぁ」

ただ、4秒程度と言っても10回繰り返せば40秒ですからね。

768 x 768の24フレーム

次は、画像を大きくしましょう。
あと、Sampling stepsとCFG Scaleも値を増やします。

フレーム数も増やします。

GPUメモリの限界に挑む設定となります。
この設定だと、かなりの時間がかかります。

よって、それぞれの試行数は3回としています。
3回でも十分に違いのわかる結果となっています。

1.なし

Time taken: 3m 41.27s Torch active/reserved: 18802/23202 MiB, Sys VRAM: 24576/24576 MiB (100.0%) 
Time taken: 3m 30.40s Torch active/reserved: 18805/23190 MiB, Sys VRAM: 24576/24576 MiB (100.0%) 
Time taken: 3m 45.84s Torch active/reserved: 18834/23190 MiB, Sys VRAM: 24576/24576 MiB (100.0%)

2.「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」

Time taken: 2m 58.77s Torch active/reserved: 18813/22882 MiB, Sys VRAM: 24576/24576 MiB (100.0%) 
Time taken: 2m 46.00s Torch active/reserved: 18839/23426 MiB, Sys VRAM: 24576/24576 MiB (100.0%) 
Time taken: 2m 49.69s Torch active/reserved: 18834/22888 MiB, Sys VRAM: 24576/24576 MiB (100.0%)

3.「–opt-sdp-attention」 + 「–opt-sdp-no-mem-attention」 + 「–opt-channelslast」

Time taken: 2m 58.65s Torch active/reserved: 18805/22336 MiB, Sys VRAM: 24576/24576 MiB (100.0%) 
Time taken: 2m 55.04s Torch active/reserved: 18807/23418 MiB, Sys VRAM: 24576/24576 MiB (100.0%) 
Time taken: 2m 55.52s Torch active/reserved: 18804/22336 MiB, Sys VRAM: 24576/24576 MiB (100.0%)

いかがでしょうか?
処理速度UPの効果を実感できる結果ではないでしょうか?

パターン2はパターン1よりも、40秒近く時間短縮になっています。
「512 x 512の16フレーム」で短縮できた4秒の10倍ということですね。

つまり、処理が重くなればなるほど、より速度UPの効果が発揮されると言えます。

タイトルとURLをコピーしました