docker build with nvidia runtime
Solution 1
You need use nvidia-container-runtime as explained in docs: "It is also the only way to have GPU access during docker build".
Steps for Ubuntu:
-
Install nvidia-container-runtime:
sudo apt-get install nvidia-container-runtime
Edit/create the /etc/docker/daemon.json with content:
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
-
Restart docker daemon:
sudo systemctl restart docker
-
Build your image (now GPU available during build):
docker build -t my_image_name:latest .
Solution 2
A "solution" I found is to first run a base image with the host nvidia drivers mounted on it
docker run -it --rm --gpus ubuntu
And then build my app within the container manually and commit the resulting image. This is not ideal and it would be best to have access to nvidia-smi during the build phase.
danny
Updated on June 06, 2022Comments
-
danny 7 months
I have a GPU application that does unit-testing during the image building stage. With Docker 19.03, one can specify nvidia runtime with
docker run --gpus all
but I also need access to the gpus fordocker build
because I do unit-testing. How can I achieve this goal?For older version of docker that use nvidia-docker2 it was not possible to specifiy runtime during build stage, BUT you can set the default runtime to be nvidia, and docker build works fine that way. Can I do that in Docker 19.03 that doesn't need nvidia-docker anymore? If so, how?
-
shortcipher3 almost 3 yearsThis response seems to be relevant to
docker run
notdocker build
-
Anton Ganichev over 2 yearsThis is due to a syntax error (extra comma in 6-th line). Fixed now.
-
RunOrVeith over 1 yearFYI if you need this because you want to compile custom kernels with pytorch, you can use the nvidia development base image (e.g. nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04) and set
ENV TORCH_CUDA_ARCH_LIST=Turing
, then you can also build them without having a GPU available during build -
juanpa.arrivillaga about 1 yearSo, literally the only way to get
build
to use the nvidia runtime (or I guess, any other runtime) is to set it as the default? Geez. How is this not an option?