Spaces:
Running
on
Zero
Running
on
Zero
import shlex | |
import subprocess | |
import os | |
import sys | |
import logging | |
from pathlib import Path | |
from huggingface_hub import snapshot_download, HfHubError | |
import torch | |
import fire | |
import gradio as gr | |
from gradio_app.gradio_3dgen import create_ui as create_3d_ui | |
from gradio_app.all_models import model_zoo | |
# Set up logging | |
logging.basicConfig( | |
level=logging.INFO, | |
format='%(asctime)s - %(levelname)s - %(message)s' | |
) | |
logger = logging.getLogger(__name__) | |
def setup_dependencies(): | |
"""Install required packages with error handling""" | |
try: | |
logger.info("Installing dependencies...") | |
subprocess.run(shlex.split("pip install pip==24.0"), check=True) | |
# Define package paths | |
packages = [ | |
"package/onnxruntime_gpu-1.17.0-cp310-cp310-manylinux_2_28_x86_64.whl", | |
"package/nvdiffrast-0.3.1.torch-cp310-cp310-linux_x86_64.whl" | |
] | |
# Check if package files exist | |
for package in packages: | |
if not Path(package).exists(): | |
raise FileNotFoundError(f"Package file not found: {package}") | |
logger.info(f"Installing {package}") | |
subprocess.run( | |
shlex.split(f"pip install {package} --force-reinstall --no-deps"), | |
check=True | |
) | |
logger.info("Dependencies installed successfully") | |
except subprocess.CalledProcessError as e: | |
logger.error(f"Failed to install dependencies: {str(e)}") | |
raise | |
except FileNotFoundError as e: | |
logger.error(str(e)) | |
raise | |
def setup_model(): | |
"""Download and set up model with error handling""" | |
try: | |
logger.info("Downloading model checkpoints...") | |
# Create checkpoint directory if it doesn't exist | |
ckpt_dir = Path("./ckpt") | |
ckpt_dir.mkdir(parents=True, exist_ok=True) | |
# Download model with retry mechanism | |
max_retries = 3 | |
for attempt in range(max_retries): | |
try: | |
snapshot_download( | |
"public-data/Unique3D", | |
repo_type="model", | |
local_dir=str(ckpt_dir), | |
token=os.getenv("HF_TOKEN") # Add token if needed | |
) | |
break | |
except HfHubError as e: | |
if attempt == max_retries - 1: | |
logger.error(f"Failed to download model after {max_retries} attempts: {str(e)}") | |
raise | |
logger.warning(f"Download attempt {attempt + 1} failed, retrying...") | |
continue | |
logger.info("Model checkpoints downloaded successfully") | |
# Configure PyTorch settings | |
torch.set_float32_matmul_precision('medium') | |
torch.backends.cuda.matmul.allow_tf32 = True | |
torch.set_grad_enabled(False) | |
logger.info("PyTorch configured successfully") | |
except Exception as e: | |
logger.error(f"Error during model setup: {str(e)}") | |
raise | |
# Application title | |
_TITLE = 'Text to 3D' | |
def launch(): | |
"""Launch the Gradio interface""" | |
try: | |
logger.info("Initializing models...") | |
model_zoo.init_models() | |
logger.info("Creating Gradio interface...") | |
with gr.Blocks(title=_TITLE) as demo: | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Markdown('# ' + _TITLE) | |
create_3d_ui("wkl") | |
demo.queue().launch(share=True) | |
except Exception as e: | |
logger.error(f"Error launching application: {str(e)}") | |
raise | |
if __name__ == '__main__': | |
try: | |
logger.info("Starting application setup...") | |
setup_dependencies() | |
sys.path.append(os.curdir) | |
setup_model() | |
fire.Fire(launch) | |
except Exception as e: | |
logger.error(f"Application startup failed: {str(e)}") | |
sys.exit(1) |