Spaces:
Runtime error
Runtime error
fix: add MultiScaleDeformableAttention CUDA extension and enhance CUDA toolkit setup
Browse files
.gitattributes
CHANGED
|
@@ -95,3 +95,5 @@ pretrained_weights/insightface/models/buffalo_l/2d106det.onnx filter=lfs diff=lf
|
|
| 95 |
pretrained_weights/insightface/models/buffalo_l/det_10g.onnx filter=lfs diff=lfs merge=lfs -text
|
| 96 |
pretrained_weights/liveportrait/landmark.onnx filter=lfs diff=lfs merge=lfs -text
|
| 97 |
pretrained_weights/liveportrait_animals/**/*.pth filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 95 |
pretrained_weights/insightface/models/buffalo_l/det_10g.onnx filter=lfs diff=lfs merge=lfs -text
|
| 96 |
pretrained_weights/liveportrait/landmark.onnx filter=lfs diff=lfs merge=lfs -text
|
| 97 |
pretrained_weights/liveportrait_animals/**/*.pth filter=lfs diff=lfs merge=lfs -text
|
| 98 |
+
|
| 99 |
+
MultiScaleDeformableAttention.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
app.py
CHANGED
|
@@ -12,6 +12,10 @@ from src.config.argument_config import ArgumentConfig
|
|
| 12 |
from src.config.inference_config import InferenceConfig
|
| 13 |
import spaces
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
CUDA_RUN_URL = (
|
| 16 |
"https://developer.download.nvidia.com/compute/cuda/11.8.0/"
|
| 17 |
"local_installers/cuda_11.8.0_520.61.05_linux.run"
|
|
@@ -22,27 +26,34 @@ TORCH_WHL_INDEX = "https://download.pytorch.org/whl/torch_stable.html"
|
|
| 22 |
|
| 23 |
def ensure_cuda_toolkit():
|
| 24 |
"""Download & install the CUDA toolkit *silently* if it is not present."""
|
|
|
|
| 25 |
if pathlib.Path(f"{CUDA_HOME_PATH}/bin/nvcc").exists():
|
|
|
|
| 26 |
return # toolkit already installed
|
| 27 |
|
|
|
|
| 28 |
run_file = f"/tmp/{pathlib.Path(CUDA_RUN_URL).name}"
|
| 29 |
subprocess.run(["wget", "-q", CUDA_RUN_URL, "-O", run_file], check=True)
|
|
|
|
| 30 |
subprocess.run(["chmod", "+x", run_file], check=True)
|
|
|
|
| 31 |
subprocess.run([run_file, "--silent", "--toolkit"], check=True)
|
|
|
|
| 32 |
|
| 33 |
# --- environment variables expected by CUDA extensions -------------------
|
|
|
|
| 34 |
os.environ["CUDA_HOME"] = CUDA_HOME_PATH
|
| 35 |
os.environ["PATH"] = f"{CUDA_HOME_PATH}/bin:" + os.environ.get("PATH", "")
|
| 36 |
os.environ["LD_LIBRARY_PATH"] = (
|
| 37 |
f"{CUDA_HOME_PATH}/lib64:" + os.environ.get("LD_LIBRARY_PATH", "")
|
| 38 |
)
|
| 39 |
os.environ["TORCH_CUDA_ARCH_LIST"] = "8.0;8.6"
|
|
|
|
| 40 |
|
| 41 |
|
| 42 |
def build_xpose_ops():
|
| 43 |
"""Build the MultiScaleDeformableAttention CUDA extension with enhanced error handling."""
|
| 44 |
try:
|
| 45 |
-
# Check if already built to avoid rebuilding
|
| 46 |
import MultiScaleDeformableAttention
|
| 47 |
print("MultiScaleDeformableAttention already installed")
|
| 48 |
return True
|
|
@@ -53,21 +64,17 @@ def build_xpose_ops():
|
|
| 53 |
current_dir, "src/utils/dependencies/XPose/models/UniPose/ops")
|
| 54 |
try:
|
| 55 |
os.chdir(ops_dir)
|
| 56 |
-
# Set environment variables to help with compilation
|
| 57 |
os.environ["TORCH_CUDA_ARCH_LIST"] = "8.0;8.6"
|
| 58 |
-
os.environ["MAX_JOBS"] = "1" # Limit to avoid memory issues
|
| 59 |
|
| 60 |
try:
|
| 61 |
-
# Try building with fewer optimizations
|
| 62 |
subprocess.run(
|
| 63 |
-
[sys.executable, "setup.py", "build", "install"
|
| 64 |
check=True,
|
| 65 |
env={**os.environ, "CFLAGS": "-O0", "CXXFLAGS": "-O0"}
|
| 66 |
)
|
| 67 |
print("MultiScaleDeformableAttention built successfully")
|
| 68 |
|
| 69 |
try:
|
| 70 |
-
# Verify it was properly built
|
| 71 |
import MultiScaleDeformableAttention
|
| 72 |
built_success = True
|
| 73 |
except ImportError:
|
|
@@ -77,17 +84,14 @@ def build_xpose_ops():
|
|
| 77 |
except subprocess.CalledProcessError as e:
|
| 78 |
print(f"Build error: {e}")
|
| 79 |
|
| 80 |
-
# If the standard build fails, try with minimal compilation
|
| 81 |
try:
|
| 82 |
print("Attempting simplified build...")
|
| 83 |
subprocess.run(
|
| 84 |
-
[sys.executable, "setup.py", "build", "install",
|
| 85 |
-
"--global-option=--disable-cuda"],
|
| 86 |
check=True
|
| 87 |
)
|
| 88 |
print("Simplified build completed")
|
| 89 |
|
| 90 |
-
# Verify import works
|
| 91 |
try:
|
| 92 |
import MultiScaleDeformableAttention
|
| 93 |
print("MultiScaleDeformableAttention imported after simplified build")
|
|
|
|
| 12 |
from src.config.inference_config import InferenceConfig
|
| 13 |
import spaces
|
| 14 |
|
| 15 |
+
ROOT = pathlib.Path(__file__).resolve().parent
|
| 16 |
+
OPS_DIR = ROOT / "src" / "utils" / "dependencies" / "XPose" / "models" / "UniPose" / "ops"
|
| 17 |
+
sys.path.insert(0, str(OPS_DIR))
|
| 18 |
+
|
| 19 |
CUDA_RUN_URL = (
|
| 20 |
"https://developer.download.nvidia.com/compute/cuda/11.8.0/"
|
| 21 |
"local_installers/cuda_11.8.0_520.61.05_linux.run"
|
|
|
|
| 26 |
|
| 27 |
def ensure_cuda_toolkit():
|
| 28 |
"""Download & install the CUDA toolkit *silently* if it is not present."""
|
| 29 |
+
print("Checking for CUDA toolkit...")
|
| 30 |
if pathlib.Path(f"{CUDA_HOME_PATH}/bin/nvcc").exists():
|
| 31 |
+
print(f"CUDA toolkit already installed at {CUDA_HOME_PATH}")
|
| 32 |
return # toolkit already installed
|
| 33 |
|
| 34 |
+
print(f"CUDA toolkit not found. Downloading from {CUDA_RUN_URL}...")
|
| 35 |
run_file = f"/tmp/{pathlib.Path(CUDA_RUN_URL).name}"
|
| 36 |
subprocess.run(["wget", "-q", CUDA_RUN_URL, "-O", run_file], check=True)
|
| 37 |
+
print(f"Download complete. Making installer executable...")
|
| 38 |
subprocess.run(["chmod", "+x", run_file], check=True)
|
| 39 |
+
print("Installing CUDA toolkit (this may take a while)...")
|
| 40 |
subprocess.run([run_file, "--silent", "--toolkit"], check=True)
|
| 41 |
+
print("CUDA toolkit installation complete.")
|
| 42 |
|
| 43 |
# --- environment variables expected by CUDA extensions -------------------
|
| 44 |
+
print("Setting up CUDA environment variables...")
|
| 45 |
os.environ["CUDA_HOME"] = CUDA_HOME_PATH
|
| 46 |
os.environ["PATH"] = f"{CUDA_HOME_PATH}/bin:" + os.environ.get("PATH", "")
|
| 47 |
os.environ["LD_LIBRARY_PATH"] = (
|
| 48 |
f"{CUDA_HOME_PATH}/lib64:" + os.environ.get("LD_LIBRARY_PATH", "")
|
| 49 |
)
|
| 50 |
os.environ["TORCH_CUDA_ARCH_LIST"] = "8.0;8.6"
|
| 51 |
+
print("CUDA environment setup complete.")
|
| 52 |
|
| 53 |
|
| 54 |
def build_xpose_ops():
|
| 55 |
"""Build the MultiScaleDeformableAttention CUDA extension with enhanced error handling."""
|
| 56 |
try:
|
|
|
|
| 57 |
import MultiScaleDeformableAttention
|
| 58 |
print("MultiScaleDeformableAttention already installed")
|
| 59 |
return True
|
|
|
|
| 64 |
current_dir, "src/utils/dependencies/XPose/models/UniPose/ops")
|
| 65 |
try:
|
| 66 |
os.chdir(ops_dir)
|
|
|
|
| 67 |
os.environ["TORCH_CUDA_ARCH_LIST"] = "8.0;8.6"
|
|
|
|
| 68 |
|
| 69 |
try:
|
|
|
|
| 70 |
subprocess.run(
|
| 71 |
+
[sys.executable, "setup.py", "build", "install"],
|
| 72 |
check=True,
|
| 73 |
env={**os.environ, "CFLAGS": "-O0", "CXXFLAGS": "-O0"}
|
| 74 |
)
|
| 75 |
print("MultiScaleDeformableAttention built successfully")
|
| 76 |
|
| 77 |
try:
|
|
|
|
| 78 |
import MultiScaleDeformableAttention
|
| 79 |
built_success = True
|
| 80 |
except ImportError:
|
|
|
|
| 84 |
except subprocess.CalledProcessError as e:
|
| 85 |
print(f"Build error: {e}")
|
| 86 |
|
|
|
|
| 87 |
try:
|
| 88 |
print("Attempting simplified build...")
|
| 89 |
subprocess.run(
|
| 90 |
+
[sys.executable, "setup.py", "build", "install"],
|
|
|
|
| 91 |
check=True
|
| 92 |
)
|
| 93 |
print("Simplified build completed")
|
| 94 |
|
|
|
|
| 95 |
try:
|
| 96 |
import MultiScaleDeformableAttention
|
| 97 |
print("MultiScaleDeformableAttention imported after simplified build")
|
src/utils/dependencies/XPose/models/UniPose/ops/MultiScaleDeformableAttention.cpython-310-x86_64-linux-gnu.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2e522d249550dbec7577971415180c6685de6e5e864f89e780398ce8f32e71ad
|
| 3 |
+
size 9901144
|