feat(mia): one-shot Make-It-Animatable v2 auto-rigger on fv-ml1 GPU 3 (scripts/mia-run)

Image local/mia:0.1.0 built from stacks/mia: MIA v2 @ bbd8b158 (MIT) with
its pinned submodules, dread-dev's proven Python lock with the torch family
swapped to cu129, and a driver adapted from dread-dev's run_mia.py that
seeds every mesh (fix_random + trimesh's module RNG) and writes
weights_effective into the npz. Weights stay in fv-ml1's shared HF cache
at pinned revisions, mounted read-only.

scripts/mia-run mirrors blender-run: --job DIR is shipped to
fv-ml1:/tank/mia/jobs, one docker run --rm rigs every mesh, out/ comes back.

Acceptance on the four Dread Naught characters: 3.9-4.7 s a mesh (median
of 3) plus 12.7 s model load, peak 3,394 MiB; seeded runs bit-identical
across rotated mesh order; GPU-vs-CPU distances the same size as sampling
noise, with an unseeded GPU run as the positive control.
This commit is contained in:
vh
2026-10-01 09:45:22 -07:00
parent e5536784e0
commit f44280e6b2
12 changed files with 3121 additions and 1 deletions
+69
View File
@@ -0,0 +1,69 @@
# Make-It-Animatable (MIA) v2: one-shot ML auto-rigger for humanoid meshes (GLB in, 52-bone
# Mixamo-style skeleton + skin weights out). Run by scripts/mia-run on fv-ml1 GPU 3, for dread-dev
# (Dread Naught), Prime's request 2026-10-01. NOT a seat: each run is a `docker run --rm` that
# rigs, writes the job's out/, exits and hands the GPU back.
#
# Code: github.com/jasongzy/Make-It-Animatable, branch v2 @ MIA_COMMIT (MIT), cloned with the
# submodules that commit pins (util/Hunyuan3D_21 @ b691197, util/auto_rig_pro, util/3dgs-render-
# blender-addon). Python: requirements.lock (dread-dev's proven CPU venv, torch family swapped to
# cu129). Upstream app_v2.py is UNPATCHED: dread-dev's CPU patch only upcasts on CPU.
#
# Weights are NOT baked in. /tank/aimodels/huggingface is bind-mounted read-only at /hf, and the two
# pinned snapshots are reached through the symlinks made below:
# repo/output -> jasongzy/Make-It-Animatable @ MIA_WEIGHTS_REV (output/best/v2/*.pth, Apache-2.0)
# repo/data/Standard Run.fbx, repo/data/examples -> the same snapshot (init_blocks() reads
# data/examples/log.csv even headless; without it the driver dies before the first mesh)
# /opt/mia/hy3dgen/tencent/Hunyuan3D-2.1 -> tencent/Hunyuan3D-2.1 @ HY3D_REV (hunyuan3d-vae-v2-1)
# repo/data/Mixamo/bones.fbx -> "Standard Run.fbx": the official template sits in the GATED HF
# dataset jasongzy/Mixamo, whose terms were not accepted on Prime's account. It sets bone roll
# only, never joints or weights (dread-dev, 2026-10-01). Accepting those terms is Prime's call.
FROM python:3.11-slim-bookworm
ARG MIA_COMMIT=bbd8b158d88879c310ad130f9b25056935d221e9
ARG MIA_WEIGHTS_REV=ca0daf6cb164f939e77bf32667513fc7558d5f98
ARG HY3D_REV=0b94677654c57bb9a6b6845cd7b704ccf551d327
ENV DEBIAN_FRONTEND=noninteractive \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
HF_HOME=/hf \
HF_HUB_OFFLINE=1 \
GRADIO_ANALYTICS_ENABLED=False \
MPLCONFIGDIR=/tmp/mpl \
HY3DGEN_MODELS=/opt/mia/hy3dgen \
HOME=/tmp
# git for the clone; the X11/GL libs are what the bpy 4.3 wheel links against (import fails without).
RUN apt-get update && apt-get install -y --no-install-recommends \
git ca-certificates libgl1 libegl1 libglib2.0-0 libx11-6 libxrender1 libxxf86vm1 libxfixes3 \
libxi6 libxkbcommon0 libsm6 libice6 libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# UV_LINK_MODE=copy: uv's default clone (reflink) fails on the build's overlay fs, "os error 22".
COPY requirements.lock /opt/mia/requirements.lock
RUN pip install -q uv \
&& UV_LINK_MODE=copy uv pip install --system --no-cache --index-strategy unsafe-best-match \
--extra-index-url https://download.pytorch.org/whl/cu129 \
--extra-index-url https://download.blender.org/pypi/ \
--extra-index-url https://miropsota.github.io/torch_packages_builder \
--find-links https://data.pyg.org/whl/torch-2.8.0+cu129.html \
-r /opt/mia/requirements.lock \
&& uv pip freeze --system > /opt/mia/freeze.txt
RUN git clone --single-branch --branch v2 https://github.com/jasongzy/Make-It-Animatable /opt/mia/repo \
&& cd /opt/mia/repo && git checkout -q "$MIA_COMMIT" && git submodule update --init --recursive -q \
&& git -C util/Hunyuan3D_21 rev-parse HEAD > /opt/mia/hunyuan3d_21.commit \
&& rm -rf .git util/*/.git output \
&& W=/hf/hub/models--jasongzy--Make-It-Animatable/snapshots/$MIA_WEIGHTS_REV \
&& ln -s "$W/output" output \
&& ln -s "$W/data/Standard Run.fbx" "data/Standard Run.fbx" \
&& ln -s "$W/data/examples" data/examples \
&& mkdir -p data/Mixamo && ln -s "../Standard Run.fbx" data/Mixamo/bones.fbx \
&& mkdir -p /opt/mia/hy3dgen/tencent \
&& ln -s /hf/hub/models--tencent--Hunyuan3D-2.1/snapshots/$HY3D_REV /opt/mia/hy3dgen/tencent/Hunyuan3D-2.1 \
&& printf 'MIA_COMMIT=%s\nMIA_WEIGHTS_REV=%s\nHY3D_REV=%s\n' "$MIA_COMMIT" "$MIA_WEIGHTS_REV" "$HY3D_REV" > /opt/mia/provenance
COPY mia_driver.py /opt/mia/mia_driver.py
WORKDIR /job
ENTRYPOINT ["python", "/opt/mia/mia_driver.py"]