如何为 xserver 配置 igpu 以及为 cuda 配置 nvidia gpu?

如何为 xserver 配置 igpu 以及为 cuda 配置 nvidia gpu?

Ubuntu 16.04

输出uname -a

Linux HOST 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

桌面级:

  • CPU:英特尔
  • GPU:Nvidia,361.42

我想要的是:

  • 英特尔 GPU 将运行 xserver 和我的显示器,该显示器连接到板载 DP
  • nvidia GPU 只能用于 CUDA 特定计算等。
  • 完全控制 nvidia gpu(实时、统计数据、温度风扇速度……)

我的问题:

  • nvidia-smi两者都不起作用nvidia-settings,我无法控制我的 nvidia GPU(错误在下面列出)

我的故事:

在简要概述我的问题之后,我想深入探讨这个话题;自 Ubuntu 16.04 发布以来,我一直在修修补补,但未能实现以下目标:

  • 我希望我的英特尔 GPU(i7 6700K)能够驱动我的 Xserver 及其相关的一切。
  • 我希望我的专用 nvidia GPU 仅用于基于 Cuda 的计算等。
  • 解决问题后,我将向系统添加多个 nvidia GPU。

我的初始状态的简要总结:

我通过 apt-get 安装了 nvidia 和 intel 的专有驱动程序(intel-microcode 和 nvidia-361.42),并通过 mokutul --disable-validation 禁用了安全启动。
然后我将 nvidia-prime 设置为使用 intel 卡。
然后我编辑了我的 xorg.conf,使其仅包含一个带有 intel gpu 和 intel 驱动程序的屏幕。(如果需要,请询问详细信息)
使用 Blender 测试 GPU 进行渲染,一切似乎都很好,只是我无法获取我的 gpu 的任何统计数据,并且 nvidia-settings 显示为空。

错误:

sudo nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system:
Please also try adding directory that contains libnvidia-ml.so to your system PATH.

自发布以来,通过我的所有尝试和研究,我迄今为止学到了什么(简短版本,可随时询问详细信息):

我的两个问题相关但不相同:

Nvidia-settings 为空:

  • 这是因为只有当 Xserver 连接到 nvidia GPU 时,这些设置才会显示
  • 解决方案是在 xorg.conf 中添加一个新屏幕,强制未使用的 xserver 在 nvidia GPU 上运行
  • 但目前这是不可能的(见其他问题)并且也不是我想要的,因为我纯粹希望 nvidia GPU 专注于 Cuda

Nvidia-smi 不工作:

  • bbswitch 不是问题,因为我的 GPU(550ti)不支持它(dmesg 中的错误)
  • nvidia prime 将 x86_64-linux-gnu_gl_conf 的条目更改为/usr/lib/nvidia-361/ld.so.conf(nvidia GPU selected) 或/usr/lib/nvidia-361-prime/ld.so.conf(intel GPU selected)
  • 英特尔选择的配置缺少基本 nvidia 模块的基本路径,而这些路径均存在于 nvidia 选择的配置中
  • 当通过 prime-select 切换到 nvidia 时,我没有 Xserver,因为显示器连接到集成 GPU,但在虚拟控制台 nvidia-smi 上登录可以工作

我的假设:

  • Nvidia prime 很糟糕,不符合我的要求。
  • 我必须以某种方式克服主要问题并配置系统(甚至手动编写新的配置?)

我的尝试:

  • 我尝试卸载 nvidia-prime,但事后才意识到,这根本行不通。删除 x86_64-linux-gnu_gl_conf 的 conf 文件后,结果一片混乱……
  • 我甚至尝试手动将缺失的路径添加到 x86_64-linux-gnu_gl_conf 文件中,但我并不真正知道自己在做什么,而且没有成功。

我的问题:

1) 我该如何解决 nvidia-smi 问题?我的方法正确吗?有人能告诉我该怎么做吗?

2) 是否可以在 gpu 上没有 Xserver(xorg.conf 中没有 gpu 屏幕)的情况下启用风扇控制和 nvidia gpu 的进一步控制(xorg.conf 中的 coolbits)?

在此先非常感谢大家的回复。我确实仔细搜索了网络,但搜索是我的问题所在。
如果我遗漏了任何重要信息,请告诉我,并随时索取日志文件等。

谢谢

图片

我的附加驱动程序选项卡图像: 在此处输入图片描述

答案1

我(这篇文章的创建者)自己找到了我需要的解决方案!

我现在将为处于类似情况并需要帮助的人解释解决方案!

解决方案:
通过提供的运行文件安装 NVIDIA 驱动程序http://www.nvidia.com/object/unix.html使用标志“--no-opengl-files”!!

这不仅可以防止 nvidia opengl 文件覆盖现有的 mesa 文件,还可以安装没有 nvidia prime 的驱动程序!!

所以我的所有问题都解决了,只需手动安装驱动程序,而不是从存储库安装。存储库中的软件包是“Optimus-Friendly”,因此捆绑了所有无用的麻烦制造者。

第二

xorg.conf 必须通过另一个屏幕扩展专用 GPU,以便它/它们在 nvidia-settings 中具有条目。

我的看起来像这样

