Docker¶
The checked-in Dockerfile is the Linux NVIDIA/CUDA container path. It installs
UniLab runtime dependencies, the Motrix extra, and dev/test tooling. macOS Docker
is not a primary path, and ROCm uses a separate image (see below) rather than
this CUDA Dockerfile.
Build¶
docker build -t unilab:latest .
Quickly check the image entrypoint (it defaults to uv run train --help):
docker run --rm unilab:latest
Check CUDA visibility inside the container:
docker run --rm --gpus all unilab:latest \
uv run python -c "import torch; print(torch.cuda.is_available())"
Run With A Mounted Checkout¶
docker run --rm --gpus all -it \
-v "$(pwd):/workspace/UniLab" \
-v unilab-venv:/workspace/UniLab/.venv \
-w /workspace/UniLab \
unilab:latest bash
Putting .venv in a named volume keeps the container’s virtual environment from
overwriting the host repository directory, and leaves the host uv workflow
clean when you switch back to it.
Inside the container, use the same commands as the host workflow:
uv run train --algo ppo --task go2_joystick_flat --sim mujoco
uv run train --algo sac --task g1_walk_flat --sim mujoco
Evaluation and playback work the same way inside the container; --load-run -1
picks the latest run:
uv run eval --algo ppo --task go2_joystick_flat --sim mujoco --load-run -1
Because the checkout is bind-mounted, training artifacts still write back to the
mounted repository’s logs/ directory.
ROCm Containers¶
ROCm containers use AMD’s ROCm PyTorch image and the make sync-rocm workflow
instead of the repository’s CUDA Dockerfile. Inside the container, run
make sync-rocm first to activate the ROCm profile, then use uv run ... for
training. The container typically needs the AMD device mounts /dev/kfd and
/dev/dri, plus --group-add=video and --ipc=host.
A minimal example using AMD’s ROCm PyTorch image:
docker run --rm -it --network=host --ipc=host \
--device=/dev/kfd --device=/dev/dri --group-add=video \
-v "$(pwd):/workspace/UniLab" -w /workspace/UniLab \
rocm/pytorch:latest bash
Use the ROCm PyTorch image tag that matches your installed ROCm version; see AMD’s ROCm PyTorch images for the available tags.