mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-10 11:47:34 +08:00
DynamicVRAM's on-demand model loading/offloading conflicted with process isolation in three ways: RPC tensor transport stalls from mid-call GPU offload, race conditions between model lifecycle and active RPC operations, and false positive memory leak detection from changed finalizer patterns. - Marshal CUDA tensors to CPU before RPC transport for dynamic models - Add operation state tracking + quiescence waits at workflow boundaries - Distinguish proxy reference release from actual leaks in cleanup_models_gc - Fix init order: DynamicVRAM must initialize before isolation proxies - Add RPC timeouts to prevent indefinite hangs on model unavailability - Prevent proxy-of-proxy chains from DynamicVRAM model reload cycles - Add torch.device/torch.dtype serializers for new DynamicVRAM RPC paths - Guard isolation overhead so non-isolated workflows are unaffected - Migrate env var to PYISOLATE_CHILD
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from pathlib import Path
|
|
import sys
|
|
import logging
|
|
import re
|
|
|
|
# The path to the requirements.txt file
|
|
requirements_path = Path(__file__).parents[1] / "requirements.txt"
|
|
|
|
|
|
def get_missing_requirements_message():
|
|
"""The warning message to display when a package is missing."""
|
|
|
|
extra = ""
|
|
if sys.flags.no_user_site:
|
|
extra = "-s "
|
|
return f"""
|
|
Please install the updated requirements.txt file by running:
|
|
{sys.executable} {extra}-m pip install -r {requirements_path}
|
|
If you are on the portable package you can run: update\\update_comfyui.bat to solve this problem.
|
|
""".strip()
|
|
|
|
|
|
def is_valid_version(version: str) -> bool:
|
|
"""Validate if a string is a valid semantic version (X.Y.Z format)."""
|
|
pattern = r"^(\d+)\.(\d+)\.(\d+)$"
|
|
return bool(re.match(pattern, version))
|
|
|
|
|
|
PACKAGE_VERSIONS = {}
|
|
def get_required_packages_versions():
|
|
if len(PACKAGE_VERSIONS) > 0:
|
|
return PACKAGE_VERSIONS.copy()
|
|
out = PACKAGE_VERSIONS
|
|
try:
|
|
with open(requirements_path, "r", encoding="utf-8") as f:
|
|
for line in f:
|
|
line = line.strip().replace(">=", "==")
|
|
s = line.split("==")
|
|
if len(s) == 2:
|
|
version_str = s[-1]
|
|
if not is_valid_version(version_str):
|
|
logging.error(f"Invalid version format in requirements.txt: {version_str}")
|
|
continue
|
|
out[s[0]] = version_str
|
|
return out.copy()
|
|
except FileNotFoundError:
|
|
logging.error("requirements.txt not found.")
|
|
return None
|
|
except Exception as e:
|
|
logging.error(f"Error reading requirements.txt: {e}")
|
|
return None
|