显存明明还有空余却报 OOM:分配器碎片化与 soft_empty_cache 未回收 / 全站资源搜索
搜索 更新 2026-10-02
报错 017 显存与内存不足(OOM) 含未核实说明

显存明明还有空余却报 OOM:分配器碎片化与 soft_empty_cache 未回收

报错原文(原样)
torch.cuda.OutOfMemoryError: Allocation on device 0 would exceed allowed memory. (out of memory)
Currently allocated     : 18.38 GiB
Requested               : 6.09 GiB
Device limit            : 16.00 GiB
Free (according to CUDA): 0 bytes
PyTorch limit (set by user-supplied memory fraction)
: 17179869184.00 GiB
检索关键词 Free (according to CUDA): 0 bytes、Currently allocated、Device limit、out of memory error but I still have free memory、fragmentation、empty_cache
先看这一句 nvidia-smi 或任务管理器看着还有 1-2GB 空闲显存,ComfyUI 却报 OOM;或者只用简单工作流、什么都没改,某次更新后突然开始 OOM。
适用版本 与版本强相关:issue #1918 为历史回归(维护者称已修);issue #14789 报告 0.27 相对 0.22 出现新 OOM。升级/降级前后行为可能完全不同。 · 核实日期 2026-09-26 · 状态 可能已过期,正在复核
适用环境:Windows 便携版、秋叶/绘世整合包、ComfyUI Desktop、Linux + 云 GPU、Docker/服务器

现象与触发场景

常见触发场景:

  • 同一个工作流在版本升级(如升到 0.27)后开始 OOM,回滚到旧版就正常
  • 反复加载/卸载不同模型后出现 OOM
  • 显存被切成大量小块,请求一个较大的连续块时找不到位置

根因

  • PyTorch 的 CUDA 缓存分配器按块管理显存,长时间混合加载不同尺寸的模型后会产生碎片,虽然总空闲量够,但没有足够大的连续块满足本次请求。
  • ComfyUI 的 soft_empty_cache 只做设备侧 empty_cache 与 ipc_collect,并不整理 CPU 侧分配;issue #10475 中维护者与用户确认过一部分“内存不释放”其实是分配器/堆的保留而非活跃张量。
  • 某些版本存在显存回归:issue #1918 中用户回滚到旧 commit 后显存占用恢复正常,comfyanonymous 回复 “That error is fixed now”,说明这是版本级回归而非用户配置问题。

解决步骤

已按「最可能有效」排序。请从上往下做,每做完一步用「验证」确认,不要一次改五处。

  1. 先判断是不是版本回归:回滚到上一个能用的版本验证
    如果 OOM 是“某次更新后才出现”且工作流没改过,优先怀疑版本回归而不是硬件。用 git 切到旧 commit 或装回旧版便携包跑同一工作流;能跑通即确认为回归,可在 issue 中贴出两版对照,并暂时停留在能用的版本。
    cd ComfyUI
    git log --oneline -20
    git checkout <上一个能用的 commit>
  2. 启用 CUDA 分配器的可扩展段以缓解碎片
    PyTorch 分配器源码/PyTorch 论坛给出的提示原文为使用 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True 来避免碎片化导致的 OOM。该环境变量需要在启动 ComfyUI 之前设置,且必须是进程级环境变量。(该提示原文片段来自搜索结果显示的 PyTorch 分配器报错文案,本次未取回页面全文,[未核实] 未逐版本核对原文措辞。)
    # Windows CMD / bat:
    set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
    # PowerShell:
    $env:PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True"
    # Linux:
    export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
  3. 让 ComfyUI 更积极地清缓存并释放模型
    --disable-smart-memory 强制把模型卸载回普通内存而不是留在显存;--cache-none 每次运行都重新执行节点而不缓存结果,显著降低 RAM/VRAM 占用(代价是变慢)。两者组合是社区对付碎片化 OOM 的常用组合。
    python main.py --disable-smart-memory --cache-none
    python main.py --disable-smart-memory --cache-lru 10

验证是否修好

同一工作流连续跑 5-10 次不再随机 OOM;nvidia-smi 显示 reserved 与 allocated 的差值不再持续增大。

补充说明

issue #1918 的“回滚到 4acfc11a802fad4e90103f9fd3cf73cb0c9b5ae1 后 VRAM 正常”为历史案例,该 commit 号来自用户评论原文,仅作为排查思路参考。expandable_segments 与部分后端(如 cudaMallocAsync)存在交互限制。[未核实] 具体在哪些 torch/后端组合下 expandable_segments 不生效,未逐一验证。

来源

按可信度排列:官方 issue / 官方文档 > 节点仓库 issue > 社区帖 > 中文社区文章。 链接以纯文本给出(本站不做站外跳转),需要核对时请自行复制到浏览器打开。
  1. [51] (官方 issue) torch.cuda.OutOfMemoryError: Allocation on device 0 would exceed allow https://github.com/Comfy-Org/ComfyUI/issues/1918
  2. [52] (官方 issue) out of memory error but I still have free memory · Issue #9121 https://github.com/Comfy-Org/ComfyUI/issues/9121
  3. [53] (官方 issue) Experiencing VRAM OOM with the same workflow after upgrading to ComfyU https://github.com/Comfy-Org/ComfyUI/issues/14789
  4. [6] (官方文档) How to Troubleshoot and Solve ComfyUI Issues - ComfyUI Documentation https://docs.comfy.org/troubleshooting/overview
本条的可靠性边界 下面这些位置带 [未核实] 标记,是采集时没找到一手来源的部分,请自行验证:
  • 第 2 步说明 1
  • 补充说明

这条报错要用到的东西

按本条报错所属的类别(显存与内存不足(OOM))列出站内相关的下载包与板块入口。 它们不是「必须下载才能修好」,而是这一类问题里最常要动到的东西;具体怎么做,以上面的解决步骤为准。

ComfyUI 权重库(167 个文件 / 约 1187 GB)按 ComfyUI 的 models 目录分好类的 167 个权重文件 / 每个文件一份说明(放哪、被哪些工作流引用) 待挂载
权重库同一个模型常有更小的量化版本,换一个能省一大截显存 板块 工作流换一条依赖更轻的工作流 板块

同一类别的其他条目

这个解法对你有效吗 记录只存在你自己的浏览器里,不需要注册账号。

返回报错库