Spaces:
Running
Running
import shlex | |
import subprocess | |
import os | |
import sys | |
import logging | |
from pathlib import Path | |
from huggingface_hub import snapshot_download | |
from huggingface_hub.utils import RepositoryNotFoundError | |
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 install_requirements(): | |
"""Install requirements from requirements.txt""" | |
requirements = """ | |
pytorch3d @ https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py310_cu121_pyt221/pytorch3d-0.7.6-cp310-cp310-linux_x86_64.whl | |
ort_nightly_gpu @ https://aiinfra.pkgs.visualstudio.com/2692857e-05ef-43b4-ba9c-ccf1c22c437c/_packaging/d3daa2b0-aa56-45ac-8145-2c3dc0661c87/pypi/download/ort-nightly-gpu/1.17.dev20240118002/ort_nightly_gpu-1.17.0.dev20240118002-cp310-cp310-manylinux_2_28_x86_64.whl | |
onnxruntime_gpu @ https://pkgs.dev.azure.com/onnxruntime/2a773b67-e88b-4c7f-9fc0-87d31fea8ef2/_packaging/7fa31e42-5da1-4e84-a664-f2b4129c7d45/pypi/download/onnxruntime-gpu/1.17/onnxruntime_gpu-1.17.0-cp310-cp310-manylinux_2_28_x86_64.whl | |
torch==2.2.0 | |
accelerate | |
datasets | |
diffusers>=0.26.3 | |
fire | |
gradio | |
jax | |
typing | |
numba | |
numpy<2 | |
omegaconf>=2.3.0 | |
opencv_python | |
opencv_python_headless | |
peft | |
Pillow | |
pygltflib | |
pymeshlab>=2023.12 | |
rembg[gpu] | |
torch_scatter @ https://data.pyg.org/whl/torch-2.2.0%2Bcu121/torch_scatter-2.1.2%2Bpt22cu121-cp310-cp310-linux_x86_64.whl | |
tqdm | |
transformers | |
trimesh | |
typeguard | |
wandb | |
xformers | |
ninja | |
""".strip() | |
# Write requirements to file | |
with open("requirements.txt", "w") as f: | |
f.write(requirements) | |
try: | |
logger.info("Installing requirements...") | |
subprocess.run( | |
[sys.executable, "-m", "pip", "install", "-r", "requirements.txt"], | |
check=True | |
) | |
logger.info("Requirements installed successfully") | |
except subprocess.CalledProcessError as e: | |
logger.error(f"Failed to install requirements: {str(e)}") | |
raise | |
def setup_dependencies(): | |
"""Install required packages with error handling""" | |
try: | |
logger.info("Installing dependencies...") | |
install_requirements() | |
# 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 offline support""" | |
try: | |
logger.info("Setting up model checkpoints...") | |
# Create checkpoint directory if it doesn't exist | |
ckpt_dir = Path("./ckpt") | |
ckpt_dir.mkdir(parents=True, exist_ok=True) | |
# Check for offline mode first | |
model_path = ckpt_dir / "img2mvimg" | |
if not model_path.exists(): | |
logger.info("Model not found locally, attempting download...") | |
try: | |
snapshot_download( | |
"public-data/Unique3D", | |
repo_type="model", | |
local_dir=str(ckpt_dir), | |
token=os.getenv("HF_TOKEN"), | |
local_files_only=False | |
) | |
except Exception as e: | |
logger.error(f"Failed to download model: {str(e)}") | |
logger.info("Checking for local model files...") | |
if not (model_path / "config.json").exists(): | |
raise RuntimeError( | |
"Model not found locally and download failed. " | |
"Please ensure you have the model files in ./ckpt/img2mvimg" | |
) | |
# Configure PyTorch settings | |
torch.set_float32_matmul_precision('medium') | |
torch.backends.cuda.matmul.allow_tf32 = True | |
torch.set_grad_enabled(False) | |
logger.info("Model setup completed 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) |