Update aduc_framework/managers/seedvr_manager.py
Browse files
aduc_framework/managers/seedvr_manager.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
#
|
| 3 |
# Copyright (C) 2025 Carlos Rodrigues dos Santos
|
| 4 |
#
|
| 5 |
-
# Version: 10.0.0 (Definitive Monkey Patch)
|
| 6 |
#
|
| 7 |
# Esta é a arquitetura final e mais robusta. O paralelismo problemático
|
| 8 |
# é desativado programaticamente via "monkey patching" no decorador `master_only`.
|
|
@@ -48,43 +48,42 @@ class SeedVrManager:
|
|
| 48 |
|
| 49 |
@staticmethod
|
| 50 |
def _check_and_run_global_setup():
|
|
|
|
| 51 |
setup_flag = DEPS_DIR / "seedvr.setup.complete"
|
| 52 |
if str(APP_ROOT) not in sys.path: sys.path.insert(0, str(APP_ROOT))
|
| 53 |
-
if setup_flag.exists(): return True
|
| 54 |
-
|
| 55 |
-
logger.info("--- Iniciando Setup Global do SeedVR (primeira execução) ---")
|
| 56 |
-
if not SEEDVR_SPACE_DIR.exists():
|
| 57 |
-
DEPS_DIR.mkdir(exist_ok=True, parents=True)
|
| 58 |
-
subprocess.run(["git", "clone", "--depth", "1", SEEDVR_SPACE_URL, str(SEEDVR_SPACE_DIR)], check=True)
|
| 59 |
|
| 60 |
-
|
| 61 |
-
for dirname in required_dirs:
|
| 62 |
-
source, target = SEEDVR_SPACE_DIR / dirname, APP_ROOT / dirname
|
| 63 |
-
if not target.exists(): shutil.copytree(source, target)
|
| 64 |
-
|
| 65 |
-
# <<< --- MONKEY PATCH PARA DESATIVAR O PARALELISMO --- >>>
|
| 66 |
try:
|
| 67 |
from common import decorators
|
| 68 |
import functools
|
| 69 |
|
| 70 |
-
# Define um decorador que não faz nada e apenas retorna a função original
|
| 71 |
def _passthrough_decorator(func):
|
| 72 |
@functools.wraps(func)
|
| 73 |
def wrapped(*args, **kwargs):
|
| 74 |
return func(*args, **kwargs)
|
| 75 |
return wrapped
|
| 76 |
|
| 77 |
-
# Substitui o decorador problemático pelo nosso decorador inofensivo
|
| 78 |
decorators.master_only = _passthrough_decorator
|
| 79 |
logger.info("Monkey patch aplicado com sucesso em 'common.decorators.master_only' para desativar o paralelismo.")
|
| 80 |
except Exception as e:
|
| 81 |
logger.error(f"Falha ao aplicar o monkey patch: {e}", exc_info=True)
|
| 82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
try:
|
| 85 |
import apex
|
| 86 |
except ImportError:
|
| 87 |
-
apex_url = 'https://huggingface.co/ByteDance-Seed/SeedVR2-3B/resolve/main/apex-0.1-cp310-cp310-
|
| 88 |
apex_wheel_path = _load_file_from_url(url=apex_url, model_dir=str(DEPS_DIR))
|
| 89 |
subprocess.run(f"pip install {apex_wheel_path}", check=True, shell=True)
|
| 90 |
|
|
@@ -121,7 +120,6 @@ class SeedVrManager:
|
|
| 121 |
self.runner = VideoDiffusionInfer(config)
|
| 122 |
OmegaConf.set_readonly(self.runner.config, False)
|
| 123 |
|
| 124 |
-
# Agora o código decorado dentro desta função usará nosso patch inofensivo
|
| 125 |
self.runner.configure_dit_model(device=self.local_device_name, checkpoint=str(checkpoint_path))
|
| 126 |
self.runner.configure_vae_model()
|
| 127 |
|
|
@@ -216,15 +214,16 @@ try:
|
|
| 216 |
|
| 217 |
if seedvr_gpus_required > 0:
|
| 218 |
seedvr_device_ids = hardware_manager.allocate_gpus('SeedVR', seedvr_gpus_required)
|
| 219 |
-
if 'cpu' not in seedvr_device_ids:
|
| 220 |
device_to_use = seedvr_device_ids[0]
|
| 221 |
seedvr_manager_singleton = SeedVrManager(device_id=device_to_use)
|
| 222 |
logger.info(f"Especialista de Masterização HD (SeedVR Single Instance) pronto para usar a GPU {device_to_use}.")
|
| 223 |
else:
|
| 224 |
seedvr_manager_singleton = SeedVrPlaceholder()
|
|
|
|
| 225 |
else:
|
| 226 |
seedvr_manager_singleton = SeedVrPlaceholder()
|
| 227 |
-
logger.warning("SeedVR Manager não foi inicializado (gpus_required: 0).")
|
| 228 |
except Exception as e:
|
| 229 |
logger.critical(f"Falha CRÍTICA ao inicializar o SeedVrManager: {e}", exc_info=True)
|
| 230 |
seedvr_manager_singleton = SeedVrPlaceholder()
|
|
|
|
| 2 |
#
|
| 3 |
# Copyright (C) 2025 Carlos Rodrigues dos Santos
|
| 4 |
#
|
| 5 |
+
# Version: 10.0.0 (Definitive Monkey Patch / Single Instance)
|
| 6 |
#
|
| 7 |
# Esta é a arquitetura final e mais robusta. O paralelismo problemático
|
| 8 |
# é desativado programaticamente via "monkey patching" no decorador `master_only`.
|
|
|
|
| 48 |
|
| 49 |
@staticmethod
|
| 50 |
def _check_and_run_global_setup():
|
| 51 |
+
"""Executa o setup de arquivos e aplica o patch para desativar o paralelismo."""
|
| 52 |
setup_flag = DEPS_DIR / "seedvr.setup.complete"
|
| 53 |
if str(APP_ROOT) not in sys.path: sys.path.insert(0, str(APP_ROOT))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
|
| 55 |
+
# O patch deve ser aplicado toda vez que o código roda.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
try:
|
| 57 |
from common import decorators
|
| 58 |
import functools
|
| 59 |
|
|
|
|
| 60 |
def _passthrough_decorator(func):
|
| 61 |
@functools.wraps(func)
|
| 62 |
def wrapped(*args, **kwargs):
|
| 63 |
return func(*args, **kwargs)
|
| 64 |
return wrapped
|
| 65 |
|
|
|
|
| 66 |
decorators.master_only = _passthrough_decorator
|
| 67 |
logger.info("Monkey patch aplicado com sucesso em 'common.decorators.master_only' para desativar o paralelismo.")
|
| 68 |
except Exception as e:
|
| 69 |
logger.error(f"Falha ao aplicar o monkey patch: {e}", exc_info=True)
|
| 70 |
+
|
| 71 |
+
if setup_flag.exists(): return True
|
| 72 |
+
|
| 73 |
+
logger.info("--- Iniciando Setup Global do SeedVR (primeira execução) ---")
|
| 74 |
+
if not SEEDVR_SPACE_DIR.exists():
|
| 75 |
+
DEPS_DIR.mkdir(exist_ok=True, parents=True)
|
| 76 |
+
subprocess.run(["git", "clone", "--depth", "1", SEEDVR_SPACE_URL, str(SEEDVR_SPACE_DIR)], check=True)
|
| 77 |
+
|
| 78 |
+
required_dirs = ["projects", "common", "models", "configs_3b", "configs_7b", "data"]
|
| 79 |
+
for dirname in required_dirs:
|
| 80 |
+
source, target = SEEDVR_SPACE_DIR / dirname, APP_ROOT / dirname
|
| 81 |
+
if not target.exists(): shutil.copytree(source, target)
|
| 82 |
|
| 83 |
try:
|
| 84 |
import apex
|
| 85 |
except ImportError:
|
| 86 |
+
apex_url = 'https://huggingface.co/ByteDance-Seed/SeedVR2-3B/resolve/main/apex-0.1-cp310-cp310-linux_x86_64.whl'
|
| 87 |
apex_wheel_path = _load_file_from_url(url=apex_url, model_dir=str(DEPS_DIR))
|
| 88 |
subprocess.run(f"pip install {apex_wheel_path}", check=True, shell=True)
|
| 89 |
|
|
|
|
| 120 |
self.runner = VideoDiffusionInfer(config)
|
| 121 |
OmegaConf.set_readonly(self.runner.config, False)
|
| 122 |
|
|
|
|
| 123 |
self.runner.configure_dit_model(device=self.local_device_name, checkpoint=str(checkpoint_path))
|
| 124 |
self.runner.configure_vae_model()
|
| 125 |
|
|
|
|
| 214 |
|
| 215 |
if seedvr_gpus_required > 0:
|
| 216 |
seedvr_device_ids = hardware_manager.allocate_gpus('SeedVR', seedvr_gpus_required)
|
| 217 |
+
if seedvr_device_ids and 'cpu' not in seedvr_device_ids:
|
| 218 |
device_to_use = seedvr_device_ids[0]
|
| 219 |
seedvr_manager_singleton = SeedVrManager(device_id=device_to_use)
|
| 220 |
logger.info(f"Especialista de Masterização HD (SeedVR Single Instance) pronto para usar a GPU {device_to_use}.")
|
| 221 |
else:
|
| 222 |
seedvr_manager_singleton = SeedVrPlaceholder()
|
| 223 |
+
logger.warning("SeedVR não foi inicializado porque nenhuma GPU pôde ser alocada.")
|
| 224 |
else:
|
| 225 |
seedvr_manager_singleton = SeedVrPlaceholder()
|
| 226 |
+
logger.warning("SeedVR Manager não foi inicializado (gpus_required: 0 na config).")
|
| 227 |
except Exception as e:
|
| 228 |
logger.critical(f"Falha CRÍTICA ao inicializar o SeedVrManager: {e}", exc_info=True)
|
| 229 |
seedvr_manager_singleton = SeedVrPlaceholder()
|