我有一块 6800 XT GPU,运行在 Windows 10 21H2(OS Build 19044.1889)上,并安装了 WSL2 Debian(内核版本5.10.102.1-microsoft-standard-WSL2
)。图形驱动程序(Adrenaline 22.5.2)安装在 Windows 系统上,运行正常:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS C:\Users\Quant> wmic path win32_VideoController get name
Name
AMD Radeon RX 6800 XT
但是,当我打开 WSL2 终端并运行lspci
或glxinfo
我希望看到有关 GPU 的信息时,我没有看到:
DESKTOP-NHBC022@arman: ~ $ lspci
831e:00:00.0 3D controller: Microsoft Corporation Device 008e
DESKTOP-NHBC022@arman: ~ $ glxinfo
Error: unable to open display
我尝试过的事情:
- 将内核更新至 5.10.x
- 检查是否
/dev/dxg
存在(确实存在) sudo apt-get install libegl-mesa0
(我有版本18.3.6-2+deb10u1
)
我尝试阅读本教程;https://docs.microsoft.com/en-us/windows/wsl/tutorials/gpu-compute,但它似乎假设你的 GPU 已经在 WSL 中可用,而我的不是。
我如何让 Debian 看到/使用 GPU?请注意,我对 GUI 应用程序不感兴趣,据我所知,这是 Windows 11 的功能。我只希望 GPU 可以在 Debian 中用于 Tensorflow。
更新:
我已经卸载了 Debian,并从头安装了 Ubuntu。同样的问题:
quant@DESKTOP-NHBC022:~$ uname -r
5.10.102.1-microsoft-standard-WSL2
quant@DESKTOP-NHBC022:~$ lspci
5254:00:00.0 3D controller: Microsoft Corporation Device 008e
答案1
不幸的是,我所有剩余的 Windows 10 系统都配备了较旧的 GPU,不支持 WSL GPU Compute,所以我无法确认这一点,但是......
我强烈怀疑你已经拥有了你需要的一切。
检查是否
/dev/dxg
存在(确实存在)
这实际上是一个很好的指标,表明 GPU Compute 已经准备就绪。
当我……运行时
lspci
,glxinfo
我期望看到有关 GPU 的信息,但我没有
来自手册页: 该
glxinfo
程序显示有关在给定 X 显示器上运行的 OpenGL 和 GLX 实现的信息由于您无法在 Windows 10 下运行 X,因此
glxinfo
失败也就不足为奇了。即使在 Windows 11 上,如果我取消DISPLAY
设置变量,glxinfo
也会显示相同的消息。对我来说这很正常。
lspci
对我来说,Windows 11 上返回的内容相同。这也是意料之中的。实际设备是由 WSL 创建的虚拟设备,它将虚拟设备的基本功能映射到物理 GPU。我可以确认,即使有了
3D controller: Microsoft Corporation Device 008e
基本的 TensorFlow/DirectML 测试这里工作正常。
因此我建议你现在尝试一下 TensorFlow/DirectML。如果你在使用那,我建议在 Stack Overflow 上提出一个问题(因为它在 SU 上与主题无关)。
如果您遇到问题,我会尽力在 Stack Overflow 上提供帮助,但我不保证我能帮助您解决此问题。我基本上是 TensorFlow 新手,但我对 WSL 有相当多的经验。
附注——这是我在 WSL 上运行 TensorFlow 的方法:
我使用的是 Ubuntu 22.04,其中默认的 Python 是基于 3.10 的。即使在 Debian Bullseye 上,据我所知,软件包版本也是 3.9,所以这实际上是太新了for
tensorflow-directml
,只能在 3.7 及以下版本上运行。出于这个原因,并且由于我已经安装了 Docker Desktop,我决定在基于 Debian 的 Python 3.7 Docker 映像中运行。
--gpus all
GPU 需要通过或构造共享到 Docker 容器中--device
。最关键的是,WSL 中的 GPU 计算功能在启动时被“注入”到 WSL 实例中。该目录
/usr/lib/wsl/lib
是作为“覆盖”挂载创建的。但它没有当然,它存在于 Docker 容器中。所以我们也需要共享它,并进行LD_LIBRARY_PATH
适当的设置。礼貌这个博客显然是几天前的事了。我还没有翻译它,但至少命令行是英文的 ;-)。最后,
protobuf
安装的软件包tensorflow-directml
太新,需要按这个答案。我正在使用 nVidia GPU,但对于 AMD 来说,过程应该相同。
我也使用 5.10.102.1 内核,但在 Windows 11 上使用 WSL Preview 版本 0.64.0。
考虑到所有这些...
docker pull python:3.7
docker run --gpus all --mount type=bind,src=/usr/lib/wsl,dst=/usr/lib/wsl -e LD_LIBRARY_PATH=/usr/lib/wsl/lib -it --rm python:3.7 bash
pip install protobuf==3.20.*
pip install tensorflow-directml
python
这在这里进行快速测试然后在那个 Python 会话中工作。