Docker Training Guide
Containerized Deployment
Prerequisites
Docker permissions — add your user to the docker group to avoid sudo:
newgrp docker) for the change to take effect.
NVIDIA Container Toolkit — required for GPU passthrough (--gpus all):
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Build Image
# Option 1: convenience script
bash docker/build.sh
# Option 2: manual build (from repo root)
docker build -t orchard-ml:latest -f docker/Dockerfile .
Execution Modes
Standard Mode (Performance Optimized):
docker run -it --rm \
--gpus all \
--shm-size=8g \
-u $(id -u):$(id -g) \
-v $(pwd)/dataset:/app/dataset \
-v $(pwd)/outputs:/app/outputs \
orchard-ml:latest \
recipes/config_resnet_18.yaml
Strict Reproducibility Mode (Bit-Perfect Determinism):
docker run -it --rm \
--gpus all \
--shm-size=8g \
-u $(id -u):$(id -g) \
-e DOCKER_REPRODUCIBILITY_MODE=TRUE \
-e PYTHONHASHSEED=42 \
-v $(pwd)/dataset:/app/dataset \
-v $(pwd)/outputs:/app/outputs \
orchard-ml:latest \
recipes/config_resnet_18.yaml
[!NOTE] -
TORCH_HOME,MPLCONFIGDIR,IN_DOCKER, andCUBLAS_WORKSPACE_CONFIGare pre-set in the image and do not need to be passed at runtime -PYTHONHASHSEEDmust be set at container startup (before the Python interpreter loads) to guarantee hash determinism — the image default is0, override with-eif a specific seed is needed ---gpus allrequires NVIDIA Container Toolkit