如何为xserver配置igpu和为cuda配置nvidia gpu?


12

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:Intel
  • GPU:具有361.42的Nvidia

我想要的是:

  • 英特尔GPU将运行xserver和我的显示器,该显示器已连接到板载DP
  • nvidia GPU仅可用于CUDA特定的计算等。
  • 完全控制nvidia gpu(实时,统计信息,临时风扇速度...)

我的问题:

  • 既不工作nvidia-sminvidia-settings不起作用,我无法控制我的nvidia GPU(错误被进一步引用)

我的故事:

在简短总结了我的问题之后,我想深入探讨该主题。自从Ubuntu 16.04发布以来,我一直在修补并且无法实现以下目标:

  • 我希望我的Intel GPU(i7 6700K)驱动我的Xserver及其相关的所有东西。
  • 我希望我专用的nvidia GPU仅用于基于Cuda的计算等。
  • 解决问题后,我将在系统中添加多个nvidia GPU。

我的初始状态的简短摘要:

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

错误:

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设置为空:

  • 这是因为只有在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)或/usr/lib/nvidia-361-prime/ld.so.conf(已选择intel GPU)
  • 英特尔选择的配置缺少通往基本nvidia模块的基本路径,这些路径都存在于NVIDIA nvidia选择的conf中
  • 通过主选择切换到nvidia时,由于Display连接到集成GPU,所以我没有Xserver,但是在虚拟控制台上登录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)?

预先感谢您的任何答复。我从字面上梳理了网络,这是我的问题。
如果我错过了任何重要的事情,请告诉我,不要犹豫,请求日志文件等。

谢谢

图像

我的其他驱动程序选项卡图像: 在此处输入图片说明


我还创建了一个启动板问题:answers.launchpad.net/ubuntu/+question/294621
winnetou,2016年

也许我没有正确描述我的安装过程:通过apt-get安装nvidia驱动程序后,还按照您所说的检查了其他驱动程序,并且已经选择了正确的驱动程序。我提供了一个屏幕截图。驱动程序存在,如果我将nvidia-prime切换到Nvidia-Gpu,一切正常。更改此设置不能安装整个驱动程序,实际上是驱动程序的一部分,如果没有它,它甚至无法工作
winnetou

这是一个干净的ubuntu 16.04安装。每次启动时,我都会更新和升级apt-get,所以我想我已经安装了最新的官方更新
winnetou

我知道,驱动程序是由系统使用的,因为我可以在nvidia GPU上使用CUDA。但是并非所有nvidia-modules都会在引导时加载,因此nvidia-smi例如会丢失libs...。如果我正确理解我的问题
winnetou

Answers:


4

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

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

因此,我建议的解决方案是:

1)通过从RUNFILE安装最新的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标志可确保在升级内核时重新编译内核模块。


这对我有用。这是最简单的答案,应该是公认的答案。
MarkoAvlijaš17年

此解决方案对我不起作用。相反,我只是正常安装了驱动程序,然后将nvidia路径添加到LD_LIBRARY_PATH中,如下所述。
撤消

3

我(此帖子的创建者)自行找到了所需的解决方案!

现在,我将为处于类似情况并需要此帮助的其他任何人解释该解决方案!

解决方案:通过http://www.nvidia.com/object/unix.html带有“ --no-opengl-files”标志的
RUNFILE安装NVIDIA驱动程序!

这不仅可以防止nvidia opengl文件覆盖现有的mesa文件,而且可以在没有nvidia prime的情况下安装驱动程序!

因此,只需手动安装驱动程序即可解决我所有的问题,而不是从存储库中安装它。存储库中的程序包是“ Optimus-Friendly”,因此将所有无用的麻烦制造者捆绑在一起。

其次

xorg.conf必须使用专用GPU的另一个屏幕进行扩展,以使其在nvidia设置中具有条目。

我的看起来像这样

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

1
你好 来自leezu的答案比较简单,也许您应该接受那个答案?
MarkoAvlijaš17年

尽管在我看来,leezu的答案非常有希望,但我仍无法确定答案。如果有更多人报告它可行,或者我最终可以测试他的答案并可以确认,那么我将更改接受的答案。他解决了以下问题:没有在该卡上运行x服务器的nvidia-modprobe不能正常工作。
Winnetou

