我在网上找到了六篇关于这个问题的帖子,但没有一篇真正回答了这个问题。
我想将我的 nvidia GPU 设置为仅进行计算,而不是驱动显示。但是当我切换到使用 nvidia-prime 配置中的 Intel GPU 时,我无法再加载 nvidia 模块。
modprobe: ERROR: could not insert 'nvidia_352': No such device
显然,如果没有该模块,CUDA 就无法工作。
那么 nvidia-prime 到底做了什么,导致无法加载模块?它没有被列入黑名单。没有 xorg.conf 文件,那么系统如何知道要使用英特尔 GPU 而不是独立 GPU?
我使用的是 Dell 5510 Precision,出厂时安装了 Ubuntu 14.04,我的 GPU 是 Quadro M1000M。
有些人建议使用大黄蜂,但对于纯计算负载来说这不是必要的。
此外,bumblebee 显然能够加载该模块。那么它到底在做什么呢?
更新:那么,为什么我花了几个小时试图弄清楚问题,最后终于发布问题时,总能找到答案呢?这实际上只是部分答案,但我发现了一些问题。
到目前为止,我已经确定 prime 至少做了两件事:
- 使用 bbswitch 关闭 GPU。
- 改变备择方案对于 /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf。
通过使用bbswitch要重新打开 GPU,我现在可以加载 NVIDIA 模块。
但问题仍然存在:配置系统以仅使用 NVIDIA 卡进行计算的最佳方法是什么?
我是否应该将 nvidia-prime 设置为使用英特尔 GPU,并尝试手动解开它所做的事情以使 CUDA 正常工作?
如何确保系统仍然使用英特尔 GPU 进行显示?
我该如何简单地禁用 NVIDIA prime,并手动配置它呢?
或者我应该放弃并使用 Bumblebee 和 optirun?这样做有什么缺点吗?
有什么建议吗?
答案1
就我而言,我发现 NVidia 卡实际上并未关闭,而运行 CUDA 代码我实际上需要做的唯一一件事是:
export LD_LIBRARY_PATH=/usr/lib/nvidia-352
在我想要运行它的 shell 中(我假设全局更改替代设置会破坏 compiz 等,等等......)
为了达到这一点(在 Dell Optiplex 7010 上,装有 Ubuntu 14.04、CUDA 7.5 和 GTX 980),我相信步骤如下:
- 使用 PRIME 配置文件选项卡选择英特尔
- 重新启动,然后在 BIOS 中选择 Intel 作为默认设置
- 关闭计算机
- 将显示器插入板载视频:)
到目前为止一切似乎都运行良好(nvidia-smi 看到该卡,cuda 样本运行,theano 使用该卡,等等......)
答案2
我相信我至少找到了一个粗略的解决方案,如我原始帖子的更新中所述。实际上我找到了两个解决方案,但我确信还有其他解决方案。
1 - 在 Prime 处于 Intel 模式时,通过以下方式重新启用 NVIDIA 卡bbswitch,然后运行modprobe nvidia
加载模块并创建设备节点。
2 - 使用 Bumblebee optirun 启动 bash 会话,您可以从中执行所有 CUDA 操作。
这两种解决方案都允许您使用板载显卡进行显示,同时使用 NVIDIA 卡进行计算负载。optirun 解决方案似乎更加通用,但我更喜欢第一种,因为它更简洁。
我希望有更多理解的人能够改进这个答案。
答案3
我仅使用 NVIDIA 卡进行 CUDA 执行并发现了这种方法:
我一直使用英特尔卡,并通过命令确认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)
答案4
我使用 1070 ti 和 ThinkPad T420,在 egpu 中设置了挖矿加密货币,这样我工作时 GPU 理论上几个月后就能收回成本。
我发现使用 nvidia 387 export LD_LIBRARY_PATH=/usr/lib/nvidia-387 可以通过 cuda 与 ethminer 协同工作。
但是,在“prime-select 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-loaded 文件 在 /lib/modules/4.4.0-104-generic/updates/dkms 中查找 fglrx 模块 在 /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 是否加载? 否 nouveau 是否列入黑名单? 是 fglrx 内核模块是否可用? 否 nvidia 内核模块是否可用? 是 供应商/设备 ID:8086:126 BusID “PCI:0@0:2:0” 是否为启动 vga? 是 供应商/设备 ID:10de:1b82 BusID “PCI:5@0:0:0” 是否为启动 vga?否 跳过“/dev/dri/card1”,由“i915”驱动 跳过“/dev/dri/card0”,由“nvidia-drm”驱动 跳过“/dev/dri/card1”,由“i915”驱动 跳过“/dev/dri/card0”,由“nvidia-drm”驱动 跳过“/dev/dri/card1”,由“i915”驱动 跳过“/dev/dri/card0”,由“nvidia-drm”驱动 找到“/dev/dri/card1”,由“i915”驱动 输出 0:card1-LVDS-1 输出 1:card1-HDMI-A-2 /dev/dri/card1 的连接输出数量:2 是否需要卸载? 是 最后一张卡的数量 = 2 有 amd 吗? 否 有 intel 吗? 是 有 nvidia 吗? 有多少张卡? 2 系统是否发生了变化?否 main_arch_path x86_64-linux-gnu,other_arch_path i386-linux-gnu 当前替代方案:/usr/lib/nvidia-387-prime/ld.so.conf 当前核心替代方案:(null) 当前 egl 替代方案:/usr/lib/nvidia-387-prime/ld.so.conf nvidia 是否已启用?否 nvidia egl 是否已启用?否 fglrx 是否已启用?否 mesa 是否已启用?否 mesa egl 是否已启用?否 pxpress 是否已启用?否 prime 是否已启用?是 prime egl 是否已启用?是 nvidia 是否可用?是 nvidia egl 是否可用?否 fglrx 是否可用?否 fglrx-core 是否可用?否 mesa 是否可用?是 mesa egl 是否可用?是 pxpress 是否可用?否 prime 是否可用?是 prime egl 是否可用?未检测到 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”参数加载 bbswitch 错误:无法打开 /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 并不重要。有什么想法吗?