|
|
|
|
|
""" |
|
|
Script de configuración para Hugging Face Space |
|
|
Resuelve problemas comunes de configuración y dependencias |
|
|
""" |
|
|
|
|
|
import os |
|
|
import sys |
|
|
import subprocess |
|
|
import logging |
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def check_environment(): |
|
|
"""Verifica el entorno de ejecución""" |
|
|
logger.info("🔍 Verificando entorno...") |
|
|
|
|
|
|
|
|
space_id = os.getenv("SPACE_ID") |
|
|
space_host = os.getenv("SPACE_HOST") |
|
|
|
|
|
if space_id: |
|
|
logger.info(f"✅ Space ID: {space_id}") |
|
|
if space_host: |
|
|
logger.info(f"✅ Space Host: {space_host}") |
|
|
|
|
|
|
|
|
try: |
|
|
import torch |
|
|
if torch.cuda.is_available(): |
|
|
logger.info(f"✅ GPU disponible: {torch.cuda.get_device_name()}") |
|
|
logger.info(f"✅ Memoria GPU: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB") |
|
|
else: |
|
|
logger.warning("⚠️ GPU no disponible") |
|
|
except ImportError: |
|
|
logger.error("❌ PyTorch no está instalado") |
|
|
|
|
|
def install_mmaudio(): |
|
|
"""Instala el paquete mmaudio local""" |
|
|
logger.info("📦 Instalando mmaudio...") |
|
|
|
|
|
try: |
|
|
|
|
|
import mmaudio |
|
|
logger.info("✅ mmaudio ya está instalado") |
|
|
return True |
|
|
except ImportError: |
|
|
pass |
|
|
|
|
|
try: |
|
|
|
|
|
result = subprocess.run( |
|
|
["pip", "install", "-e", "."], |
|
|
capture_output=True, |
|
|
text=True, |
|
|
cwd=os.getcwd() |
|
|
) |
|
|
|
|
|
if result.returncode == 0: |
|
|
logger.info("✅ mmaudio instalado correctamente") |
|
|
return True |
|
|
else: |
|
|
logger.error(f"❌ Error instalando mmaudio: {result.stderr}") |
|
|
return False |
|
|
except Exception as e: |
|
|
logger.error(f"❌ Error en instalación: {e}") |
|
|
return False |
|
|
|
|
|
def verify_dependencies(): |
|
|
"""Verifica que todas las dependencias estén instaladas""" |
|
|
logger.info("🔍 Verificando dependencias...") |
|
|
|
|
|
dependencies = [ |
|
|
"torch", |
|
|
"torchvision", |
|
|
"torchaudio", |
|
|
"diffusers", |
|
|
"transformers", |
|
|
"accelerate", |
|
|
"gradio", |
|
|
"numpy", |
|
|
"Pillow", |
|
|
"librosa", |
|
|
"soundfile", |
|
|
"av" |
|
|
] |
|
|
|
|
|
missing = [] |
|
|
for dep in dependencies: |
|
|
try: |
|
|
__import__(dep) |
|
|
logger.info(f"✅ {dep}") |
|
|
except ImportError: |
|
|
logger.error(f"❌ {dep} no está instalado") |
|
|
missing.append(dep) |
|
|
|
|
|
if missing: |
|
|
logger.warning(f"⚠️ Dependencias faltantes: {', '.join(missing)}") |
|
|
return False |
|
|
|
|
|
logger.info("✅ Todas las dependencias están instaladas") |
|
|
return True |
|
|
|
|
|
def setup_models(): |
|
|
"""Configura los modelos necesarios""" |
|
|
logger.info("🤖 Configurando modelos...") |
|
|
|
|
|
|
|
|
model_dirs = ["models", "checkpoints"] |
|
|
for dir_name in model_dirs: |
|
|
if not os.path.exists(dir_name): |
|
|
os.makedirs(dir_name) |
|
|
logger.info(f"📁 Creado directorio: {dir_name}") |
|
|
|
|
|
def main(): |
|
|
"""Función principal de configuración""" |
|
|
logger.info("🚀 Iniciando configuración del Space...") |
|
|
|
|
|
|
|
|
check_environment() |
|
|
|
|
|
|
|
|
if not install_mmaudio(): |
|
|
logger.error("❌ No se pudo instalar mmaudio") |
|
|
return False |
|
|
|
|
|
|
|
|
if not verify_dependencies(): |
|
|
logger.error("❌ Faltan dependencias") |
|
|
return False |
|
|
|
|
|
|
|
|
setup_models() |
|
|
|
|
|
logger.info("✅ Configuración completada exitosamente") |
|
|
return True |
|
|
|
|
|
if __name__ == "__main__": |
|
|
success = main() |
|
|
sys.exit(0 if success else 1) |