add auto mode(default)

Signed-off-by: windecay <4453636@qq.com>
This commit is contained in:
windecay
2025-10-10 11:06:18 +08:00
parent 0d426e2806
commit 7059556412
2 changed files with 53 additions and 5 deletions
+52 -5
View File
@@ -1,6 +1,30 @@
from typing import Any as any_type
from comfy import model_management
# 尝试导入pynvml库,如果没有安装则提供相应提示
try:
import pynvml
pynvml_installed = True
pynvml.nvmlInit()
except ImportError:
pynvml_installed = False
print("警告:未安装pynvml库,auto选项将不可用。")
def get_gpu_memory_info():
"""获取GPU显存信息"""
if not pynvml_installed:
return None, None
try:
handle = pynvml.nvmlDeviceGetHandleByIndex(0)
memory_info = pynvml.nvmlDeviceGetMemoryInfo(handle)
total = memory_info.total / (1024 * 1024 * 1024) # 转换为GB
used = memory_info.used / (1024 * 1024 * 1024) # 转换为GB
return total, used
except Exception as e:
print(f"获取GPU信息出错: {e}")
return None, None
class AlwaysEqualProxy(str):
def __eq__(self, _):
return True
@@ -8,6 +32,7 @@ class AlwaysEqualProxy(str):
def __ne__(self, _):
return False
any_type = AlwaysEqualProxy("*")
class ReservedVRAMSetter:
@classmethod
def INPUT_TYPES(s):
@@ -18,8 +43,12 @@ class ReservedVRAMSetter:
"default": 1.0,
"min": 0.6,
"step": 0.1,
"display": "reserved (GB)"
"display": "reserved (GB)"
}),
"mode": (["manual", "auto"], {
"default": "auto",
"display": "Mode"
})
},
"hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"}
}
@@ -29,9 +58,27 @@ class ReservedVRAMSetter:
OUTPUT_NODE = True
FUNCTION = "set_vram"
CATEGORY = "VRAM"
def set_vram(self, anything, reserved, unique_id=None, extra_pnginfo=None):
model_management.EXTRA_RESERVED_VRAM = int(reserved * 1024 * 1024 * 1024)
print(f'set EXTRA_RESERVED_VRAM={reserved}GB')
def set_vram(self, anything, reserved, mode="auto", unique_id=None, extra_pnginfo=None):
if mode == "auto":
if pynvml_installed:
total, used = get_gpu_memory_info()
if total and used:
# 自动计算预留显存:使用当前已用显存+reserved设置值作为预留值
auto_reserved = used + reserved
model_management.EXTRA_RESERVED_VRAM = int(auto_reserved * 1024 * 1024 * 1024)
print(f'set EXTRA_RESERVED_VRAM={auto_reserved:.2f}GB (自动模式: 总显存={total:.2f}GB, 已用={used:.2f}GB)')
else:
model_management.EXTRA_RESERVED_VRAM = int(reserved * 1024 * 1024 * 1024)
print(f'set EXTRA_RESERVED_VRAM={reserved}GB (自动模式失败,使用手动值)')
else:
model_management.EXTRA_RESERVED_VRAM = int(reserved * 1024 * 1024 * 1024)
print(f'set EXTRA_RESERVED_VRAM={reserved}GB (pynvml未安装,auto选项不可用)')
else:
# 手动模式
model_management.EXTRA_RESERVED_VRAM = int(reserved * 1024 * 1024 * 1024)
print(f'set EXTRA_RESERVED_VRAM={reserved}GB (手动模式)')
return (anything,)
NODE_CLASS_MAPPINGS = {
@@ -39,4 +86,4 @@ NODE_CLASS_MAPPINGS = {
}
NODE_DISPLAY_NAME_MAPPINGS = {
"ReservedVRAMSetter": "Set Reserved VRAM(GB) ⚙️"
}
}
+1
View File
@@ -0,0 +1 @@
pynvml