ローカルでもサクサク動画生成(ComfyUI-HunyuanVideoWrapper, I2V)

AI

kijai氏のComfyUI-HunyuanVideoWrapperでの動画生成で、生成時間に関わる部分を比較しました。

最終的には432×768, 97frames を1動画あたり41秒で生成できました。※ロード時間等は含まず

前置き

使用モデル

6stepsで動画を生成できるモデルを使いました。

ワークフロー

実行環境

  • Windows 11
  • Nvidia RTX 4080 16GB
  • ComfyUI_portable

ComfyUIやtritonその他インストールについては以前の記事を参考にしてください。

Torch Compile による最適化

HunyuanVideo Torch Compile Settings ノード

HunyuanVideo Torch Compile Settings ノードの画像

このノードをHunyuanVideo Model Loader ノードに接続するとtorch.compile() によるJITコンパイルが行われ、PyTorchのコードがカーネルに最適化されるそうです。
使うには triton のインストールが必要です。未インストールの方は以前の記事を参考にしてください。

Torch Compileによる最適化の検証

  • 432xx768
  • 121フレーム
  • 6steps

HunyuanVideo Torch Compile Settings ノードありの場合となしの場合でワークフローを2回実行し、それぞれの実行時間と動画生成中のVRAM使用量を比較します。

ワークフローは1回の実行で4つの動画を生成するものを使いました。

Torch Compile なしの場合:

実行回数VRAM使用量ワークフロー実行時間動画1動画2動画3動画4
1回目13.2GB7m26s1m11s1m11s1m09s1m09s
2回目12.9GB6m50s1m10s1m10s1m10s1m10s

Torch Compile ありの場合:

実行回数VRAM使用量ワークフロー実行時間動画1動画2動画3動画4
1回目10.9GB7m34s1m53s55s55s55s
2回目10.7GB5m50s59s55s55s55s

HunyuanVideo Torch Compile Settings ノードをつなぐと特に2回目以降の生成時間が大幅に短縮されます。

1動画あたりでは 1m10s -> 55s なので、約21% の短縮です。
さらにVRAM使用量も減少するため、生成フレーム数を増やすこともできますね。

補足:コンパイルキャッシュによるエラーの解決

Torchコンパイル時にエラーが出たので、解決方法をメモしておきます。

私はComfyUI_portableの環境を複数持っているのですが、他の環境で作成されたキャッシュのせいで

PowerShell
ImportError: DLL load failed while importing __triton_launcher: 指定されたモジュールが見つかりません。

というエラーが出てしまいました。
小一時間悩みましたが、以下のフォルダを削除することで解決しました。

PowerShell
C:\Users\<ユーザー名>\.triton
C:\Users\<ユーザー名>\AppData\Local\Temp\torchinductor_<ユーザー名>

run_nvidia_gpu.bat を編集し、起動時に毎回キャッシュを削除するようにしました。

BAT (Batchfile)
rmdir /s "%temp%\torchinductor_%username%"
rmdir /s "%HOMEDRIVE%%HOMEPATH%\.triton"

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build
pause

attention_mode の比較

HunyuanVideo Model Loader ノード

attention_modeは

  • sdpa
  • flash_attn_varlen
  • sageattn_varlen
  • sageattn
  • comfy

を選ぶことができます。

各 attention_mode の生成速度を比較

各 attention_mode で実行し、生成時間とVRAM使用量を比較します。

attention_modesdpaflash_attn_varlensageattn_varlensageattncomfy
生成時間2m20s1m16s55s50s2m12s
VRAM14.1GB11.0GB10.7GB12.1GB14.1GB

sageattn_varlen が良さそうです。sdpa と比較すると 2m20s -> 55s と約61%も生成時間が削減され、VRAM使用量も少ないです。

sageattn も速いですが、sageattn_varlen と比較するとVRAM使用量が少し増えるようです。

なお、sageattn_varlenで実行するにはSageAttentionのインストールが必要です。未インストールの方は以前の記事を参考にしてください。

TeaCache

HunyuanVideo TeaCache ノード

HunyuanVideo TeaCache ノードの画像

この数値を上げるほど生成が速くなるらしい。

TeaCache による高速化の検証

こちらも単一ワークフローで動画を2つ生成し、2つ目の動画の生成時間とVRAM使用量を比較しました。

rel_l1_threshなし0.10.20.4
生成時間1m21s1m20s53s53s
VRAM8.6GB10.9GB10.9GB11.0GB

使うだけで2.3GBのVRAM使用量が増えました。

なしの場合と rel_l1_thresh=0.2 の場合を比較すると、 1m21s -> 53s と 約35% も生成時間が削減されました。

ただし、値を上げすぎると生成動画の品質が下がります(映像がぼやける感じ)。
デフォルト値の rel_l1_thresh=0.15 が品質と生成速度のバランスが良さそうです。

まとめ

  • Torch Compile Settings ノードを使うと生成時間が短縮され、VRAM使用量も減少する
  • attention_mode は sageattn_varlen が高速で省VRAMなのでおすすめ
  • TeaCache ノードは rel_l1_thresh=0.15 くらいで使うと大幅に高速化され品質の低下も少ない。ただし、使うとVRAM使用量が増えることに注意。

最後に

最後に、一番遅い設定と速い設定でどれくらいの差があるかを比較

  • 432×768
  • 97フレーム
  • 6steps
設定Torch Compileattention_modeTeaCacheVRAM使用量生成時間
遅い設定なしsdpaなし12.7GB2m38s
速い設定ありsageattn_varlen0.29.1GB41s

2m38s -> 41s と 約84% の短縮となりました。

※生成時間:HunyuanVideo Samplerノードの実行にかかった時間を計測
※モデルのロードやコンパイル時間は含みません

コメント

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