The official PyTorch Docker image is based on nvidia/cuda
, which is able to run on Docker CE, without any GPU. It can also run on nvidia-docker, I presume with CUDA support enabled. Is it possible to run nvidia-docker itself on an x86 CPU, without any GPU? Is there a way to build a single Docker image that takes advantage of CUDA support when it is available (e.g. when running inside nvidia-docker
) and uses the CPU otherwise? What happens when you use torch.cuda
from inside Docker CE? What exactly is the difference between Docker CE and why can't nvidia-docker
be merged into Docker CE?
You must first install NVIDIA GPU drivers on your base machine before you can utilize the GPU in Docker. As previously mentioned, this can be difficult given the plethora of distribution of operating systems, NVIDIA GPUs, and NVIDIA GPU drivers. The exact commands you will run will vary based on these parameters.
To use your GPU with Docker, begin by adding the NVIDIA Container Toolkit to your host. This integrates into Docker Engine to automatically configure your containers for GPU support. The Container Toolkit should now be operational. You're ready to start a test container.
nvidia-docker is essentially a wrapper around the docker command that transparently provisions a container with the necessary components to execute code on the GPU. It is only absolutely necessary when using nvidia-docker run to execute a container that uses GPUs.
nvidia-docker
is a shortcut for docker --runtime nvidia
. I do hope they merge it one day, but for now it's a 3rd party runtime. They explain what it is and what it does on their GitHub page.
A modified version of runc adding a custom pre-start hook to all containers. If environment variable NVIDIA_VISIBLE_DEVICES is set in the OCI spec, the hook will configure GPU access for the container by leveraging nvidia-container-cli from project libnvidia-container.
Nothing stops you from running images meant for nvidia-docker
with normal docker
. They work just fine but if you run something in them that requires the GPU, that will fail.
I don't think you can run nvidia-docker
on a machine without a GPU. It won't be able to find the CUDA files it's looking for and will error out.
To create an image that can run on both docker
and nvidia-docker
, your program inside it needs to be able to know where it's running. I am not sure if there's an official way, but you can try one of the following:
nvidia-smi
is available$CUDA_LIB_PATH
existsIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With