本页介绍 ComfyUI 如何管理内存(包括 VRAM 和 RAM),以适应从高端 GPU 到具有有限或无专用图形内存的系统等各种硬件能力。有关模型修补和模型系统架构的信息,请参阅模型系统。
ComfyUI 根据可用资源使用不同的 VRAM 管理策略。系统会自动检测 GPU 内存并选择适当的状态,但这可以通过命令行参数进行覆盖。
来源:comfy/model_management.py29-36 comfy/model_management.py355-365 comfy/model_management.py696-718 comfy/cli_args.py122-128
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
CPUState 枚举定义了主要的计算设备。
来源:comfy/model_management.py37-41
ComfyUI 通过一个复杂的系统来管理模型,该系统跟踪已加载的模型及其内存使用情况。
来源:comfy/model_management.py397-494 comfy/model_management.py563-637 execution.py438-555 main.py151-212
来源:comfy/model_management.py563-637 comfy/model_management.py618-630
加载模型的主要函数是 load_models_gpu(),该函数会:
来源:comfy/model_management.py553-627
ComfyUI 实施了几种高级技术来优化模型执行期间的内存使用。
来源: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 中:
实现上会优先将小型、频繁使用的模型保留在 VRAM 中,而将大型、不常用模型卸载。
free_memory() 函数实现了一种复杂的卸载策略。
来源:comfy/model_management.py526-561
ComfyUI 为其他应用程序和系统开销预留了一部分 VRAM。
内存预留常量根据操作系统定义。
来源:comfy/model_management.py512-524
ComfyUI 支持多种精度选项,以平衡性能、内存使用和输出质量。
| 精确率 | 比特 | 内存使用 | 最佳用途 | 配置标志 |
|---|---|---|---|---|
| FP32 | 32 位 | 100% | 最高精度,旧款 GPU | --fp32-unet |
| FP16 | 16 位 | 50% | 现代 NVIDIA GPU | --fp16-unet |
| BF16 | 16 位 | 50% | 比 FP16 具有更好的数值稳定性 | --bf16-unet |
| FP8 | 8 位 | 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 会在多个层面仔细追踪内存使用情况
LoadedModel 类提供了内存追踪方法
来源: comfy/model_management.py431-444
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
也可以通过 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
| 硬件 | 显存 | 推荐设置 |
|---|---|---|
| 高端 GPU | 24GB+ | 为获得最大速度,请使用 --highvram |
| 中端 GPU | 12-16GB | 默认设置效果良好 |
| 消费级 GPU | 8GB | 使用 --lowvram 并选择合适的模型大小 |
| 低端 GPU | 4-6GB | 使用 --novram 并使用更小的模型 |
| 仅 CPU | 不适用 | 使用 --cpu(预计性能会显著下降) |
来源: 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 系统到资源有限的普通计算机。