Section "ServerLayout"
    Identifier     "Layout0"
    Screen 0       "intel" 0 0
    Screen 1       "nvidia550ti" 3000 0
EndSection

Section "Device"
    Identifier     "intel"
    Driver         "intel"
    BusID          "PCI:0@0:2:0"
EndSection

Section "Device"
    Identifier     "nvidia550ti"
    Driver         "nvidia"
    BoardName      "GeForce GTX 550ti"
    BusID          "PCI:2@0:0:0"
EndSection

Section "Screen"
    Identifier     "intel"
    Device         "intel"
EndSection

Section "Screen"
    Identifier     "nvidia550ti"
    Device         "nvidia550ti"
    Option         "AllowEmptyInitialConfiguration" "on"
    Option         "Coolbits" "4"
    Option         "ConstrainCursor" "on"
EndSection

答案2

我按照上述解决方案重新安装了不带 opengl 的 nvidia 驱动程序,但对我不起作用。此外,这些解决方案并不令人满意,因为它们意味着删除驱动程序(opengl)的某些功能。

我发现了一个更简单的解决方案,您不需要重新安装驱动程序:

  • 我正常安装了 nvidia 驱动程序
  • 在 nvidia-settings gui 中,在 PRIME 配置文件下,我选择英特尔显卡作为主 GPU
  • 重启后,nvidia-smi 不起作用,但我通过添加解决了这个问题/usr/lib/nvidia-387到库路径:
    export LD_LIBRARY_PATH=/usr/lib/nvidia-387:$LD_LIBRARY_PATH

请注意,根据安装的驱动程序,您可能需要在库路径中添加另一个文件夹,例如/usr/lib/nvidia-384
您可以将此命令添加到文件~/.bashrc在加载新的 bash 时自动导出路径。

答案3

可接受的答案使用 X 服务器来启用 Nvidia 设备。这不是必需的,这意味着 X 服务器将使用卡的一些内存。

nvidia-modprobe应该按照驱动程序常见问题解答中所述进行安装(可在下面的链接中找到)。

因此我推荐的解决方案是:

1)通过运行文件安装最新的 Nvidia 驱动程序ftp://download.nvidia.com/XFree86/Linux-x86_64/使用--no-opengl-files--dkms标志。2
)通过和安装相应的nvidia-modprobe版本make allsudo make installftp://download.nvidia.com/XFree86/nvidia-modprobe/

--dkms标志确保在升级内核时重新编译内核模块。

答案4

我获得了您想要的配置(我也想要它;)):

  • 英特尔 GPU 将运行 xserver 和我的显示器,该显示器连接到板载 DP
  • nvidia GPU 只能用于 CUDA 特定计算等。
  • 完全控制 nvidia gpu(实时、统计数据、温度风扇速度……)

通过使用bumblebee

但在详细介绍之前,我应该提醒您,在更改 nvidia-settings 或 xorg.conf 或 nvidia prime 的配置时,您必须重新启动系统(也许您已经知道)。不重新启动可能会导致系统处于不一致的状态。


在我的配置中我没有触碰xorg.conf。对我来说,这样做总是很痛苦。请将其保留为原始状态。如果您不想执行全新安装,您可以在/etc/X11/( ls /etc/X11/xorg.conf*) 中找到一些备份。

第一步是尝试工作nvidia-settings。如果成功,您可以使用 nvidia PRIME 切换到英特尔 GPU,正如您提到的那样。如果您只想将 NVIDIA GPU 用于 CUDA 计算,则需要让 nvidia prime 指向英特尔 GPU(如果您想使用 cuda 调试器,则尤其需要cuda-gdb)。

之后你可以尝试安装熊蜂

sudo apt install bumblebee

重启。你可以使用以下命令监控 bumblebee 的状态

sudo service bumblebeed status

或者

bumblebeed -vv

optirunbumblebee 的作用是激活 NVIDIA GPU,并仅在需要时尝试将 nvidia 驱动程序插入内核。您可以通过将 bumblebee添加到要运行的命令之前来使用它。

为了使大黄蜂工作,我必须手动编辑/etc/bumblebee/bumblebee.conf以正确设置 nvidia 驱动程序名称和路径。

[...]
Driver=nvidia
[...]
KernelDriver=nvidia_361
[...]
LibraryPath=/usr/lib/nvidia-361:/usr/lib32/nvidia-361

然后,过了一会儿,sudo service bumblebeed restart我设法启动了大黄蜂系统。

事实上nvidia-smi回报

$ nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system:
Please also try adding directory that contains libnvidia-ml.so to your system PATH.

optirun nvidia-smi

$ optirun nvidia-smi
Fri Jun 17 11:47:48 2016       
+------------------------------------------------------+                       
| NVIDIA-SMI 361.42     Driver Version: 361.42         |                       
|-------------------------------+----------------------+----------------------+
| 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 970M    Off  | 0000:01:00.0     Off |                  N/A |
| N/A   53C    P1    18W /  N/A |     18MiB /  3071MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0     20678    G   /usr/lib/xorg/Xorg                               4MiB |
+-----------------------------------------------------------------------------+

希望这可以帮助。

相关内容