← Sinan Lab › Deployment recipes

Deployment recipes

Exact commands and version pins from the runs behind our latency measurements, on pay-as-you-go GPUs in China (AutoDL). Every step here was executed, every pitfall was hit and fixed. We publish only what actually ran; models we could not reproduce are listed with the reason.

Machine:AutoDL pay-as-you-go instance, image PyTorch 2.5.1 + CUDA 12.4 (miniconda, Python 3.12), 50 GB data disk at /root/autodl-tmp · 2026-09-18

Common steps (AutoDL, China)

Mirrors, environments and disk handling that apply to every model below.

  1. Point pip at the Huawei Cloud mirror. Measured 8 MB/s from that datacenter; Aliyun and Tsinghua mirrors only did KB/s there.
    pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple && pip config set global.trusted-host repo.huaweicloud.com
  2. Fetch weights through hf-mirror.com, keep the cache on the data disk, and disable Xet transfer (it 401s or stalls on the mirror); uninstall hf_xet as well.
    export HF_ENDPOINT=https://hf-mirror.com HF_HOME=/root/autodl-tmp/hf HF_HUB_DISABLE_XET=1 && pip uninstall -y hf_xet hf-xet
  3. Models pin conflicting transformers versions, so build one venv per group (sharing the system torch via --system-site-packages): openvla group 4.40.1, spatialvla group 4.47.0, qwen group 4.57.1; lerobot needs torch ≥ 2.7 and gets its own full venv.
    python -m venv --system-site-packages /root/envs/<group>
  4. Download large weights sequentially before running; a 7B checkpoint takes 20–40 min on the mirror and parallel downloads slow each other down. Wrap the download in a retry loop. Delete the weights after a successful run: the 50 GB disk will not hold a second 7B model.
    for i in 1 2 3 4; do python -c "from huggingface_hub import snapshot_download as s; s('<repo>')" && break; sleep 15; done
  5. SSH sessions drop. Start long jobs with nohup and disown; kill by exact match (pgrep -f "^/root/envs/...") because a loose pkill -f takes your own shell down too.
    nohup bash run_matrix.sh <hardware> <model> > run.log 2>&1 & disown
  6. The RTX 5090 (Blackwell, sm_120) cannot run the image's torch 2.5.1; upgrade to torch 2.8.0 (cu128) first. setup_autodl.sh detects this automatically.
    pip install torch==2.8.0 torchvision==0.23.0

Environment matrix

Models pin conflicting transformers versions; keep one venv per group.

venv grouptransformerstorchextra depsmodels
lerobotbundled with lerobot>= 2.7 (separate venv)lerobot[smolvla]SmolVLAπ0 (pi-zero)π0.5
openvla4.40.1system 2.5.1 (5090 needs 2.8)timm==0.9.10 · tokenizers==0.19.1 · accelerateOpenVLAMiniVLAVLA-Adapter
spatialvla4.47.0system 2.5.1 (5090 needs 2.8)accelerate · scipySpatialVLA
qwen4.57.1system 2.5.1 (5090 needs 2.8)accelerate · qwen-vl-utils · einopsNORAMolmoAct

Recipes

One page per model: environment, weights, run command, pitfalls, measured latency.

Not reproduced (yet)

Listed with the blocker. No latency numbers are published for these.

  • π0 (pi-zero) · Needs the Google PaliGemma tokenizer, which is gated on Hugging Face (licence acceptance required); not reachable through the mirror route.
  • π0.5 · Same as π0: the PaliGemma tokenizer is gated.
  • MiniVLA · Weights are in the prismatic format and need the openvla-mini runtime rather than transformers remote code; not set up in phase one.
  • VLA-Adapter · Same as MiniVLA: depends on the prismatic runtime.
SinanLab · Sinan LabClear direction, grounded judgement.