一、OOM 故障类型识别与日志特征
根据 ComfyUI 终端日志,显存溢出分为 3 类,根因完全不同,优先定位故障类型:
- 模型加载阶段 OOM日志特征:模型加载过程直接抛出 CUDA 内存不足。 根因:权重静态显存超出 GPU 物理显存,未启用量化、BlockSwap 模型分片卸载;文本编码器 T5-XXL 常驻显存占用过高。
- 扩散降噪中途 OOM(最常见)日志特征:模型加载成功,降噪迭代到第 N 步时报错。 根因:KV 缓存持续累积、视频潜序列激活张量膨胀,显存峰值突破上限;默认 SDPA 注意力机制内存开销大。
- VAE 解码瞬时 OOM日志特征:全部降噪步骤跑完,进入 VAE 潜空间转 RGB 帧阶段瞬间溢出。 根因:VAE 启用全局一次性解码,长帧序列的潜张量一次性送入显存,无分片 Tiled 解码。
日志排查命令,查看显存占用与 GPU 进程 PID
nvidia-smi
通过 PID 定位占用 GPU 显存的进程,用于清理残留显存占用。
二、前置环境清理:显存碎片与残留进程释放
PyTorch CUDA 存在显存碎片问题,重复推理后显存不会自动完整回收,即使关闭工作流,Python 进程仍持有显存缓冲区。所有 OOM 排查第一步必须执行环境清理。
2.1 进程强制终止
Windows 终端:
# 强制结束所有python进程,释放GPU显存 taskkill /F /IM python.exe
Linux 环境:
# 杀死占用GPU的python进程 fuser -v /dev/nvidia* | awk '{print $1}' | xargs kill -9
2.2 PyTorch 缓存清空代码
import torch # 清空cuda缓存,释放未回收显存碎片 torch.cuda.empty_cache() import gc gc.collect()
2.3 系统环境变量优化(降低显存碎片化)
启动 ComfyUI 前设置环境变量,优化 CUDA 内存分配策略,减少碎片:
# Windows CMD set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:128 # Linux / Mac export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:128
expandable_segments开启动态分段显存分配,避免一次性申请大块连续显存导致分配失败,是低配显卡必开配置。
配套操作:关闭后台占用 GPU 程序,浏览器、剪映、SD 绘图软件全部退出;ComfyUI 界面点击
Unload Models手动卸载模型权重。
三、模型量化策略:削减静态权重显存(核心方案)
量化是降低基础显存开销最高效手段,Wan2.2-ReMixV3.0 针对漫剧人脸一致性做了微调,量化选型需要权衡显存开销与画面质量。
表格
| 量化方案 | 静态显存压缩率 | 画质损失 | 适用显卡 | 说明 |
| FP8 E4M3FN 量化(网盘提供) | 50% | 极低,漫剧人脸、动作稳定性基本无损 | 12GB、16GB、24GB | 推荐首选方案,原生 safetensors 权重,GPU 原生支持 FP8 计算 |
| GGUF Q5_K_M | 62% | 轻微损失,面部细节轻微模糊 | 8GB/12GB | 极限低配方案,适合仅做测试,量产漫剧不推荐 |
| FP16 原生权重 | 0 | 无 | ≥24GB | 消费级显卡不推荐,显存峰值极易爆炸 |
❌避坑:不要直接使用 Q4 量化,会造成漫剧人物面部崩坏、动作抖动严重,只适合静态图片测试,不适合漫剧连续帧生成。
FP8 模型加载节点配置:ComfyUI Wan 模型 Loader,权重路径选择 FP8 目录,精度字段填写fp8。
四、推理参数优化:控制峰值显存(显存最大消耗项)
视频生成显存占用与分辨率、总帧数呈现非线性增长,帧数是显存峰值第一影响因子。
推荐漫剧工程参数
# Wan2.2 I2V 图生视频推理参数(AI漫剧专用) width = 720 height = 480 num_frames = 24 sampling_steps = 28 cfg_scale = 6.5
- 不建议一次性生成 48 帧以上长片段,长漫剧镜头采用分段生成 + ffmpeg 拼接策略,每段 24 帧,规避长序列 KV 缓存溢出。
- 8GB 显卡极限配置:
width=480 height=320 num_frames=16,仅用于小样测试。
五、模型分片卸载与注意力内核优化
5.1 BlockSwap 模块 CPU 卸载(低配显卡核心技术)
Wan2.2-ReMixV3.0 共 40 个 Transformer Block,BlockSwap 可以将空闲模型层交换到系统内存 RAM,仅保留当前计算 Block 在 GPU 显存,大幅压低显存基线。 ComfyUI 启动命令(开启 CPU 卸载 + 自动卸载)
python main.py --enable-cpu-offload --auto-unload
注意:开启 BlockSwap 会小幅降低推理速度,需要保证系统内存充足,建议内存≥32GB;8GB 显卡建议 64GB 系统内存,并调高虚拟内存分页文件至 60GB。
5.2 SageAttention 注意力替换
将原生scaled_dot_product_attention(SDPA)替换为 SageAttention 内核,对 QK 矩阵做量化计算,在不损失画面的前提下,减少 Attention 计算过程中间张量显存占用。
工作流节点配置:attention mode:
sageattn适配:RTX40 系、RTX50 系显卡;30 系显卡兼容但加速效果下降。
5.3 Tiled VAE 分片解码,解决 VAE 阶段 OOM
开启 Tiled VAE,把潜序列分块送入 VAE 解码,避免一次性加载全部视频潜张量。 节点参数:enable_tiled_vae = True,tile_size=256。专门解决降噪跑完、解码瞬间 OOM。
六、硬件显存适配边界总表
表格
| GPU 显存 | 推荐量化 | 分辨率 / 帧数 | 必开优化项 | 适用场景 |
| 8GB | GGUF Q5_K_M | 480×320,最多 16 帧 | BlockSwap + SageAttn + TiledVAE,全模块 CPU offload | 小样测试,不适合批量漫剧生产 |
| 12GB | FP8 | 480P,24 帧 | BlockSwap + SageAttn + TiledVAE | 小规模漫剧测试,镜头短片段生成 |
| 16GB+ | FP8 | 720×480,24 帧 | SageAttn + TiledVAE,可选 BlockSwap | AI 漫剧主力生产环境,兼顾画质与稳定性 |
| 24GB 及以上 | FP8/FP16 | 720P,最多 32 帧 | TiledVAE | 批量流水线生成 |
七、工程化踩坑与隐性 OOM 诱因(很多文档忽略)
- 文件路径禁止中文、空格、特殊字符中文路径会增加权重加载时的 IO 缓存开销,额外占用显存,极端场景直接触发 OOM。模型、工作流、输入图全部放在纯英文路径。
- LoRA 叠加控制VBVR-LoRA、人物一致性 LoRA 叠加数量不要超过 1 个;多个 LoRA 同时加载,会额外占用显存,造成峰值溢出。
- 连续推理显存累积连续生成多条视频,即使单条参数正常,显存碎片持续堆积,建议每生成 3 条漫剧视频,重启一次 ComfyUI 服务,释放全部缓存。
- 虚拟内存(页面文件)配置Windows 用户如果使用 BlockSwap,必须手动设置页面文件,自动管理页面文件过小会导致 RAM 交换失败,进程卡死。推荐自定义页面文件最小 32GB,最大 64GB。
八、故障快速自检清单(用于快速定位 OOM)
✅ 终端执行 nvidia-smi 确认 GPU 空闲显存,排除其他进程占用 ✅ 确认模型为 FP8 量化版本,而非原生 FP16 权重 ✅ 环境变量PYTORCH_CUDA_ALLOC_CONF已配置 expandable_segments ✅ 开启 SageAttention 与 Tiled VAE ✅ 帧数、分辨率没有超过显卡上限 ✅ 模型路径无中文字符 ✅ 未同时加载多个 LoRA
九、资源获取与项目声明
模型权重、ComfyUI 工作流 json、一键推理脚本、显存监控工具、完整排查文档打包下载: 夸克网盘:https://pan.quark.cn/s/d2bd44e26bb1