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

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

我想要的是:

  • intel 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。

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

我通过mokutul –disable-validation通过apt-get和disabled安全启动为nvidia和intel(intel-microcode和nvidia-361.42)安装了专有的驱动程序。
然后我设置nvidia-prime使用intel卡。
然后我编辑了我的xorg.conf,只包含一个带有intel gpu和intel驱动程序的屏幕。 (如果需要,请询问详细信息)
测试GPU使用Blender进行渲染,一切似乎都很好,除了我无法得到我的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设置为空:

  • 这是因为当有一个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选择的conf中
  • 当通过prime-select切换到nvidia时,由于显示器连接到集成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的情况下启用风扇控制和进一步控制nvidia gpu(xorg.conf中的coolbits)(没有xorg.conf中的gpu屏幕)?

非常感谢任何回复。 我确实梳理了网络,梳子是我的问题。
如果我错过了任何重要的内容,请告诉我并不要犹豫,请求日志文件等。

谢谢

图片

我的其他驱动程序选项卡图 在此处输入图像描述

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

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

解:
通过http://www.nvidia.com/object/unix.html上提供的运行文件“–no-opengl-files”安装NVIDIA驱动程序!

这不仅可以防止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 

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

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

所以我推荐的解决方案是:

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

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

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

  • intel 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素数指向intel GPU(如果您想使用cuda调试器cuda-gdb ,则尤其需要它)。

之后你可以尝试安装大黄蜂 :

 sudo apt install bumblebee 

重启。 您可以使用监控大黄蜂的状态

 sudo service bumblebeed status 

要么

 bumblebeed -vv 

bumblebee做的是激活NVIDIA GPU并尝试仅在需要时将nvidia驱动程序插入内核。 您可以通过预先挂起的optirunoptirun用于您要运行的命令。

为了使大黄蜂工作,我不得不手动编辑/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 | +-----------------------------------------------------------------------------+ 

希望这可以帮助。

我重新安装了没有opengl的nvidia驱动程序,如上面的解决方案中所述,但它对我不起作用。 此外,这些解决方案非常不令人满意,因为它们意味着消除了驱动程序(opengl)的某些function。

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

  • 我正常安装了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时自动导出路径。

主要是为了提醒我:在ubuntu 18.04中使用igpu进行渲染,使用nvidia gpu进行cuda,安装默认的nvidia驱动程序,打开nvidia-settings并设置为使用intel gpu。 之后,黑名单新手驱动程序和部分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 lspci -nnk | grep -iA2 3D检查正在使用的驱动程序是nvidia而不是nouveau。