菜单

内存管理

相关源文件

本页介绍 ComfyUI 如何管理内存(包括 VRAM 和 RAM),以适应从高端 GPU 到具有有限或无专用图形内存的系统等各种硬件能力。有关模型修补和模型系统架构的信息,请参阅模型系统

VRAM 状态和内存检测

ComfyUI 根据可用资源使用不同的 VRAM 管理策略。系统会自动检测 GPU 内存并选择适当的状态,但这可以通过命令行参数进行覆盖。

VRAM 状态机

来源:comfy/model_management.py29-36 comfy/model_management.py355-365 comfy/model_management.py696-718 comfy/cli_args.py122-128

VRAM 状态

ComfyUI 在 VRAMState 枚举中定义了几种 VRAM 状态,以适应不同的硬件配置。

状态管理描述行为
禁用不存在 VRAM所有操作都在 CPU 上执行
NO_VRAM (无 VRAM)极低的 VRAM (<4GB)极致内存优化技术
LOW_VRAM (低 VRAM)有限的 VRAM (4-8GB)模型拆分和部分加载
NORMAL_VRAM (普通 VRAM)标准 VRAM (8-16GB)按需加载/卸载模块
HIGH_VRAM (高 VRAM)充裕的 VRAM (16GB+)将所有模型保留在 VRAM 中
共享共享 CPU/GPU 内存集成显卡的特殊处理

来源:comfy/model_management.py29-36 comfy/model_management.py42-46

CPU 状态

CPUState 枚举定义了主要的计算设备。

来源:comfy/model_management.py37-41

模型加载系统

ComfyUI 通过一个复杂的系统来管理模型,该系统跟踪已加载的模型及其内存使用情况。

内存管理类架构

来源:comfy/model_management.py397-494 comfy/model_management.py563-637 execution.py438-555 main.py151-212

load_models_gpu() 函数流程

来源:comfy/model_management.py563-637 comfy/model_management.py618-630

加载模型的主要函数是 load_models_gpu(),该函数会:

  1. 计算请求模型所需的总内存
  2. 检查是否有足够的 VRAM
  3. 如果不足,则尝试通过卸载其他模型来释放内存
  4. 使用适合当前 VRAM 状态的策略加载模型
  5. 对于 LOW_VRAM 模式,它会根据可用内存计算模型可以加载的量

来源:comfy/model_management.py553-627

内存优化技术

ComfyUI 实施了几种高级技术来优化模型执行期间的内存使用。

模型拆分(低 VRAM 模式)

模型部分加载策略

来源:comfy/model_management.py446-484 comfy/model_management.py625-630

LOW_VRAM 模式下的关键计算确定了模型可以加载多少。

其中,非 NVIDIA 设备上 MIN_WEIGHT_MEMORY_RATIO = 0.4,NVIDIA 设备上为 0.0,而 minimum_inference_memory() 返回 (1024 * 1024 * 1024) * 0.8 + extra_reserved_memory()

来源:comfy/model_management.py618-630 comfy/model_management.py277-279 comfy/model_management.py523-524

智能内存管理

智能内存管理根据以下因素决定哪些模型保留在 VRAM 中:

  1. 当前正在执行的节点
  2. 模型大小与可用内存的比例
  3. 访问模式(最近使用的模型)

实现上会优先将小型、频繁使用的模型保留在 VRAM 中,而将大型、不常用模型卸载。

free_memory() 函数实现了一种复杂的卸载策略。

来源:comfy/model_management.py526-561

内存预留

ComfyUI 为其他应用程序和系统开销预留了一部分 VRAM。

内存预留常量根据操作系统定义。

来源:comfy/model_management.py512-524

数据类型和精度

ComfyUI 支持多种精度选项,以平衡性能、内存使用和输出质量。

精度选项

精确率比特内存使用最佳用途配置标志
FP3232 位100%最高精度,旧款 GPU--fp32-unet
FP1616 位50%现代 NVIDIA GPU--fp16-unet
BF1616 位50%比 FP16 具有更好的数值稳定性--bf16-unet
FP88 位25%实验性,支持最新的 GPU--fp8_e4m3fn-unet

来源:comfy/cli_args.py58-82 comfy/model_management.py713-761

特定于设备的精度选择

系统可以为不同的模型组件使用不同的精度。

来源:comfy/model_management.py713-834 comfy/model_management.py447-452

内存管理器实现

内存管理架构围绕跟踪哪些模型已加载以及管理它们在设备之间的移动。

核心内存管理功能

来源: comfy/model_management.py407-494 comfy/model_management.py563-640 server.py516-549 server.py690-699

内存使用情况追踪

ComfyUI 会在多个层面仔细追踪内存使用情况

  1. 总可用内存 - 启动时检测到的 GPU/CPU 内存
  2. 模型内存 - 内存中模型权值的大小
  3. 已加载内存 - 模型当前已加载的部分
  4. 显存分页内存 - 完全加载模型所需的内存量

LoadedModel 类提供了内存追踪方法

来源: comfy/model_management.py431-444

prompt_worker() 中的内存管理

prompt_worker() 中的主执行循环在两次提示执行之间管理内存

来源: main.py151-212

配置选项

命令行参数

内存管理系统可以通过各种命令行参数进行配置

参数描述
--highvram将所有模型保留在显存中以获得最大速度
--normalvram默认行为,按需加载/卸载
--lowvram分割模型以使用更少的显存
--novram极端内存优化
--cpu对所有操作使用 CPU(速度慢)
--reserve-vram X为其他应用程序预留 X GB 显存
--disable-smart-memory禁用智能内存管理

来源: comfy/cli_args.py119-133 comfy/model_management.py357-360

Web API 端点

也可以通过 HTTP API 进行内存管理

ComfyUI 通过 HTTP 端点公开内存管理功能

POST /free
{
    "unload_models": true,  // Sets flag for prompt_queue.set_flag("unload_models", true)
    "free_memory": true     // Sets flag for prompt_queue.set_flag("free_memory", true)
}

GET /system_stats
// Returns JSON with:
// - system.ram_total, system.ram_free (from get_total_memory(cpu_device))  
// - devices[].vram_total, devices[].vram_free (from get_free_memory(device))
// - devices[].torch_vram_total, devices[].torch_vram_free

来源: server.py516-549 server.py690-699

内存管理最佳实践

硬件特定建议

硬件显存推荐设置
高端 GPU24GB+为获得最大速度,请使用 --highvram
中端 GPU12-16GB默认设置效果良好
消费级 GPU8GB使用 --lowvram 并选择合适的模型大小
低端 GPU4-6GB使用 --novram 并使用更小的模型
仅 CPU不适用使用 --cpu(预计性能会显著下降)

内存优化技巧

  1. 模型选择:根据您的硬件选择合适的模型大小
  2. 批次大小:减小批次大小以降低内存需求
  3. 图像分辨率:较低的分辨率需要更少的内存
  4. 采样步数:随着时间推移,较少的步数会占用更少的内存
  5. 精度:在质量允许的情况下,使用较低的精度
  6. 工作流复杂度:简化工作流以减少内存需求

来源: comfy/model_management.py618-625 comfy/model_management.py331-347

执行过程中的内存流

来源: main.py151-212 execution.py270-433 comfy/model_management.py563-637 comfy/model_management.py446-484

通过提供灵活的内存管理策略,ComfyUI 使 Stable Diffusion 工作流能够在各种硬件上运行,从高端 GPU 系统到资源有限的普通计算机。