← 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.
- 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 - 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 - 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> - 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 - 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 - 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 group | transformers | torch | extra deps | models |
|---|---|---|---|---|
| lerobot | bundled with lerobot | >= 2.7 (separate venv) | lerobot[smolvla] | SmolVLAπ0 (pi-zero)π0.5 |
| openvla | 4.40.1 | system 2.5.1 (5090 needs 2.8) | timm==0.9.10 · tokenizers==0.19.1 · accelerate | OpenVLAMiniVLAVLA-Adapter |
| spatialvla | 4.47.0 | system 2.5.1 (5090 needs 2.8) | accelerate · scipy | SpatialVLA |
| qwen | 4.57.1 | system 2.5.1 (5090 needs 2.8) | accelerate · qwen-vl-utils · einops | NORAMolmoAct |
Recipes
One page per model: environment, weights, run command, pitfalls, measured latency.
Hugging Face (LeRobot)
SmolVLA
venv lerobot · 2.0 GB weights · 2 pitfalls
NVIDIA RTX 4090170 msNVIDIA RTX 5090166 msNVIDIA A800 80GB226 ms
Open recipe →
Stanford / UC Berkeley / TRI et al. (OpenVLA team)
OpenVLA
venv openvla · 15.2 GB weights · 2 pitfalls
NVIDIA RTX 4090162 msNVIDIA RTX 5090146 msNVIDIA A800 80GB187 ms
Open recipe →
Shanghai AI Laboratory et al.
SpatialVLA
venv spatialvla · 8.5 GB weights · 3 pitfalls
NVIDIA RTX 4090376 msNVIDIA RTX 5090362 msNVIDIA A800 80GB451 ms
Open recipe →
Declare Lab (SUTD)
NORA
venv qwen · 7.5 GB weights · 2 pitfalls
NVIDIA RTX 4090112 msNVIDIA RTX 5090129 msNVIDIA A800 80GB146 ms
Open recipe →
Allen Institute for AI(Ai2)
MolmoAct
venv qwen · 30.0 GB weights · 4 pitfalls
NVIDIA RTX 4090934 msNVIDIA RTX 5090675 msNVIDIA A800 80GB937 ms
Open recipe →
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.
Clear direction, grounded judgement.