uv-managed virtual environment. Each course has its own repository, and your assignment page links to the right one.
Installing Docker
We recommend VS Code as your IDE due to its support for Dev Containers. Install Docker for your operating system:Windows.
Install WSL and follow the instructions below to install Docker natively in WSL. Do not install Docker Desktop - all development must happen in the Ubuntu terminal.Ubuntu
Follow the Docker Engine instructions. Never install Docker as a snap package. The snap version runs under strict AppArmor confinement that only permits bind mounts from a small allow-list.Apple Silicon (M1/M2/M3/M4)
Containers on a Mac run inside a Linux virtual machine, and Metal is not exposed to it. PyTorch in a container on an M-series Mac therefore runs on the CPU, and themps device is unavailable. The chip’s GPU sits idle.
What follows from that depends on your course.
AI and computer vision. Docker is optional. Installing directly on macOS lets PyTorch use the GPU through Metal, which is much faster than the CPU container, at the cost of drifting from the pinned environment. The Working on a Mac guide covers the setup and states the tradeoff in full.
If you prefer the container anyway, install Docker Desktop and use torch.dev.cpu. It works, and for small notebooks the difference is not worth the setup.
Robotics. Docker is required, and the setup is different from the services on this page. See ROS container.
Configuration
All Docker services read their configuration from a.env file in the repository root. Copy the example to get started:
docker-compose.yml loads .env via env_file, making all variables available inside every container.
Docker Compose services
Three services are defined indocker-compose.yml:
All services mount the repository as a workspace volume, so edits on the host are immediately reflected inside the container.
Build targets
Build containers usingmake from the repository root:
Run targets
Development setup
Once inside a container (or on the host with Python 3.11+), use these targets to set up the development environment:Port mappings
Each service exposes ports for development tools:Port mappings can be customized through environment variables in
.env (e.g., DEV_JUPYTER_PORT=8888).
