技術 約5分で読めます

WAN 2.2をRTX 4060(VRAM 8GB)のComfyUIで動かす

Mac版の記事ではM1 Max 64GBでWAN 2.2を動かしたが、2秒の動画に82分かかった。今回はWindows + RTX 4060(VRAM 8GB)で試す。

最終的に14B Rapid蒸留モデルの --lowvram オフロードで、111秒でこの結果が出た。

ここに至るまでに5Bモデルで3回失敗している。以下はその記録。

環境

  • GPU: NVIDIA GeForce RTX 4060(VRAM 8GB)
  • RAM: 32GB
  • OS: Windows 11
  • ComfyUI: ポータブル版

モデル選定

WAN 2.2には複数のモデルがある。

モデルパラメータ用途fp16サイズ
TI2V 5B50億テキスト+画像→動画9.3GB
T2V 14B140億テキスト→動画26.6GB
I2V 14B140億画像→動画26.6GB

RTX 4060のVRAM 8GBだと14Bモデルはfp8でも13GB超えでまず無理。5Bモデルもfp16で9.3GBあるので収まらない。

Kijaiがfp8量子化版を配布していて、5Bモデルが5.28GBまで縮む。これなら8GB VRAMに載る。

ダウンロードするファイル

ファイルサイズ配置先
Wan2_2-TI2V-5B_fp8_e4m3fn_scaled_KJ.safetensors5.28GBmodels/diffusion_models/
umt5_xxl_fp8_e4m3fn_scaled.safetensors6.3GBmodels/text_encoders/
wan2.2_vae.safetensors1.4GBmodels/vae/

合計約13GB。テキストエンコーダーが6.3GBと大きいが、ComfyUIはモデルを順番にロード・アンロードするので、全部同時にVRAMに載る必要はない。

ComfyUIの起動

通常の run_nvidia_gpu.bat だとVRAMが足りない。--lowvram オプションをつけて起動する。

cd C:\works\ComfyUI_windows_portable
.\python_embeded\python.exe -s ComfyUI\main.py --lowvram

--lowvram はモデルを必要なタイミングだけVRAMにロードし、不要になったらCPU RAMに退避する。生成速度は落ちるが、OOMで止まるよりマシ。メインメモリが32GBあれば退避先は十分。

ワークフロー

公式のWAN 2.2 5B I2Vワークフローをベースに、RTX 4060向けに調整した。

ノード構成

LoadImage → Wan22ImageToVideoLatent → KSampler → VAEDecode → SaveWEBM
                    ↑                     ↑
               VAELoader            UNETLoader → ModelSamplingSD3

                                   CLIPLoader → CLIPTextEncode (positive/negative)

プロンプト

I2Vのプロンプトは入力画像の説明ではなく、動きの指示を書く。画像は既にモデルに渡しているので、プロンプトでは「何をさせたいか」を指定する。

negative:

ugly, blurry, low quality, worst quality, static, deformed, disfigured,
extra fingers, bad hands, bad face, watermark, text, subtitle

試行錯誤

1回目: 480x480 / 30step / CFG 5 / 画像説明プロンプト

最初は入力画像の説明をpositiveプロンプトに書いてしまった。

an anime girl with brown hair in a side ponytail, wearing a white school shirt
with a red tie, winking and making a peace sign with both hands, gentle wind
blowing her hair, cheerful expression
項目
解像度480 x 480
ステップ30
CFG5
loaded completely; 5619.19 MB usable, 4856.42 MB loaded, full load: True
30/30 [00:57<00:00, 1.93s/it]
Prompt executed in 94.93 seconds

モデルは完全にVRAMに載った(full load: True)。生成は95秒。形は崩れ気味で動きもほぼなし。

2回目: 768x480 / 50step / CFG 3.5 / 画像説明プロンプト

解像度を推奨480pの768x480に上げ、ステップを50に増やし、CFGを3.5に下げて再挑戦。

