add modal serving file

This commit is contained in:
shuohigh@gmail.com
2025-07-29 10:53:58 +08:00
parent 4226fbece7
commit d32ddc76f8
2 changed files with 119 additions and 0 deletions

52
pyproject.toml Normal file
View File

@@ -0,0 +1,52 @@
[project]
name = "wan2gp"
version = "0.1.0"
description = "Add your description here"
requires-python = ">=3.11"
dependencies = [
"accelerate>=1.1.1",
"av>=15.0.0",
"dashscope>=1.24.0",
"decord>=0.6.0",
"diffusers>=0.31.0",
"easydict>=1.13",
"einops>=0.8.1",
"ffmpeg-python>=0.2.0",
"ftfy>=6.3.1",
"gradio==5.23.0",
"hydra-core>=1.3.2",
"imageio>=2.37.0",
"imageio-ffmpeg>=0.6.0",
"librosa==0.11.0",
"loguru>=0.7.3",
"matplotlib>=3.10.3",
"misaki>=0.9.4",
"mmgp==3.5.1",
"modal>=1.1.0",
"moviepy==1.0.3",
"mutagen>=1.47.0",
"numpy>=1.23.5,<2",
"omegaconf>=2.3.0",
"onnxruntime-gpu>=1.22.0",
"open-clip-torch>=2.29.0",
"opencv-python>=4.9.0.80",
"peft==0.15.0",
"pyannote-audio>=3.3.2",
"pydantic==2.10.6",
"pygame>=2.1.0",
"pyloudnorm>=0.1.1",
"rembg[gpu]==2.0.65",
"segment-anything>=1.0",
"sentencepiece>=0.2.0",
"sounddevice>=0.4.0",
"soundfile>=0.13.1",
"tensordict>=0.6.1",
"timm>=1.0.19",
"tokenizers>=0.20.3",
"torch>=2.4.0",
"torchdiffeq>=0.2.5",
"torchvision>=0.19.0",
"tqdm>=4.67.1",
"transformers==4.51.3",
]

67
serve.py Normal file
View File

@@ -0,0 +1,67 @@
import modal
image = (
modal.Image.debian_slim()
.apt_install("libgl1", "libglib2.0-0", "libsm6", "libxrender1", "libxext6", "ffmpeg")
.pip_install("torch", "torchvision", "torchaudio", index_url="https://download.pytorch.org/whl/cu128")
.pip_install_from_pyproject("./pyproject.toml")
.pip_install("sageattention")
.add_local_dir(local_path="../Wan2GP", remote_path="/root/Wan2GP", ignore=["*.venv"])
)
app = modal.App(name="Wan2GP", image=image)
vol = modal.Volume.from_name("wan2gp-ckpts", create_if_missing=True, environment_name="dev")
outputs = modal.Volume.from_name("wan2gp-outputs", create_if_missing=True, environment_name="dev")
with image.imports():
import subprocess
import os
# @app.function(max_containers=1, gpu="L40S",
# scaledown_window=900,
# timeout=3600,
# volumes={"/root/Wan2GP/ckpts": vol,
# "/root/Wan2GP/outputs": outputs})
# @modal.concurrent(max_inputs=50)
# @modal.web_server(8000, startup_timeout=2400)
# def ui():
# os.chdir("/root/Wan2GP")
# subprocess.Popen(
# "python /root/Wan2GP/wgp.py --listen --server-port 8000 --compile --attention sage --profile 1",
# shell=True)
@app.function(max_containers=1, gpu="L40S",
scaledown_window=900,
timeout=60 * 60 * 18,
volumes={"/root/Wan2GP/ckpts": vol,
"/root/Wan2GP/outputs": outputs})
@modal.concurrent(max_inputs=1000)
@modal.asgi_app()
def serve():
import asyncio
import atexit
from fastapi import FastAPI
from gradio import mount_gradio_app
os.chdir("/root/Wan2GP")
import sys
sys.path.append('/root/Wan2GP')
sys.argv = ["--listen", "--server-port", "8000", "--compile", "--attention", "sage", "--profile", "1"]
from wgp import autosave_queue, create_ui, save_path
app = FastAPI()
atexit.register(autosave_queue)
# download_ffmpeg()
# threading.Thread(target=runner, daemon=True).start()
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
server_port = 8000
if os.name == "nt":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
server_name = "0.0.0.0"
demo = create_ui()
demo.queue(max_size=5)
return mount_gradio_app(app=app, blocks=demo, path="/",
server_name=server_name, server_port=server_port,
allowed_paths=[save_path])