WSL上识别GPU的环境配置问题(已解决)

头疼,装了一周的环境,查了很多资料,GPT和Claude都问冒烟了,还是没弄好。
目前主要的参考教程是这个“ 2023最新WSL搭建深度学习平台教程(适用于Docker-gpu、tensorflow-gpu、pytorch-gpu) - 知乎 (zhihu.com)
我的目标是:
我想在windows server服务器上,装WSL系统,然后在docker中运行tensorflow2的代码,这要求docker和WSL都能识别到GPU并利用GPU加速

目前卡在运行docker容器验证是否能识别GPU时,

docker run --rm --gpus all nvidia/cuda:12.3.2-cudnn9-devel-ubuntu20.04 nvidia-smi

结果是
"This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:

A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.

/opt/nvidia/nvidia_entrypoint.sh: line 67: /usr/bin/nvidia-smi: Permission denied
/opt/nvidia/nvidia_entrypoint.sh: line 67: exec: /usr/bin/nvidia-smi: cannot execute: Permission denied"

这应该意味着我的docker容器没法识别到我的GPU ,对吧? 我要怎么解决

我的情况是:
windows server 2022 21H2 OS Version 20348.1249 ;
我能在WINDOS终端上运行nvidia-smi 和 nvcc --version命令

nvidia-smi
Mon Apr 1 14:19:54 2024
±----------------------------------------------------------------------------------------+
| NVIDIA-SMI 551.86 Driver Version: 551.86 CUDA Version: 12.4 |
|-----------------------------------------±-----------------------±---------------------+
| GPU Name TCC/WDDM | 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 3080 Ti WDDM | 00000000:01:00.0 On | N/A |
| 0% 36C P8 15W / 350W | 175MiB / 12288MiB | 3% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+
| 1 NVIDIA GeForce RTX 2080 Ti WDDM | 00000000:03:00.0 Off | N/A |
| 28% 40C P8 18W / 250W | 0MiB / 11264MiB | 0% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+

±----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1380 C+G C:\Windows\System32\LogonUI.exe N/A |
| 0 N/A N/A 1388 C+G C:\Windows\System32\dwm.exe N/A |
| 0 N/A N/A 9048 C+G C:\Windows\System32\WUDFHost.exe N/A |
| 0 N/A N/A 9128 C+G C:\Windows\explorer.exe N/A |
| 0 N/A N/A 9136 C+G C:\Windows\System32\dwm.exe N/A |
| 0 N/A N/A 10308 C+G …Search_cw5n1h2txyewy\SearchApp.exe N/A |
| 0 N/A N/A 10816 C+G …2txyewy\StartMenuExperienceHost.exe N/A |
| 0 N/A N/A 11612 C+G C:\Program Files\ToDesk\ToDesk.exe N/A |
| 0 N/A N/A 12864 C+G …CBS_cw5n1h2txyewy\TextInputHost.exe N/A |

nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:30:42_Pacific_Standard_Time_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.3.r12.3/compiler.33567101_0

我的WSL子系统为
WSL2 Ubuntu 20.04
内核版本 :5.10.16

最初,我在WSL终端上是没法识别nvidia-smi命令的,我是通过下面2条命令解决了
cp /usr/lib/wsl/lib/nvidia-smi /usr/bin/nvidia-smi
chmod ogu+x /usr/bin/nvidia-smi
随后我就能在WSL上运行nvidia-smi命令了,如下

====================================
nvidia-smi
Mon Apr 1 14:38:58 2024
±----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.65 Driver Version: 551.86 CUDA Version: 12.4 |
|-----------------------------------------±-----------------------±---------------------+
| 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 3080 Ti On | 00000000:01:00.0 Off | N/A |
| 0% 33C P8 12W / 350W | 298MiB / 12288MiB | 2% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+
| 1 NVIDIA GeForce RTX 2080 Ti On | 00000000:03:00.0 Off | N/A |
| 22% 33C P8 17W / 250W | 0MiB / 11264MiB | 0% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+

±----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
±----------------------------------------------------------------------------------------+

我在WSL终端中没法识别nvcc 命令.

我的docker是装在 wsl里的(为节省资源).

docker version

docker version
Client: Docker Engine - Community
Version: 26.0.0
API version: 1.45
Go version: go1.21.8
Git commit: 2ae903e
Built: Wed Mar 20 15:17:51 2024
OS/Arch: linux/amd64
Context: default

Server: Docker Engine - Community
Engine:
Version: 26.0.0
API version: 1.45 (minimum version 1.24)
Go version: go1.21.8
Git commit: 8b79278
Built: Wed Mar 20 15:17:51 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.28
GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
nvidia:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0

2 Likes

NVIDIA Container Toolkit,这个插件安装了吗?

嗯嗯,我记得有在WSL中装了,我刚刚重新去确认了一下。
dpkg -l | grep nvidia-container-toolkit
ii nvidia-container-toolkit 1.15.0~rc.4-1 amd64 NVIDIA Container toolkit
ii nvidia-container-toolkit-base 1.15.0~rc.4-1 amd64 NVIDIA Container Toolkit Base
应该确实是安装成功了的

还有顺带问下各位大佬,我除了能在L站问,在StackOverflow上问,还能去哪里问呀?

油管上有个挖矿的好像有教程

ohh,有关键词指路吗

黄伟达也有相关文档的吧,cuda on wsl啥的

好的,谢谢,刚刚去看了下教程。和我之前的做法一致,我之前也是没有打算装docker,准备直接在ubuntu上安装cuda toolikit 来跑tensorflow,但我和教程中的区别是,它在windows装了最新的显卡驱动后,在wsl系统中就能直接通过nvidia-smi来查看到显卡的信息。而我的不行,我的还要执行前文中讲的那2句命令才可以使用nvidia-smi命令。(我觉得这个是核心的原因)后来我在ubuntu上跑tensorflow的测试代码也是说没法找到显卡。

快问快答赏金猎人

有偿,救救孩子55555
搞了一周环境了,科研进度迟迟没法推进,焦虑得一比

    1. 试试用nvidia-docker
    1. 检查你的toolkit版本正不正确,要和显卡、驱动都能对应上

https://zhuanlan.zhihu.com/p/408403790

看gpu for WSL驱动是否安装,可以按这个步骤重新来

不能识别nvcc很重要吗?只运行tensorflow代码、不编译算子的话,没有nvcc也不是很关键吧

嗯嗯,适不适合nvcc无所谓,只是提供下条件。最终只要能在docker容器用gpu加速跑TensorFlow,我能远程连接上这个容器即可

好,吃完饭回去继续试试

1 Like

别搞,我之前在wsl装cudann给我系统整坏了,还是租云gpu好使

只装cuda和toolikit倒是没啥问题

老哥,这教程第一步就是要升级到win11哎。我不是win11还能继续吗?关于升级,首先一个问题是,我这个服务器是windows server 2022,好像是server的最高版本了。其次是,我不想升级windows,一方面是担心升级会和重装系统一样,比较麻烦,还有就是担心潜在的因为升级而出的问题,我这台服务器是我们整个课题组的人一起用的,如果出问题,要花时间来恢复的话,我不一定担得起这个责。

1 Like

嗯嗯,也有跟着教程走过,也不行