Spaces:
Build error
Build error
| #!/usr/bin/env python3 | |
| # FILE: install_deps.py | |
| # Description: Installs all dependencies and downloads models for GhostPack F1 Pro on Hugging Face Spaces with H200 GPU | |
| # Version: 1.0.2 | |
| # Timestamp: 2025-07-02 04:50 CDT | |
| # Author: Grok 3, built by xAI | |
| # NOTE: Installs PyTorch 2.4.1 with CUDA 12.1, dependencies, and downloads models to /data/models | |
| # Requires HF_TOKEN set as environment variable or secret | |
| # Run this before app.py | |
| # Logs to /data/install_deps.log | |
| import os | |
| import sys | |
| import subprocess | |
| import logging | |
| # Set up logging | |
| logging.basicConfig( | |
| filename="/data/install_deps.log", | |
| level=logging.DEBUG, | |
| format="%(asctime)s %(levelname)s:%(message)s", | |
| ) | |
| logger = logging.getLogger(__name__) | |
| # Create log directory | |
| os.makedirs("/data", exist_ok=True) | |
| os.chmod("/data", 0o775) | |
| logger.info("Starting dependency installation and model download") | |
| # Function to run shell commands | |
| def run_command(command, error_message): | |
| try: | |
| result = subprocess.run(command, check=True, capture_output=True, text=True) | |
| logger.info(f"Command succeeded: {' '.join(command)}\n{result.stdout}") | |
| print(f"Command succeeded: {' '.join(command)}") | |
| return True | |
| except subprocess.CalledProcessError as e: | |
| logger.error(f"{error_message}: {e}\n{e.stderr}") | |
| print(f"{error_message}: {e}") | |
| sys.exit(1) | |
| # Update pip | |
| logger.info("Upgrading pip...") | |
| run_command( | |
| [sys.executable, "-m", "pip", "install", "--upgrade", "pip"], | |
| "ERROR: Failed to upgrade pip" | |
| ) | |
| # Install PyTorch with CUDA 12.1 | |
| logger.info("Installing PyTorch 2.4.1 with CUDA 12.1...") | |
| run_command( | |
| [sys.executable, "-m", "pip", "install", "torch==2.4.1+cu121", "--extra-index-url", "https://download.pytorch.org/whl/cu121"], | |
| "ERROR: Failed to install PyTorch" | |
| ) | |
| # Install dependencies | |
| logger.info("Installing required dependencies...") | |
| with open("requirements.txt", "w") as f: | |
| f.write("""transformers==4.44.2 | |
| fastapi==0.115.0 | |
| uvicorn==0.30.6 | |
| gradio==4.44.0 | |
| python-multipart==0.0.9 | |
| diffusers==0.30.3 | |
| pydantic==2.9.2 | |
| einops==0.8.0 | |
| numpy==1.26.4 | |
| pillow==10.4.0 | |
| requests==2.32.3 | |
| colorama==0.4.6 | |
| # Note: diffusers_helper must be included as a folder in the Space's root directory (/diffusers_helper) | |
| """) | |
| run_command( | |
| [sys.executable, "-m", "pip", "install", "-r", "requirements.txt"], | |
| "ERROR: Failed to install dependencies" | |
| ) | |
| # Install optional dependencies | |
| logger.info("Installing optional dependencies (xformers, sage-attn, flash-attn)...") | |
| for pkg, warn in [ | |
| ("xformers", "WARNING: Failed to install xformers"), | |
| ("sage-attn", "WARNING: Failed to install sage-attn"), | |
| ("flash-attn", "WARNING: Failed to install flash-attn") | |
| ]: | |
| try: | |
| run_command([sys.executable, "-m", "pip", "install", pkg], warn) | |
| except SystemExit: | |
| logger.warning(warn) | |
| print(warn) | |
| # Download models | |
| logger.info("Downloading models to /data/models...") | |
| MODEL_DIR = "/data/models" | |
| HF_TOKEN = os.getenv('HF_TOKEN', 'your-hf-token') # Set in Spaces secrets | |
| os.makedirs(MODEL_DIR, exist_ok=True) | |
| os.chmod(MODEL_DIR, 0o775) | |
| logger.info(f"Created model directory: {MODEL_DIR}") | |
| from transformers import LlamaModel, CLIPTextModel, LlamaTokenizerFast, CLIPTokenizer, SiglipImageProcessor, SiglipVisionModel | |
| from diffusers import AutoencoderKLHunyuanVideo | |
| from diffusers_helper.models.hunyuan_video_packed import HunyuanVideoTransformer3DModelPacked | |
| def download_model(model_class, model_name, subfolder=None, **kwargs): | |
| try: | |
| logger.info(f"Downloading {model_name} (subfolder: {subfolder}) to {MODEL_DIR}") | |
| model = model_class.from_pretrained( | |
| model_name, | |
| subfolder=subfolder, | |
| token=HF_TOKEN, | |
| cache_dir=MODEL_DIR, | |
| local_files_only=False, | |
| **kwargs | |
| ) | |
| logger.info(f"Successfully downloaded {model_name} (subfolder: {subfolder})") | |
| except Exception as e: | |
| logger.error(f"Failed to download {model_name} (subfolder: {subfolder}): {e}") | |
| print(f"Error: Failed to download {model_name} (subfolder: {subfolder}): {e}") | |
| sys.exit(1) | |
| # Download HunyuanVideo components | |
| try: | |
| download_model(LlamaModel, "hunyuanvideo-community/HunyuanVideo", subfolder="text_encoder", torch_dtype=torch.float16) | |
| download_model(CLIPTextModel, "hunyuanvideo-community/HunyuanVideo", subfolder="text_encoder_2", torch_dtype=torch.float16) | |
| download_model(LlamaTokenizerFast, "hunyuanvideo-community/HunyuanVideo", subfolder="tokenizer") | |
| download_model(CLIPTokenizer, "hunyuanvideo-community/HunyuanVideo", subfolder="tokenizer_2") | |
| download_model(AutoencoderKLHunyuanVideo, "hunyuanvideo-community/HunyuanVideo", subfolder="vae", torch_dtype=torch.float16) | |
| except Exception as e: | |
| logger.error(f"Failed to download HunyuanVideo components: {e}") | |
| print(f"Error: Failed to download HunyuanVideo components: {e}") | |
| sys.exit(1) | |
| # Download FramePack components | |
| try: | |
| download_model(SiglipImageProcessor, "lllyasviel/flux_redux_bfl", subfolder="feature_extractor") | |
| download_model(SiglipVisionModel, "lllyasviel/flux_redux_bfl", subfolder="image_encoder", torch_dtype=torch.float16) | |
| download_model(HunyuanVideoTransformer3DModelPacked, "lllyasviel/FramePack_F1_I2V_HY_20250503", torch_dtype=torch.bfloat16) | |
| except Exception as e: | |
| logger.error(f"Failed to download FramePack components: {e}") | |
| print(f"Error: Failed to download FramePack components: {e}") | |
| sys.exit(1) | |
| logger.info("Dependency installation and model download completed successfully") | |
| print("Dependency installation and model download completed successfully") |