項目
解像度768 x 480
ステップ50
CFG3.5
loaded completely; 5418.30 MB usable, 4856.42 MB loaded, full load: True
50/50 [02:32<00:00, 3.04s/it]
loaded partially; 774.88 MB usable, 612.87 MB loaded, 731.20 MB offloaded
Prompt executed in 178.52 seconds

拡散モデルはフルロードできたが、VAEデコード時にメモリが不足して部分オフロードが発生(731MB offloaded)。結果は1回目よりさらに悪化。768x480のラテントが大きすぎて、VAEがまともに動けていない。

3回目: 480x480 / 50step / CFG 5 / 動き指示プロンプト

480x480に戻してVAEの完全ロードを確保。プロンプトを動きの指示に変更。

gentle wind blowing hair, the girl blinks and smiles, slight head tilt,
hair sways naturally
項目
解像度480 x 480
ステップ50
CFG5
loaded completely; 5579.19 MB usable, 4856.42 MB loaded, full load: True
50/50 [01:35<00:00, 1.90s/it]
loaded completely; 1790.47 MB usable, 1344.09 MB loaded, full load: True
Prompt executed in 113.93 seconds

diffusion model、VAEともにフルロード。114秒で完了。プロンプトを動き指示に変えたが、品質は依然として厳しい。

5Bモデルは3回試してどれも厳しい。パラメータやプロンプトの問題ではなく、5B fp8の480x480がそもそもの品質上限。

14B Rapidモデルで再挑戦

Phr00t/WAN2.2-14B-Rapid-AllInOneというモデルがある。WAN 2.2の14Bモデルを蒸留して高速化したもので、テキストエンコーダーとVAEを1ファイルに統合したオールインワン構成。22GBある。

8GB VRAMに22GBのモデルは当然載らないが、ComfyUIの --lowvram がメインメモリにオフロードしてくれる。生成時にVRAMとメインメモリを行き来しながら推論する形になる。

ワークフロー

5Bとはノード構成が違う。AllInOneなので CheckpointLoaderSimple 1つでモデル・テキストエンコーダー・VAEが全部出てくる。

CheckpointLoaderSimple → MODEL → ModelSamplingSD3 → KSampler → VAEDecode → SaveWEBM
                       → CLIP  → CLIPTextEncode (positive/negative)
                       → VAE   → WanImageToVideo

パラメータ

蒸留モデルなのでステップ数が極端に少ない。

項目
解像度480 x 480
フレーム数33
ステップ4
CFG1
サンプラーeuler_ancestral
スケジューラーbeta

配置先は models/checkpoints/diffusion_models/ ではない)。

結果

Requested to load WAN21
loaded partially; 4906.73 MB usable, 4569.21 MB loaded, 11067.11 MB offloaded
4/4 [00:45<00:00, 11.46s/it]
Prompt executed in 111.41 seconds

14Bモデルのうち4569MBをVRAMに、11067MB(約11GB)をメインメモリにオフロード。4ステップで45秒、全体111秒。

5Bの結果とは段違い。造形の崩れがなく、髪が揺れて口が動いている。アニメーションは控えめだが、入力画像のキャラクターがちゃんと保持されている。

結果の比較

試行モデル設定時間品質
1回目5B fp8480x480 / 30step / CFG 595秒崩れ+動きなし
2回目5B fp8768x480 / 50step / CFG 3.5179秒VAEオフロードで悪化
3回目5B fp8480x480 / 50step / CFG 5114秒崩れ+動き薄い
4回目14B Rapid480x480 / 4step / CFG 1111秒造形維持、髪揺れ+口動く

5Bでステップを増やすより、14B Rapidを4ステップで回すほうが速くて品質も高い。蒸留の威力。

入力画像とプロンプトを変えた例

バニーガール衣装の全身正面画像に差し替えて、プロンプトも変更。

the girl hops in place like a bunny, bouncing up and down playfully,
bunny ear headband bouncing, cheerful jumping motion

ウサギっぽくぴょんぴょん跳ねてほしかったが、そこまでの動きは出なかった。4ステップの蒸留モデルだとプロンプトの細かい指示は通りにくい。ただ入力画像が変われば出力の雰囲気もちゃんと変わるので、画像の選び方が重要。