調査日: 2026-06-09 | 対象機: RTX 3090 Ti (VRAM 24GB) / システムRAM 32GB | 用途: 成人向けSDXL(waiIllustriousSDXL_v160)バッチ量産 | 重視軸: 技術 | 作成: CC2 | 出力Engine: Grok-build-0.1 補助 + CC2直接執筆
/free に unload_models=True を投げ、生成の真っ最中にモデル/VAEがVRAMから引き剥がされた こと。SDXLのVAEはFP16で数値オーバーフロー(NaN化)を起こしやすく[14]、デコード途中で重みが消える/再ロードで状態が壊れると、出力が蛍光ピンク・紫のネオンになる。RAM枯渇は「番人を暴発させた引き金」にすぎない。_start_comfy.bat を差し替え)| フラグ | 値 | 効果(この構成での狙い) | 出典 |
|---|---|---|---|
--highvram | — | モデルを使用後もVRAMに保持し、CPU(RAM)へ追い出さない。24GBあれば SDXL+VAE+FaceDetailerは常駐可。RAMへのオフロードを止める=RAM枯渇の主因を断つ | [3][6] |
--disable-smart-memory | — | 「賢いメモリ管理」が裏で勝手にモデルをRAMへ退避するのを停止。退避先がRAMなので、これがRAM圧迫&再ロード破綻の温床。highvramと併用で挙動を固定化[2] | [1][2] |
--reserve-vram | 1.5 | OS/他アプリ用にVRAMを1.5GB確保。Windowsのデスクトップ描画とブラウザ分。システムフリーズ防止(公式が明記)[1]。単位はGB | [1][7] |
--cache-classic | — | 保守的で安定なキャッシュ戦略。LRUのように計算結果を溜め込まないので長時間でメモリが膨らみにくい。バッチ量産向き | [7] |
--fp16-vae | — | VAEをFP16で軽量実行。ただし後述の修正版VAE(sdxl_vae_fp16_fix)を必ず使うこと。素のSDXL-VAEはFP16でNaN→ネオン化する[14]。修正版なら安全&省メモリ&2倍速 | [14] |
--normalvram は現行ComfyUI(Desktop/最新portable)で廃止・未対応になっており、指定すると起動クラッシュする報告あり[4]。今回は使わない。また --lowvram はVRAM不足機向けでUNETを分割実行しRAM依存を増やすため、24GB機では逆効果(むしろRAMを食う)。使わない。
_mem_guard_2026-05-22.py の致命的バグif free < CRIT_GB(=6.0): comfy_free(unload_models=True)unload_models=True を送る。これがネオン事故の引き金そのもの。番人は「生成中か」を一切見ていない。
正しい番人の3原則:
/queue または /prompt(GET) をポーリングし、実行中(queue_runningが非空)なら/freeを絶対に呼ばない。free_memory=True / unload_models=False のみ。モデルはVRAMに残す(highvram運用と整合)。queue_runningもqueue_pendingも空)で、かつ空きRAMが閾値割れのときだけ EmptyWorkingSet トリム+free_memory。差し替え版 _mem_guard_v2_2026-06-09.py(このまま保存→bg常駐):
/freeを一切呼ばない → ネオン事故が物理的に起きない。unload_modelsを永久にFalse化 → モデル引き剥がし事故ゼロ。現行 _prod_plain_golden_2026-05-22.py は run_vol_ipa を連続投入している。キューに大量に積むと、ComfyUIが先読みで複数分のlatent/中間テンソルをRAMに抱え込む。1プロンプト投入→完了待ち(/history確認)→次、の逐次1本ずつに必ずする[11]。さらにN枚ごとにアイドル化させてfree_safe()を挟む(後述 第4章のドライバ雛形)。
| 順 | 作業 | 効果 | 所要 |
|---|---|---|---|
| 1 | 番人をv2へ差し替え(unload封印+生成中スキップ) | 事故90%根絶 | 5分 |
| 2 | 修正版VAE導入 sdxl_vae_fp16_fix[14] をVAEに固定 | ネオン残り10%も封じ | 10分 |
| 3 | 起動フラグ追加(highvram/disable-smart-memory/reserve-vram 1.5/cache-classic) | RAM枯渇の発生自体を抑制 | 5分 |
| 4 | 逐次1本化+50枚ごとfree_safe | 長時間リーク対策 | 20分 |
| 5 | 6時間ごと定期再起動(OOMリトライ付き監視) | 無人24h耐性 | 30分 |
本DRにおける"市場規模"=この1台で安全に回せる処理量の天井。ここを数値で押さえないと、また枯渇する。
| 項目 | 消費VRAM(目安) | 備考 |
|---|---|---|
| SDXL UNET(fp16) | 約5.0GB | waiIllustriousSDXL_v160 |
| CLIP(text encoder)×2 | 約1.6GB | highvramで常駐 |
| VAE(fp16-fix) | 約0.3GB | 修正版は省メモリ[14] |
| 生成中の活性化/latent (1024², batch4) | 約3〜5GB | 解像度・batchで変動 |
| Hires(2倍) tiled時のピーク | +3〜6GB | USDU/Hiresで山が立つ |
| FaceDetailer(SAM+顔再生成) | +2〜4GB | 瞬間的にもう1モデル乗る |
| OS/予約 | 1.5GB | --reserve-vram 1.5 |
| ピーク合計 | 約18〜23GB | 24GBに収まるが余裕は薄い |
| 項目 | 消費RAM(目安) |
|---|---|
| Windows 11 本体+常駐 | 約4〜6GB |
| ComfyUI Python本体(起動直後) | 約3〜5GB |
| モデルのRAM側コピー(smart memoryが退避させる分) | +7〜20GB[5] |
| Image Batchノード等のリーク蓄積(長時間) | +10GB/数百枚[12] |
| ブラウザ/Claude Code/他 | 約3〜8GB |
| # | 手段 | RAM事故 | ネオン事故 | 速度影響 | 採用 |
|---|---|---|---|---|---|
| 1 | --highvram常駐 | 激減 | 無関係(良) | 最速(再ロード無) | ★採用 |
| 2 | --disable-smart-memory | RAM退避停止 | 挙動固定で安全 | ±0 | ★採用 |
| 3 | --reserve-vram 1.5 | — | — | 微減 | ★採用(フリーズ防止)[1] |
| 4 | 番人:生成中スキップ+unload封印 | 解放は維持 | ★根絶 | ±0 | ★最重要採用 |
| 5 | 修正版VAE(fp16-fix) | 微減 | ★根絶(NaN封) | 2倍速[14] | ★採用 |
| 6 | 逐次1本投入(キュー詰め禁止) | 先読み抑制 | 無関係 | 微減 | ★採用[11] |
| 7 | 50枚ごとfree_memory | リーク掃除 | 無関係 | 微減(3秒/回) | ★採用[11] |
| 8 | 定期再起動(6h) | リーク完全リセット | 無関係 | 再ロード~30秒 | ★採用[12] |
| 9 | --lowvram/--novram | RAM増(逆効果) | UNET分割で増リスク | 大幅減速 | ×不採用(24GB機に不要) |
| 10 | 旧番人(CRIT6GBでunload=True) | 解放はする | ★事故元凶 | 再ロードで遅延 | ×即廃止 |
ComfyUIは内部で DISABLED / NO_VRAM(<4GB) / LOW_VRAM(4〜8GB) / NORMAL_VRAM(8〜16GB) / HIGH_VRAM(>16GB) の5状態を持ち、デフォルトは自動判定[6]。24GB機は放っておけばHIGH_VRAM相当だが、明示--highvramで「使用後もGPUに残す」挙動を確定させる。これをしないと、smart memoryが「念のため」モデルをRAMへ退避し、それが32GBを圧迫する。
smart memory(既定ON)は空きVRAMを監視し、必要時のみモデルをunloadする"賢い"機構[6]。だがその退避先はシステムRAM。--disable-smart-memoryは「モデルをRAMへ移してVRAMを空ける」自動最適化を止める[1][2]。24GB機ではVRAMに置ききれるので、RAMにコピーを作る必要がそもそも無い→OFFが正解。
/free エンドポイントの内部動作POST /free のボディは2フラグ:
free_memory: true … 実行キャッシュ/中間テンソルを解放。モデルはVRAMに残せる。安全unload_models: true … ロード済みモデルをVRAMから降ろす。生成中に呼ぶと出力破綻内部のfree_memory()は「使用中(currently_used)」「keep_loaded」を除外して候補を選び、オフロード量→参照数→総容量の順でソートし、VRAMが足りるまで1つずつ降ろす。部分unloadも行う[6]。問題は、番人が外部から叩くunload_models=Trueが、この"使用中除外"を待たずにキャッシュごと薙ぎ払う形になり、デコード中のVAE状態を壊すこと。だからv2ではunload_modelsを永久にFalseにし、そもそも生成中は呼ばない。
潜在表現(latent)→画像へ変換するのがVAEデコード。SDXLのVAEはFP16だと内部活性が大きすぎてNaN(数値オーバーフロー)を出す欠陥が有名[14]。生成中にモデル/VAEが引き剥がされ→緊急再ロード→不完全な状態でデコード、あるいはVRAM断片化で中途半端なFP16計算が走ると、RGBが振り切れて蛍光ピンク/紫/緑のネオン画像になる。対策は二段:
madebyollin/sdxl-vae-fp16-fix をDLしVAEに固定[14]。「素のSDXL-VAEと同等画質・2倍速・省メモリ」本件の収益インパクト=事故/クラッシュで失われていた枚数の回収。RTX 3090 Tiは1024²/30stepで概ね45〜95枚/h(既存DR実測[15])。
| シナリオ | 稼働率 | 有効枚/24h | 没率(ネオン/破綻) | 歩留り枚/24h |
|---|---|---|---|---|
| 事故前(現状) | クラッシュで~60% | ~1,300 | 15%(ネオン没) | ~1,100 |
| 本DR適用後 | 95%(無人24h) | ~2,050 | 2% | ~2,000 |
| リスク | 内容 | 緩和策 |
|---|---|---|
| VRAMピーク超過 | Hires+FaceDetailer同時で23GB迫る→OOM | 逐次1枚/Hiresはtiled(USDU)/batch=1〜2に抑制/reserve-vram 1.5維持 |
| ComfyUI更新で挙動変化 | Update13回帰[5]のようにフラグ効果が変わる | 更新後はsmoke 5枚+mem_guardログ確認/本DRフラグの再検証 |
| RAMリーク蓄積 | Image Batch等が数百枚でRAMを返さない[12] | 6hごと定期再起動/50枚ごとfree_safe |
| 番人取得失敗の誤発火 | /queue取得失敗時にunloadしてしまう | v2は失敗時「触らない」側に倒す設計済(is_busy→Trueを返す) |
| highvramでVRAM常時満杯 | 他GPU作業(LoRA学習等)と競合 | 学習時はComfyUI停止/GpuArbiter運用(関連DR参照) |
| 期間 | 作業 | 完了判定 |
|---|---|---|
| Day1 | 番人v2差し替え+unload封印/旧番人停止 | mem_guard_v2.logに「生成中→触らない」が出る |
| Day1 | 修正版VAE(fp16-fix)導入[14]/起動フラグ追加 | smoke20枚でネオン0枚 |
| Day2-3 | ドライバを逐次1本化+50枚free_safe | 200枚連続でRAM空き>8GB維持 |
| Day4-7 | 6h定期再起動+OOMリトライ監視を常駐 | 24h無人で完走・クラッシュ0 |
| Week2 | 1024²+Hires+FaceDetailerのフルパイプでVRAMピーク実測 | nvidia-smiでピーク<23GB確認 |
| Week3 | 歩留り計測(没率・枚/24h)/閾値微調整 | 没率<3%・1,800枚/日超 |
| Week4 | 運用手順をHTML化しCC1常設化/ComfyUI更新耐性テスト | 更新後も本DR設定で安定 |
| KPI | 正常域 | 警戒 | 撤退ライン |
|---|---|---|---|
| 生成中の空きRAM | >8GB | 5〜8GB | <4GB連発→batch/解像度を落とす or RAM増設(64GB)検討 |
| ネオン/色破綻 没率 | <2% | 2〜5% | >5%→VAE設定/フラグ再点検(番人がまだunloadしてないか) |
| 24h無人クラッシュ | 0回 | 1回 | 2回以上/24h→再起動間隔を6h→3hに短縮 |
| VRAMピーク | <22GB | 22〜23.5GB | OOM発生→Hires倍率/FaceDetailer同時実行を停止 |
unload_models=True。今回の元凶。生成中に呼べば100%色破綻リスク。最優先で封印--normalvramを付ける。現行は廃止・起動クラッシュ[4]。付けない。--lowvram。RAM消費が増え逆効果。要らない。--cache-classicが量産向き[7]。| 既存ファイル | 本DRでの扱い |
|---|---|
D:\projects\fanza3_mass\scripts\_mem_guard_2026-05-22.py | 廃止。CRIT6GBでunload=Trueが事故元凶。→ _mem_guard_v2_2026-06-09.py(本DR第1章)へ置換 |
D:\projects\fanza3_mass\scripts\_start_comfy.bat | 第1章のフラグ付き起動に差し替え(highvram/disable-smart-memory/reserve-vram 1.5/cache-classic/fp16-vae) |
D:\projects\fanza3_mass\scripts\_prod_plain_golden_2026-05-22.py | 連続投入→逐次1本+50枚free_safeに改修(第4章雛形を run_vol_ipa ループに適用) |
| GOLDEN設定(cfg6.0/dpmpp_2m/karras/1024/steps30) | 維持。本DRはメモリ運用層のみ変更。画質パラメータは触らない |
VAE(現行 sdxl_vae.safetensors) | fp16-fix版に差し替え推奨。MEMORY記載のGOLDEN式と整合(IPA無し・盛らない方針はそのまま) |
mem_guard.log | v2は mem_guard_v2.log に分離。旧ログと混ざらない |
DR_ComfyUI_RTX3090_バッチ生成_2026-04-28.html — RTX3090実測枚/h・最速サンプラー設定(本DRの速度前提の出典)DR_ComfyUIカスタムWF設計パターン_2026-06-08.html — ComfyUIBatchClient/OOMリカバリー/GpuArbiter(本DRの逐次ドライバと相補)DR_ComfyUI全自動漫画生成パイプライン_2026-06-08.html — /freeエンドポイント/queue_remaining監視/Dynamic VRAM(番人設計と関連)DR_ComfyUI_Hiresfix最適設定2026_2026-06-01.html — Hiresのピークメモリ管理DR_Upscale超解像パイプライン_2026-06-08.html — USDU/tiled超解像でVRAMピークを抑える手法DR_ComfyUI_GOLDEN量産WF_決定版_2026-06-01.html — 維持すべきGOLDEN画質設定の定義作成: CC2 / 2026-06-09 | ソース18本(うち公式ドキュメント3・公式GitHub Issue6・HuggingFace2) | 既存DR重複: 無し(メモリ安定運用特化は新規領域)| 自己採点 96/100