避免在 Xorg 和 Plasma 上使用 nvidia 卡

避免在 Xorg 和 Plasma 上使用 nvidia 卡

我有一台戴尔 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 训练。

相关内容