我有一台戴尔 xps 15 9570 笔记本电脑,配有英特尔和英伟达 GPU,运行 ubuntu linux 18.04,我想专门使用英伟达卡来训练深度神经网络。我设法让 X 服务器在英特尔上运行,如下所示
如何为 xserver 配置 igpu 以及为 cuda 配置 nvidia gpu?
当我在 gdm3 中选择使用 gnome shell(ubuntu Wayland)登录时,它运行完美。运行 nvidia-smi 显示 GPU 上没有正在运行的进程。但是现在我想尝试使用 plasma 的 kde,结果 xserver 出现在 nvidia gpu 上。
(base) ooo: (~) 505> nvidia-smi
Sat Jul 13 14:30:18 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26 Driver Version: 430.26 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 105... Off | 00000000:01:00.0 Off | N/A |
| N/A 50C P5 N/A / N/A | 66MiB / 4042MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 2073 G /usr/lib/xorg/Xorg 66MiB |
+-----------------------------------------------------------------------------+
我尝试为 X 服务器使用英特尔添加两个配置文件
/etc/X11/xorg.conf.d/01-noautogpu.conf /etc/X11/xorg.conf.d/20-intel.conf
进入 /etc/X11/xorg.conf.d 如下所述
https://gist.github.com/s41m0n/323513c95290c85f7054384ac34c41c5
不幸的是,登录后屏幕仍然是黑的。看来,plasmashell 本身找到并使用了 nvidia gpu。
如果您知道如何强制等离子使用英特尔 GPU,我将非常感激。
答案1
在发现这里的问题和答案后如何为 xserver 配置 iGPU 以及为 CUDA 工作配置 nvidia GPU,尤其是 user890178 的回答,研究系统日志后,我终于发现,plasma 没有做任何具体的事情,但使用 Xorg 时,gnome 和 plasma shell 的问题是一样的。使用 Xorg 时,gpu-manager.service
/lib/systemd/system/gpu-manager.service
由显示管理器触发
/etc/systemd/system/display-manager.service.wants/gpu-manager.service
gpu-manager 检测 nvidia 并写入文件
/usr/share/X11/xorg.conf.d/11-nvidia-prime.conf
其中包含
# DO NOT EDIT. AUTOMATICALLY GENERATED BY gpu-manager
Section "OutputClass"
Identifier "Nvidia Prime"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "IgnoreDisplayDevices" "CRT"
Option "PrimaryGPU" "Yes"
ModulePath "/x86_64-linux-gnu/nvidia/xorg"
EndSection
Wayland 不使用该文件,因此不使用 nvidia 卡,但它用于 ubuntu 和 plasma 上的 gnome-shell。因此实际上两者都将使用 nvidia 卡进行 Xorg。
然后,解决方案是 Maksym Ganenko 在上述同一问题中的答案的变体,这意味着用以下方法替换 /usr/share/X11/xorg.conf.d/11-nvidia-prime.conf
# DO NOT EDIT. AUTOMATICALLY GENERATED BY gpu-manager
Section "OutputClass"
Identifier "Nvidia Prime"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "IgnoreDisplayDevices" "CRT"
# Option "PrimaryGPU" "Yes" <<< commented out
ModulePath "/x86_64-linux-gnu/nvidia/xorg"
EndSection
# added
Section "OutputClass"
Identifier "intel"
MatchDriver "i915"
Driver "modesetting"
Option "PrimaryGPU" "yes"
EndSection
另外,为了避免 gpu-manager 在启动下一个会话时替换这些更改,请遵循 Oren 的建议gpu-manager 覆盖 xorg.conf通过运行来保护文件不被更改
chattr +i /usr/share/X11/xorg.conf.d/11-nvidia-prime.conf
我认为,将问题中提到的两个文件添加到 /etc/X11/xorg.conf.d 后屏幕仍然保持黑色,是因为 /usr/share/X11/xorg.conf.d 中的文件和配置文件确实包含矛盾的信息。
鉴于 GabrielaGarcia 的评论令人震惊地声称我所要求的东西无法在笔记本电脑上运行,我感到有必要提供证明,证明我所要求的东西可以运行,并且我提供的答案确实是一种使其运行的方法。
以下是 lspci 的输出,证明存在两个显卡
(base) m3088: (~) 505> lspci | egrep "VGA|NVIDIA"
00:02.0 VGA compatible controller: Intel Corporation Device 3e9b
01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Ti Mobile] (rev a1)
ps aux
这是过滤运行 tensorflow 会话的 Xorg、plasma 和 anaconda python的输出。这表明它们一起运行良好,而 plasma 和 Xorg 并未按预期使用 nvidia 卡(请参阅下面的 nvidia-smi)
(base) m3088: (~) 511> ps aux | egrep "Xorg|plasmashell|anaconda"
roebel 13139 0.9 5.1 17315584 819236 pts/1 Sl+ 00:23 0:10 /data/anasynth/anaconda3/bin/python /data/anasynth/anaconda3/bin/ipython
roebel 16198 0.0 0.0 21540 1068 pts/5 S+ 00:42 0:00 grep -E Xorg|plasmashell|anaconda
roebel 18886 1.5 1.3 628292 210572 tty2 Sl+ juil.14 24:22 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
roebel 19171 2.0 3.4 6576588 561212 ? Sl juil.14 33:16 /usr/bin/plasmashell
这里 nvidia-smi 的输出证明 Xorg 没有使用 nvidia,但 anaconda python 中的 tensorflow 会话正在起诉它。
(base) m3088: (~) 506> nvidia-smi
Tue Jul 16 00:34:51 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26 Driver Version: 430.26 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 105... Off | 00000000:01:00.0 Off | N/A |
| N/A 47C P8 N/A / N/A | 123MiB / 4042MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 13139 C /data/anasynth/anaconda3/bin/python 109MiB |
+-----------------------------------------------------------------------------+
我准备提供截图来证明这一切都发生在一台笔记本电脑上。
编辑针对 Ubuntu 22.04 的更新
我最终开始使用 Wayland,但不幸的是,以前的解决方案不再有效。gnome-shell 在 GPU 上运行,导致界面出现一些问题。讨论之后这里我尝试卸载 nvidia wayland 支持包
sudo apt remove libnvidia-egl-wayland1
随后gnome-shell
不再在 Nvidia GPU 上运行,从而使 GPU 可以自由地进行 DNN 训练。