ARES_GPU_Manager
ComfyUI 智能显存管理节点
ComfyUI-ares_gpu_manager
A ComfyUI custom node for smart GPU VRAM management.
- Smart VRAM reservation with manual / auto / smart modes
- Optional VRAM occupy via a separate process, with timed delay and auto-release
- GPU info display (model, temperature, utilization) and cache cleanup before execution
- Reserves memory through ComfyUI's
model_management.EXTRA_RESERVED_VRAMto prevent OOM
中文文档见下方,以下为中文完整说明。
简介
一个用于智能管理 GPU 显存的 ComfyUI 自定义节点,核心节点:
- Ares Smart VRAM Reservation - 动态管理显存预留策略(含 GPU 状态查看与显存清理)
功能特性
三种预留模式
| 模式 | 计算方式 | 适用场景 | 优点 | 缺点 | |------|----------|----------|------|------| | manual | 固定值 | 显存需求稳定 | 简单直接 | 不够灵活 | | auto | 当前使用+缓冲 | 渐进式任务 | 自动适应 | 可能过于保守 | | smart ⭐ | 动态优化 | 通用场景 | 最优平衡 | 略复杂 |
智能模式策略:
可用显存 < 20% → 预留80%(紧张状态)
可用显存 20-40% → 基础预留(中等状态)
可用显存 > 40% → 最小保留(充足状态)
GPU 状态查看
执行时输出当前 GPU 信息:
[GPUMemoryManager] GPU 0 | Model: NVIDIA GeForce RTX 4090 | VRAM: 8.50GB/24.00GB (usage 35.4%, free 15.50GB) | Temp: 65°C | Utilization: 78%
显存清理
执行前可清理 PyTorch CUDA 缓存与 Python 垃圾回收,并报告实际释放的显存(GB/MB)。
占位显存(真正锁住显存)
启动独立进程真占显存,并支持延时占用、到时自动释放,防止 ComfyUI 占满显存卡住:
occupy_delay:节点运行后等待多少秒再开始占用occupy_hold:占用后保持多少秒自动释放,按流的时间线填写
注意: 占用期间该部分显存不可用,生成所需显存若超出上限会报 CUDA OOM,请按实际余量设置。
节点
Ares Smart VRAM Reservation (ReservedMemorySetter)
| 输入 | 类型 | 说明 | 推荐值 |
|------|------|------|--------|
| input | * | 通用输入,透传数据 | - |
| reserved_amount | FLOAT | 预留显存大小 (GB) | 1.0-2.0 |
| mode | COMBO | 工作模式 (smart/auto/manual) | smart |
| gpu_index | INT | GPU 索引 | 0 |
| min_safe_reserve | FLOAT | 最小安全保留 (GB) | 2.0 |
| clear_vram | BOOLEAN | 执行前清理 | False |
| show_gpu_info | BOOLEAN | 显示 GPU 信息 | True |
| occupy_vram | BOOLEAN | 独立进程真占显存 | False |
| occupy_amount | FLOAT | 占用的显存 (GB) | 2.0 (1-4) |
| occupy_delay | FLOAT | 延时多少秒开始占用 | 0 秒 |
| occupy_hold | FLOAT | 占用后多少秒自动释放 | 30 秒 |
输出:output (*)
安装
- 将文件夹放入 ComfyUI 的
custom_nodes目录:
ComfyUI/
└── custom_nodes/
└── ComfyUI-ares_gpu_manager/
├── __init__.py
└── nodes.py
- 安装依赖(可选,用于 GPU 状态监控):
pip install nvidia-ml-py
- 重启 ComfyUI
使用场景
场景1:高分辨率图像生成
- mode: smart
- reserved_amount: 2.0-3.0 GB
- min_safe_reserve: 3.0 GB
场景2:批量处理
- mode: auto
- reserved_amount: 1.0-1.5 GB
- clear_vram: True (每批次前清理)
场景3:多模型切换
- mode: smart
- clear_vram: True (切换时清理)
场景4:开发调试
- mode: manual
- show_gpu_info: True
技术细节
显存计算公式
manual 模式
reserved_memory = max(user_input, min_safe_reserve)
if reserved_memory > total_memory * 0.9:
reserved_memory = total_memory * 0.9
auto 模式
reserved_memory = current_used + buffer
reserved_memory = max(reserved_memory, min_safe_reserve)
reserved_memory = min(reserved_memory, total_memory * 0.85)
smart 模式
available_ratio = free_memory / total_memory
if available_ratio < 0.2:
reserved_memory = total_memory * 0.8
elif available_ratio < 0.4:
reserved_memory = current_used + buffer
else:
reserved_memory = max(current_used + buffer, min_safe_reserve)
reserved_memory = min(reserved_memory, total_memory * 0.9)
预留机制
设置值会写入 ComfyUI 的 model_management.EXTRA_RESERVED_VRAM,让内存管理器在计算可用显存时扣除这部分空间,避免显存不足(OOM)。对应 ComfyUI 启动参数 --reserve-vram。
清理机制
1. torch.cuda.empty_cache() # 清空PyTorch缓存
2. torch.cuda.synchronize() # 同步CUDA操作
3. gc.collect() # Python垃圾回收
注意事项
-
nvidia-ml-py 依赖(提供
pynvml模块)- 未安装时 GPU 信息查询会降级,但基本功能正常
- 推荐安装以获得最佳体验
-
显存预留策略
- 过大:浪费显存
- 过小:可能OOM
- 推荐使用 smart 模式
-
清理时机
- 模型切换前
- 显存不足时
- 工作流开始前
-
多GPU环境
- 注意选择正确的 GPU 索引
故障排查
问题1:无法获取GPU信息
原因: nvidia-ml-py未安装或初始化失败
解决: pip install nvidia-ml-py
问题2:设置后仍然OOM
原因: 预留值设置过小
解决: 增加预留大小或使用 smart 模式
问题3:清理效果不明显
原因: 显存已被模型占用
解决: 开启 clear_vram 参数
更新日志
v2.2 (当前版本)
- 修复预留显存设置失效问题(
EXTRA_RESERVED_MEMORY→EXTRA_RESERVED_VRAM) - 移除冗余节点(GPU显存监控、批量显存清理、VRAM Trigger),功能合并到智能显存预留节点
- 新增占位显存功能:独立进程真占显存,支持延时占用、到时自动释放
v2.0
- 线程安全的单例模式
- 专业日志系统
- 完善的类型注解
- GPU索引验证
- 详细GPU信息(型号、温度、利用率)
- 智能策略优化
- 增强错误处理
- 自动资源清理
v1.0
- 基础显存预留功能
- 三种工作模式
- 简单清理功能
作者
SuperWJ062