cli
cli copied to clipboard
Option --gpus failes with AMD and Intel GPUs
Description
New option --gpus to provide the GPU to containers failes with AMD and Intel GPUs.
It is specific to systems with NVIDIA GPU and NVIDIA's proprietary driver and NVIDIA's container runtime setup.
A cli option should be general and not be vendor-specific.
Steps to reproduce the issue: On a system with an AMD GPU:
$ docker run --rm --gpus all debian echo
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
Describe the results you received:
Option --gpus all fails on a system with an AMD GPU.
Likely it also fails with Intel GPUs and with NVIDIA GPUs using the nouveau driver.
Describe the results you expected:
Option --gpus all should provide the GPU to the container.
Output of docker --version:
Docker version 19.03.1, build 74b1e89
Discussion
Coming from #1200, #1714 , opening a new ticket:
I want to analyze the current state of --gpus and make proposals:
- Either make GPU support vendor-specific to NVIDIA with
docker plugin installand drop the cli option--gpus. - Or make
--gpuswork in general for all vendors. I would prefer that.
The current state:
--gpusworks with a specific NVIDIA setup only. Dependencies:- NVIDIA GPU
- NVIDIA proprietary driver on host
- nvidia-container-toolkit on host
- nvidia/nvidia-docker image.
--gpusfails with NVIDIA GPUs not fulfilling above dependencies.--gpusfails with AMD GPUs.--gpusfails with Intel GPUs.--gpusfails with NVIDIA GPUs andnouveau.- Unknown/to check: Does
--gpuswork with the combination:- NVIDIA GPU
- NVIDIA proprietary driver on host
- same NVIDIA proprietary driver in container (arbitrary image)
- Without nvidia-container-toolkit on host
Desirable:
- Support of other vendors and
nouveauand possible existing NVIDIA driver in container. ToDo:--gpusshould provide/dev/drito container.--gpusshould provide/dev/nvidia*to container.--gpusmaybe should provide/dev/vga_arbiterto container.--gpusmaybe should add the container user to groupsvideoandrenderto support unprivileged users in container.
At least for --gpus all or e.g. --gpus intel this should not be too hard.
Maybe additional, or to be done by the user:
- Driver check on host and in container by docker.
- Driver installation in container by docker. (Probably going too far. However, possible e.g. with NVIDIA's proprietary driver. I am not sure how to accomplish this with MESA drivers, but likely possible, too.)
@mviereck thanks, it was always meant to be vendor-neutral. If you want to contribute to the moby/moby repo to add support for other GPU vendors, you are more than welcome! We would need expertise from the various GPU vendors which I don't have. @RenaudWasTaken was providing NVIDIA expertise hence the first implementation.
If you want to contribute to the moby/moby repo to add support for other GPU vendors, you are more than welcome! We would need expertise from the various GPU vendors which I don't have.
Thanks! I am not experienced with Go, though, so I cannot contribute directly with code. However, I have some experience in providing GPUs of all vendors to docker containers. My project x11docker allows to run GUI applications in docker containers, optionally with GPU hardware acceleration.
This works quite well with MESA drivers on host and in image, even if host and container system are quite different (e.g. debian host and alpine image). Given MESA is installed, all you need is described above:
--gpusshould provide/dev/drito container.--gpusshould provide/dev/nvidia*to container.--gpusmaybe should provide/dev/vga_arbiterto container.--gpusmaybe should add the container user to groupsvideoandrenderto support unprivileged users in container.
However, this does not cover additional setups like limited GPU memory access. That would indeed need expertise from the vendors. But the probably most common --gpus all would be served.
These packages cover all MESA packages needed in their dependencies:
| Debian and Ubuntu |
Arch | Fedora | Alpine | |
|---|---|---|---|---|
| OpenGL | mesa-utilsmesa-utils-extra |
mesa-demos |
glx-utilsmesa-dri-drivers |
mesa-demosmesa-dri-atimesa-dri-intelmesa-dri-nouveaumesa-dri-swrast |
| Video decoding support | libxv1va-driver-all |
libxvlibvalibva-intel-driver libva-vdpau-driver |
libXvlibvalibva-intel-hybrid-driverlibva-vdpau-driver |
libxvlibvalibva-glxlibva-intel-driverlibva-vdpau-driver |
You may have a look at this article: The AMD Deep Learning Stack Using Docker by Sam Tehrani
is there any progress with it?
I don't think contributions have been made to provide support for other GPU vendors, so no change
Checking in, any progress on this? Thank you.
No, no progress (that I'm aware of)
It doesn't need to support other vendors, but it should not be crashing like this
$ docker run --gpus all -it ubuntu:20.04
Unable to find image 'ubuntu:20.04' locally
20.04: Pulling from library/ubuntu
Digest: sha256:fd92c36d3cb9b1d027c4d2a72c6bf0125da82425fc2ca37c414d4f010180dc19
Status: Downloaded newer image for ubuntu:20.04
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
ERRO[0003] error waiting for container: context canceled
Also, look at this error message. It doesn't say Nvidia GPU not detected. It says ERR[0003]. This is not user friendly.
Facing the same error, using an eGPU that is turned on and off when needed. It would be highly desirable if the container would start without the eGPU being present.
And this is still an issue smh
any update?
Docker is a masive project. Basic hardware support is required.
@slmlm2009 Docker is used by a lot of people, but so far no one has contributed anything towards making this work.
Note that nvidia are the ones that did the work to make --gpus work with nvidia hardware.
Another thing to note: docker v25 will ship with CDI support which may end up being the best place to handle gpus all around.