如何在NVIDIA Prime上使用CUDA


10

我在整个网络上都发现了六篇帖子,但是没有人真正回答这个问题。

我想将我的nvidia GPU设置为仅进行计算,而不驱动显示。但是,当我切换为在nvidia-prime配置中使用Intel GPU时,无法再加载nvidia模块。

modprobe: ERROR: could not insert 'nvidia_352': No such device

很明显,如果没有该模块,CUDA将无法正常工作。

那么nvidia-prime到底在做什么,从而使得无法加载模块?没有列入黑名单。没有xorg.conf文件,那么系统如何知道使用Intel GPU而不是离散GPU?

我使用的是已安装Ubuntu 14.04工厂的Dell 5510 Precision,我的GPU是Quadro M1000M。

有些人建议使用大黄蜂,但这对于纯计算负载来说不是必需的。

同样,大黄蜂显然能够加载模块。那到底在做什么呢?

更新:为什么经过数小时试图找出答案后,为什么我总能在最终发布问题时找到答案。这实际上只是部分答案,但我会讲一些。

到目前为止,我已经确定Prime至少会做两件事:

  • 使用bbswitch关闭GPU。
  • 更改/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf 的替代方法

通过使用bbswitch重新打开GPU,我现在可以加载NVIDIA模块。

但是问题仍然存在:将系统配置为仅将NVIDIA卡用于计算的最佳方法是什么?

我是否应该将nvidia-prime设置为使用Intel GPU,并尝试手动说明使CUDA正常工作的原因?

如何确保系统仍使用Intel GPU进行显示?

我将如何简单地禁用NVIDIA prime并手动进行配置?

还是我应该让步并使用Bumblebee和optirun?如果有的话,这有什么缺点?

有什么建议吗?


您可以在NVIDIA X Server Settings应用程序中禁用GPU上的显示吗?
罗杰·达尔

NVIDIA实用程序仅允许您在Intel和NVIDIA GPU之间进行选择。它不提供精细的设置,例如用于显示的卡。
orodbhen

Answers:


5

就我而言,我发现NVidia卡实际上并未关闭,而运行CUDA代码我真正需要做的唯一一件事是:

export LD_LIBRARY_PATH=/usr/lib/nvidia-352

在我要运行它的外壳中(我假设全局更改替代设置会破坏compiz等,等等。)

为了达到这一点(在装有Ubuntu 14.04,CUDA 7.5和GTX 980的Dell Optiplex 7010上),我相信这些步骤是:

  1. 使用“ PRIME配置文件”选项卡选择“英特尔”
  2. 重新启动,然后在BIOS中选择Intel作为默认设置
  3. 关闭电脑
  4. 将显示器插入车载视频:)

到目前为止,一切似乎都工作正常(nvidia-smi看到了卡,运行了cuda样本,theano使用了卡,等等。)


1
是的,不幸的是,似乎没有一个一致的解决方案,这就是为什么我真的想了解幕后发生的事情。
orodbhen '16

2

我相信我至少找到了一个粗略的解决方案,如我原始帖子的更新所述。我确实找到了两个解决方案,尽管我确定还有其他解决方案。

1-在Prime模式下使用Intel模式,通过bbswitch重新启用NVIDIA卡,然后运行modprobe nvidia以加载模块并创建设备节点。

2-使用Bumblebee optirun启动bash会话,您可以在其中执行所有CUDA任务。

这两种解决方案都允许您使用板载图形进行显示,同时使用NVIDIA卡进行计算负载。optirun解决方案似乎更通用,但我更喜欢第一个解决方案,因为它极简。

我希望有更多了解的人可以改善此答案。


您能否更清楚地解释第一种选择?如何使用bbswitch打开和关闭卡?
Abonec '17

我实际上想出了如何使大黄蜂正常工作的方法,并且在有时间的时候会更新答案。我基本上遵循了这一点。令人沮丧的是,这些东西的记录如此之差,因为它确实非常简单。
orodbhen

2

我仅将NVIDIA卡用于CUDA执行,并了解这种方法:

我一直使用intel卡,并通过命令确认lspci | grep -E "VGA|3D"

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)

在NVIDIA卡的对应行中,您应该看到(rev ff)它已关闭。

要打开卡并将其用于CUDA计算,我使用以下两个命令:

sudo prime-select nvidia
sudo prime-switch

在该命令lspci | grep -E "VGA|3D"报告之后:

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

注意有关(rev a2),不在(rev ff)相应的行中。现在卡已准备好进行计算。

计算后,我使用向后操作:

sudo prime-select intel
sudo prime-switch

lspci | grep -E "VGA|3D"报告:

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)

