Method 1: Docker (recommended)
latest tracks sglang main and is rebuilt every few days; dated tags
(dev-cu129-sglang-main-YYYYMMDD) pin a specific build. CUDA 12.9 is the only supported
build — the Dockerfile carries a CUDA 13 recipe in a comment, but its sglang-kernel pin is
hardcoded to cu129 and no CI covers it.
Build it yourself
Run
- PyTorch 2.11.0 and the sglang base image’s CUDA stack
- sglang built from main (
/sgl-workspace/sglang, editable) withsglang.multimodal_gen - FlashAttention-3 (
flash_attn_interface),sglang-kernel==0.4.5,torch_memory_saver==0.0.9 diffusers,peft,transformers,ray,wandb, andltx-corefromrequirements.txt- miles_diffusion installed editable at
/root/miles_diffusion - PaddleOCR’s English det/rec/cls weights pre-downloaded (the OCR reward would otherwise race-download them at runtime)
nccl-testsbinaries onPATHfor link diagnostics
Method 2: Update an existing container
If you already run the image and want the latest code:Method 3: Bare metal, from source
--from STEP resumes a failed run. The last step diffs every installed
package against the image’s snapshot — a clean run ends with:
python3 .claude/skills/install-miles-diffusion/verify_env.py.
Plain pip install -r requirements.txt && pip install -e . --no-deps installs, but leaves a
trainer-only environment: CPU tests and --train-only SFT run, RL does not —
sglang.multimodal_gen and FlashAttention-3 are not on PyPI. Resolving the full set through
pip is not possible (it is only consistent under --no-deps replay), which is what the
installer handles.
Verify
uv pip install tests/ci/cpu_stubs.
Hardware
Under
--colocate the training actor and the rollout engines time-share the same GPUs,
so the floor is set by whichever of the two needs more memory, not by their sum.
Environment variables
Next
- Launch Scripts — what a launch script does and how to override a recipe.
- CLI Reference — every flag.

