如何在 NVIDIA Prime 中使用 CUDA

oro*_*hen 11 nvidia cuda nvidia-optimus nvidia-prime

我在网上找到了六篇关于这个的帖子,但没有一个真正回答这个问题。

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

modprobe: ERROR: could not insert 'nvidia_352': No such device
Run Code Online (Sandbox Code Playgroud)

没有该模块,CUDA 显然无法工作。

那么 nvidia-prime 究竟是做什么导致无法加载模块的呢?它没有被列入黑名单。没有 xorg.conf 文件,那么系统如何知道使用英特尔 GPU 而不是离散 GPU?

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

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

此外,显然大黄蜂能够加载模块。那么它究竟在做什么呢?

更新:那么,为什么在经过数小时的尝试后,当我终于发布问题时,我似乎总是能找到答案。这实际上只是部分答案,但我正在做一些事情。

到目前为止,我已经确定 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?如果有的话,这有什么缺点?

有什么建议吗?

小智 5

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

export LD_LIBRARY_PATH=/usr/lib/nvidia-352
Run Code Online (Sandbox Code Playgroud)

在我想运行它的 shell 中(我假设全局更改替代设置会破坏 compiz 等...)

为了达到这一点(在戴尔 Optiplex 7010 上,使用 Ubuntu 14.04、CUDA 7.5 和 GTX 980)我相信步骤是:

  1. 使用 PRIME Profiles 选项卡选择 Intel
  2. 重启,然后在 BIOS 中选择 Intel 作为默认值
  3. 关闭计算机
  4. 将显示器插入板载视频:)

到目前为止,一切似乎都运行良好(nvidia-smi 看到卡,运行 cuda 样本,theano 使用卡,等等...)


oro*_*hen 3

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

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

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

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

我希望有更多理解的人能够改进这个答案。