因此,基本上,如果要切换哪个GPU正在运行显示器,则只需要在使用prime切换后重新登录即可。我虽然没有,但是很有道理。当然,您需要确保在退出或重新启动之前切换回去。
orodbhen

我使用这种方法。我以激活的Intel配置文件登录,因此Xorg和firefox没有使用GPU。然后,我切换到nvidia配置文件,然后我所有的CUDA工作都在GPU上进行,而不必与firefox和Xorg争夺内存:)!
约翰

0

如果按照接受的答案中的步骤操作后仍然有人发现问题,请尝试以下操作:

echo "install bbswitch /bin/true" > /etc/modprobe.d/blacklist-bbswitch.conf
update-initramfs -u

它将完全禁用bbswitch。缺点是您将无法关闭NVIDIA卡以省电(只要,Xorg仍会使用集成显卡prime-select intel)。


0

我在工作时在egpu上使用带ThinkPad T420的1070 ti来挖掘我的加密货币。从理论上讲,GPU将在几个月后收回成本。

我发现使用nvidia 387导出LD_LIBRARY_PATH = / usr / lib / nvidia-387与ethminer一起使用了cuda。

但是,在“主要选择intel”后,我可以使系统继续工作的唯一方法是,当我选择并注销时,如果将第二个监视器插入卡中。否则,我将收到“系统正在以低图形模式运行”错误或连续的黑屏。当然,当我登录运行intel图形时,插入GPU的监视器什么也不显示,因此我必须将其从GPU上拔下,然后将其重新插入系统(DVI扩展坞输出),以运行我的对决监视器设置。

我相信这是因为gpu-manager检测到bbswitch不起作用,然后删除了xorg配置。

我发布此消息是为了为少数情况类似的人提供解决方法,同时还要查看是否有人有想法阻止这种情况的发生,因为每次重新启动时都必须移动电缆不方便。

日志文件:/var/log/gpu-manager.log

last_boot_file:/ var / lib / ubuntu-drivers-common / last_gfx_boot new_boot_file:/ var / lib / ubuntu-drivers-common / last_gfx_boot无法访问/ run / udc-fglrx-was加载的文件在/ lib中查找fglrx模块/modules/4.4.0-104-generic/updates/dkms在/lib/modules/4.4.0-104-generic/updates/dkms中寻找nvidia模块找到nvidia模块:nvidia_387_drm.ko是否已加载nvidia?是的,Nvidia是否已卸载?否nvidia是否已列入黑名单?是加载了fglrx吗?否fglrx已卸载?否fglrx被列入黑名单?否是否已加载intel?是radeon是否已加载?否radeon是否已列入黑名单?否amdgpu是否已加载?否amdgpu已列入黑名单?否新手装满了吗?Nouveau是否已列入黑名单?是fglrx内核模块可用吗?否nvidia内核模块可用吗?是供应商/设备ID:8086:126 BusID“ PCI:0 @ 0:2:0”是启动VGA吗?是供应商/设备ID:10de:1b82 BusID“ PCI:conf当前的核心替代方案:(空)当前的egl替代方案:/usr/lib/nvidia-387-prime/ld.so.conf是否启用了nvidia?否是否启用了英伟达egl?否是否启用了fglrx?否启用台面功能吗?否是否启用了台面egl?否是否启用pxpress?否是否启用了Prime?是启用了egl egl吗?是可以使用nvidia吗?是可以使用nvidia egl吗?否fglrx可用吗?否fglrx-core是否可用?否有台面吗?是可以使用台面egl吗?是pxpress是否可用?否可用吗?是可以使用素蛋吗?没有检测到Intel IGP,没有检测到Intel混合系统Nvidia驱动程序版本387.34 / sys / class / dmi / id / product_version =“ ThinkPad T420” / sys / class / dmi / id / product_name =“ 4236L23”第一次尝试:不带怪胎的bbswitch使用“ load_state = -1 unload_state = 1”参数错误:可以 t打开/ proc / acpi / bbswitch删除xorg.conf。路径:/etc/X11/xorg.conf无法访问/usr/share/gpu-manager.d/hybrid-power- Saving无需更改当前的bbswitch状态

如果在此之后执行nano xorg.conf,则为空。我在执行监视器切换技巧之后发布了此消息,挖掘在后台进行,而我的xorg.conf仍然为空。所以我的猜测是,出于某种原因,当我在lightdm重新启动时将监视器插入GPU时,删除xorg.conf并不重要。有任何想法吗?


另外...如上所述,我已将bbswitch列入黑名单,因为在启动时会不断出现错误。我能够使用nvidia-384一次或两次启动到intel模式,但是我在使用它进行挖掘时遇到了麻烦,并认为可能是因为nvidia-387添加了1070 ti支持。
nhorning
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.