ComfyUIの動画生成、同じ設定なのに生成時間がバラつく? 同一GPUで実測して原因を探った

本ページは広告(アフィリエイトプログラム)を含みます。詳しくはプライバシーポリシーをご覧ください。
以前からUbuntu機のRTX 3090でComfyUIを動かしています。動画生成を試していたところ、同じ設定で繰り返しているのに、所要時間が回ごとに大きく動きました。1回目が72.1秒、4回目が32.1秒。倍以上の開きがあります。 温まって速くなったのだろうか、と最初は考えました。ただ、それだと説明のつかない点がいくつか出てきます。 本記事では、この動画生成の速度のばらつきが何によって起きているのかを、温度とVRAMの記録から確かめます。同じRTX 3090で、大きさの違う2つのモデルを比べました。 同じグラフィックボードなのに、速度が揃うときと揃わないときがあるのは、なぜでしょうか? 前回は、ComfyUIで速度を測ったときに嘘の数字が出る原因を書きました。

測定に使った環境

計測に使ったのは1台です。
機材グラフィックボードVRAM
Ubuntu機RTX 309024GB(24,576MiB)
VRAM(ブイラム)は、グラフィックボードが持っている専用のメモリです。パソコン本体のメモリとは別物で、画像や動画を作るAIは、このVRAMの中にモデルを置いて計算します。 動かしたソフトはComfyUIです。動画生成には14B(パラメータ140億)のモデルを2本使う構成、画像生成にはSDXLを使いました。 測定は、同じ条件を12回ずつ繰り返しています。1回だけでは、たまたま遅かったのか本当に遅いのかを区別できません。

動画生成を12回続けたときの所要時間

同じ動画を同じ設定で12回続けて作らせました。1回目はモデルの読み込みが入るため、別扱いにしています。
所要時間GPU温度動作周波数
1回目72.1秒74℃1,735MHz
2回目40.0秒75℃1,715MHz
3回目36.0秒75℃1,687MHz
4回目32.1秒75℃1,694MHz
5回目32.1秒76℃1,693MHz
6回目32.0秒75℃1,720MHz
7回目失敗
8回目40.0秒75℃1,679MHz
9回目36.0秒75℃1,668MHz
10回目32.0秒75℃1,704MHz

温度で説明がつくか

温度は1回目からすでに74℃に達していて、その後はほとんど動いていません。動作周波数も1,668〜1,735MHzの範囲で、大きな変化はありません。 そもそも、温度が上がって速くなるのは筋が通りません。半導体は熱くなると遅くなる方向に働きます。実際、2回目以降は温度による抑制がかかっていることが記録から確認できました。それでも時間は縮んでいます。 もう一点、失敗した7回目のあとを見ると、40.0秒から同じ並びがやり直しになっています。温度は連続しているのに、時間だけが最初に戻る。温度が原因なら、この戻り方は起こりません。

0.5秒ごとに見たVRAMの出入り

温度以外に動いているものを探すため、VRAMの使用量を細かく記録しました。
記録した項目
記録した時間146秒
2GB以上の落ち込み14回
VRAMの最小403MiB
VRAMの最大23,719MiB(24,576MiB中)
VRAMがほぼ満杯まで上がっては、大きく落ちる。これを146秒のあいだに14回繰り返していました。モデルを置ききれず、降ろしては積み直しています
# VRAMを0.5秒ごとに記録する
while true; do
  echo "$(date +%s) $(nvidia-smi --query-gpu=memory.used 
    --format=csv,noheader,nounits -i 0)"
  sleep 0.5
done
使っていたのは、14B(パラメータ140億)のモデルが2本という構成の動画生成モデルです。保存されているファイルは13.3GBずつですが、読み込むときに展開されるため、合わせるとRTX 3090の24GBを大きく超えます。

収まるモデルなら、ばらつかないのか

ここまでの見立てが正しいなら、VRAMに余裕で収まるモデルであれば、同じRTX 3090でもばらつかないはずです。確かめました。 6.5GBのモデル(SDXL)で、同じRTX 3090に12回続けて画像を作らせています。プロンプトとシード値以外の条件は揃えました。シード値を毎回変えているのは、同じ値のままだとComfyUIが前の結果を使い回してしまうためです。
所要時間VRAM使用量2GB以上の落ち込みGPU温度
1回目18.1秒9,907MiB1回61℃
2回目6.0秒9,907MiB0回64℃
3〜11回目すべて6.0秒9,907MiB0回66〜72℃
12回目6.0秒9,907MiB0回74℃
1回目はモデルを読み込む時間が入ります。2回目以降は11回続けて6.0秒で、ばらつきは0.0%でした。落ち込みも起きていません。 温度は61℃から74℃まで13℃上がっていますが、所要時間は1秒も動いていません。温度が原因ではないことが、ここでもはっきりしました

収まるモデルと収まらないモデルの比較

同じRTX 3090で、違うのはモデルの大きさだけです。
収まらないモデル収まるモデル
VRAM使用量23,719MiB(97%)9,907MiB(40%)
2GB以上の落ち込み146秒で14回0回
所要時間のばらつき±25.2%±0.0%
失敗12回中2回0回
VRAMに収まるかどうかで、起きることが変わります
収まる場合
モデルはVRAMに置かれたまま
降ろす必要がない
→ 所要時間が揃います
収まらない場合
置ききれない分を降ろす
次に要るときに積み直す
→ 時間がばらつき、失敗も出ます

VRAMが足りないときの現れ方

VRAMが足りないときの症状は、想像していたものと違いました。エラーで止まると思っていましたが、実際には動き続けたまま、遅くなったりばらついたりします。ときどき失敗しますが、次の回はまた動きます。 この現れ方は、原因に気づきにくいものでした。「このグラフィックボードは不安定だ」と受け取ってしまいそうです。実際には、そのカードが不安定なのではなく、載らないモデルを載せようとしたときにこうなる、と考えられます。 使いたいモデルが手持ちのVRAMに収まるかどうかは、買う前に見積もれる部分です。

今回 確かめていないこと

比べたのは、RTX 3090で2つのモデル(6.5GBと、展開すると24GBを超えるもの)です。あいだの大きさは試していません。どのあたりから挙動が変わるのかは分かっていません。 他のグラフィックボードでも同じことが起きるかは、まだ確かめていません。この現象がモデル側の性質なのか、NVIDIA製カード特有のものなのかは、別のメーカーのカードで測る必要があります。 VRAMの落ち込みは0.5秒ごとの記録です。それより短い出入りは捉えられていません。

まとめ

同じRTX 3090で速度がばらついた原因は、温度ではありませんでした。 温度は1回目から74℃に達したあとほとんど動かず、それでも所要時間は縮み続けました。収まるモデルで測り直したところ、温度が13℃上がっても11回続けて6.0秒で揃っています。 原因はVRAMの容量でした。モデルが置ききれないため、降ろしては積み直す動作が146秒で14回起きています。所要時間のばらつきは±25.2%、12回中2回は失敗しました。 同じグラフィックボードでも、モデルが収まるかどうかで結果が変わります。VRAMが足りないときは、止まるのではなく遅くなり、ばらつく形で現れました。

GPUを2枚挿したときに何が起きるかは、こちらにまとめています。

量子化でVRAMの使い方がどう変わるかは、こちらです。