По какой-то причине любой докер-контейнер с CUDA не видит мой графический процессор.
Когда я запускаю это:
docker run --gpus=all --rm nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
У меня есть этот вывод:
...
Error: only 0 Devices available, 1 requested. Exiting.
Контейнер CUDA не может найти мой графический процессор.
Я нашел много подобных вопросов на форумах, но не нашел удовлетворительного ответа. Кто-нибудь из вас нашел причину, по которой это происходит с WSl2/Docker Desktop/Win10/Ubuntu20.04? У меня есть последние версии драйверов для CUDA и NVIDIA, а также последняя версия WSL2 и Docker-Desktop.
Но nvidia-smi и nvcc --version работают.
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Apr_17_19:19:55_PDT_2024
Cuda compilation tools, release 12.5, V12.5.40
Build cuda_12.5.r12.5/compiler.34177558_0
$ nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.42.03 Driver Version: 555.85 CUDA Version: 12.5 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti On | 00000000:01:00.0 On | N/A |
| 0% 53C P8 16W / 165W | 1045MiB / 16380MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 21 G /Xwayland N/A |
| 0 N/A N/A 23 G /Xwayland N/A |
+-----------------------------------------------------------------------------------------+
Это тоже работает -> кажется, что это связано исключительно с CUDA.
/mnt/c/Users/pavel$ docker run --rm --gpus=all ubuntu nvidia-smi -L
GPU 0: NVIDIA GeForce RTX 4060 Ti (UUID: GPU-28820d91-b332-b4ba-f1c8-5508048ce1f7)
Мое окружение:
wsl --version
Verze WSL: 2.1.5.0
Verze jádra: 5.15.146.1-2
Verze WSLg: 1.0.60
Verze MSRDC: 1.2.5105
Verze Direct3D: 1.611.1-81528511
Verze DXCore: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Verze Windows: 10.0.19045.4412
docker info
Client:
Version: 26.1.1
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.14.0-desktop.1
Path: C:\Program Files\Docker\cli-plugins\docker-buildx.exe
compose: Docker Compose (Docker Inc.)
Version: v2.27.0-desktop.2
Path: C:\Program Files\Docker\cli-plugins\docker-compose.exe
debug: Get a shell into any image or container (Docker Inc.)
Version: 0.0.29
Path: C:\Program Files\Docker\cli-plugins\docker-debug.exe
dev: Docker Dev Environments (Docker Inc.)
Version: v0.1.2
Path: C:\Program Files\Docker\cli-plugins\docker-dev.exe
extension: Manages Docker extensions (Docker Inc.)
Version: v0.2.23
Path: C:\Program Files\Docker\cli-plugins\docker-extension.exe
feedback: Provide feedback, right in your terminal! (Docker Inc.)
Version: v1.0.4
Path: C:\Program Files\Docker\cli-plugins\docker-feedback.exe
init: Creates Docker-related starter files for your project (Docker Inc.)
Version: v1.1.0
Path: C:\Program Files\Docker\cli-plugins\docker-init.exe
sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
Version: 0.6.0
Path: C:\Program Files\Docker\cli-plugins\docker-sbom.exe
scout: Docker Scout (Docker Inc.)
Version: v1.8.0
Path: C:\Program Files\Docker\cli-plugins\docker-scout.exe
Server:
Containers: 11
Running: 6
Paused: 0
Stopped: 5
Images: 47
Server Version: 26.1.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 nvidia runc
Default Runtime: runc
Init Binary: docker-init
containerd version: e377cd56a71523140ca6ae87e30244719194a521
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: unconfined
Kernel Version: 5.15.146.1-microsoft-standard-WSL2
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 5
Total Memory: 39.18GiB
Name: docker-desktop
ID: 88425de8-c396-4a90-9fea-afb64822deaa
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Labels:
com.docker.desktop.address=npipe://\\.\pipe\docker_cli
Experimental: false
Insecure Registries:
hubproxy.docker.internal:5555
127.0.0.0/8
Live Restore Enabled: false
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WARNING: daemon is not using the default seccomp profile
nvidia-smi
Fri May 31 08:47:59 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.85 Driver Version: 555.85 CUDA Version: 12.5 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti WDDM | 00000000:01:00.0 On | N/A |
| 0% 54C P8 16W / 165W | 1083MiB / 16380MiB | 2% Default |
| | | N/A |
Убунту 20.04
Я уже пробовал несколько установок и чистую установку драйверов NVIDIA, CUDA Toolkit, NVIDIA Container Toolkit и т. д.
Судя по тому, что я обнаружил, существует большая разница в том, что люди должны установить в свою среду Win10/WSL2, чтобы CUDA заработала. Некоторые устанавливают последнюю версию драйвера NVIDIA. Некоторые устанавливают как CUDA Win10 Toolkit, так и CUDA WSL-Ubuntu Toolkit. Кроме того, некоторым людям пришлось установить Nvidia Container Toolkit, а некоторым — нет.
Попал в бесконечный круг перепробования всех возможных комбинаций установок, но кажется, что-то упускаю.
Кто-нибудь сталкивался с таким же и нашел решение? Спасибо!!
если кто-то сталкивается с этой проблемой с версией драйвера 555.85 (CUDA 12.5), решение — перейти на версию 552.22 (CUDA 12.4) ( https://www.nvidia.com/download/driverResults.aspx/224154/en-us/ )
Если вам нужно только запускать контейнеры CUDA Действия — удалите все пакеты nvidia и cuda из wsl Удалите набор инструментов CUDA в Windows.
Загрузите драйвер 552.22 с CUDA 12.4 внутри.
Запустите чистую установку.
Перезагрузить
docker run --gpus all --rm nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Теперь должно работать :)
У меня была та же проблема, и понижение версии драйвера не помогло (сейчас 556.12).
Вместо этого я нашел этот комментарий на GitHub, в котором говорилось обновить no-cgroups
до false
в /etc/nvidia-container-runtime/config.toml
.
sudo sed -i 's/no-cgroups = true/no-cgroups = false/' /etc/nvidia-container-runtime/config.toml
Затем перезагрузил докер и работает нормально.
Братан! Это действительно сработало после нескольких часов попыток.