我终于安装了最新的 nvidia 驱动程序,可以运行 Bumblebee。现在运行起来很顺畅optirun
。
司机叫nvidia_352
。
现在我尝试让 CUDA 工作。我可以手动运行 modprobe nvidia_352
,nvidia_352_uvm
它按预期工作。但是,如果我还没有手动运行 modprobe,它会尝试加载nvidia
和nvidia_uvm
驱动程序,因此会失败(因为这些驱动程序不存在)。
如果我尝试使用,情况也类似nvidia-modprobe
。
我怀疑有一些底层设置正在nvidia-modprobe
尝试加载nvidia
驱动程序,但我不知道那是什么。有人有什么建议吗?
我想一个解决方法是在启动时明确加载这些驱动程序,但它们目前已被 bumblebee 列入黑名单,因此想要控制,而且我不确定加载驱动程序对电源的影响。
答案1
我正在解决类似的问题,并且能够通过编辑我的 bumblebee conf 来修复它。
sudo vim /etc/bumblebee/bumblebee.conf
将驱动程序设置为nvidia
# (See also the driver-specific sections below)
Driver=nvidia
在 nvidia 特定的驱动程序部分中,我添加了模块的名称,在我的例子中nvidia-352
## Section with nvidia driver specific options, only parsed if Driver=nvidia
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia-352
我需要包含默认情况下不正确的驱动程序路径。查看/usr/lib/
和/usr/lib32/
。就我而言,我似乎没有 32 位驱动程序……但如果我有,它们会LibraryPath
以逗号分隔。
我还需要添加 XorgModulePath。
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/nvidia-352
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia-352,/usr/lib/xorg/modules
经过进一步的研究后,我找到了一本可以帮助我完成项目的优秀指南。
答案2
为了解决这个问题(除了@McKayMatt的答案),我编写了两个脚本来明确执行加载:
第一个是预加载脚本preload_nvidia_module.sh
:
#!/bin/sh
sudo modprobe nvidia-352-uvm
eval "$@"
这是从另一个脚本调用的cuda_run
:
#!/bin/sh
optirun --no-xorg preload_nvidia_module.sh $@
现在,cuda 程序可以按如下方式运行:
cuda_run my_cuda_program
所有模块的加载和卸载都是自动进行的。
我敢说,如果您拥有比我更多的 bash fu,则可以将这些脚本合并起来。