如果您删除所有现有的nvidia驱动程序并重新开始,则此操作将无效。这样说 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
AfzalivE

1

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

  • 英特尔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切换到intel GPU,就像您提到的那样。如果您只想将NVIDIA GPU仅用于CUDA计算,则需要nvidia指向英特尔GPU cuda-gdb

之后,您可以尝试安装大黄蜂

sudo apt install bumblebee

重启。您可以使用以下方法监视大黄蜂的状态

sudo service bumblebeed status

要么

bumblebeed -vv

大黄蜂所做的是激活NVIDIA GPU,并仅在需要时尝试将nvidia驱动程序插入内核。您可以通过预先添加optirun要运行的命令来使用bumblebee 。

为了使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 |
+-----------------------------------------------------------------------------+

希望这可以帮助。


好答案!但是,我用ubuntu 15.10和相同的硬件使Bumblebee感到厌倦,结果一团糟。太多了,以至于我在可用后重新安装了16.04。真的更糟。甚至恢复模式也无法正常启动。...所以我发誓,自己不再使用大黄蜂。大黄蜂的另一个问题是(我不知道您是如何规避的)是,我专用的gpu不支持bbswitch,所以我遇到了错误,该gpu无法正确关闭
winnetou

但是,从理论上讲这是一个可能的答案!但不是我想要的:(
。– winnetou

另一个错误:(我不知道,如果可以尝试的话)nvidia-settings是否向您显示GPU(当然是sudo optirun nvidia-settings)?您可以控制风扇速度,电压等吗?如果我没记错的话,在启用xorg.conf文件中的coolbits之后,这些设置只能在nvidia-settings中使用。nvidia-smi只给您一台显示器.....如果我错了,请更正
winnetou

另一个巨大的问号是:如果我有多个专用的GPU,Bumblebee是否可以正常工作?在非移动GPU上,不建议将这种用例(igpu + gpu)用于大黄蜂,但是对于大黄蜂来说,拥有一个以上的d-gpu是一个新的漏洞。
winnetou

@winnetou,您绝对可以使用多个GPU-这是一个很好的问题。另一个问题是nvidia-docker最有可能无法正常工作。
vskubriev

1

如上述解决方案中所述,我没有安装opengl就重新安装了nvidia驱动程序,但它对我不起作用。此外,这些解决方案还不能令人满意,因为它们暗示了删除驱动程序(opengl)的某些功能。

我找到了一个更简单的解决方案,您无需重新安装驱动程序:

  • 我正常安装了nvidia驱动程序
  • 在PRIME配置文件下的nvidia-settings gui中,我选择intel图形卡作为主GPU
  • 重新启动后,nvidia-smi无法正常工作,但我通过在库路径中添加/ usr / lib / nvidia-387进行了修复:
    export LD_LIBRARY_PATH=/usr/lib/nvidia-387:$LD_LIBRARY_PATH

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


如果升级nvidia驱动程序会怎样?您是否必须手动更改库路径?
liang

我想如果驱动程序仍在同一文件夹中,这应该不是问题。如果文件夹更改,则可能应该更改库路径。
逆转

0

主要提醒我:在ubuntu 18.04中,使用igpu进行渲染,使用nvidia gpu进行cuda,安装默认的nvidia驱动程序,打开nvidia设置并设置为使用intel gpu。之后,将nouveau驱动程序和部分nvidia驱动程序列入黑名单:

以这种方式打开/etc/modprobe.d/blacklist-nvidia.conf并注释行:

#blacklist nvidia
blacklist nvidia-drm
#blacklist nvidia-modeset
#alias nvidia off
alias nvidia-drm off
#alias nvidia-modeset off

之后,打开/etc/modprobe.d/blacklist-nvidia-nouveau.conf并添加以下行:

blacklist nouveau
options nouveau modeset=0

要确定nouveau已禁用,您也可以在/etc/modprobe.d/blacklist.conf中将它们列入黑名单:最后添加:

#Blacklist nouveau drivers
blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

然后重启。

键入nvidia-smi以检查nvidia是否已加载,并键入lspci -nnk | grep -iA2 3D以检查正在使用的驱动程序是nvidia而非nouveau。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.