最近,我通过定期自动更新将 CUDA 升级到 9.2 版,将 nvidia 驱动程序升级到 nvidia-396,我的 Ubuntu 16.04 Optimus 笔记本电脑默认启用英特尔视频适配器,并通过 bumblebee 访问 NVidia。不久之后,我尝试运行 CUDA 应用程序(使用optirun <command>
),但发现它不起作用。
我做的第一件事就是将所有“nvidia-390”的条目(如果我没记错的话是 390)替换为/etc/bumblebee/bumblebee.conf
“nvidia-396”——这不止一次帮助过我。
仍然不起作用(Cannot access secondary GPU - error: Could not load GPU driver
)。dmesg
,原因如下:
[ 314.733284] NVRM: The NVIDIA GeForce GT 520M GPU installed in this system is
NVRM: supported through the NVIDIA 390.xx Legacy drivers. Please
NVRM: visit http://www.nvidia.com/object/unix.html for more
NVRM: information. The 396.26 NVIDIA driver will ignore
NVRM: this GPU. Continuing probe...
是的,我的笔记本电脑很旧了,但有了 SSD 和 12 Gb RAM,我仍然觉得没有必要更换它。好吧,看来我必须使用 nvidia-390:
sudo apt install nvidia-390
被告知很多依赖包将被卸载,似乎包括所有 CUDA 9.2。该死。所以我可能也只能使用 CUDA 9.0。因此,在卸载所有内容(并在 synaptic 中签入没有剩余来自 nvidia-396 或 cuda-9.2 的包)后,我尝试将其恢复:
sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
三个命令都可以,但是最后一个……休斯顿,我们有问题了!
$ sudo apt install cuda
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package cuda
我已经尝试过这个答案的解决方案在 Ubuntu 16 上安装 CUDA 8:无法找到包 cuda问题,即:
dpkg -l | grep '^rc' | awk '{print $2}' | sudo xargs dpkg --purge
它确实清理了很多东西,包括一些来自 cuda-9.2 相关软件包的东西。然而,问题仍然存在——我无法再次安装 CUDA,无论我尝试 9.0 还是其他版本。
有任何想法吗?
答案1
这是一个新问题:
- NVIDIA 提供的 deb 文件包含 CUDA 9.2.88 所需的驱动程序 396.26。
- ubuntu安装的版本是396.24。
- ubuntu 软件包系统设置了依赖关系,使得 nvidia 软件包(即使是较新的版本)无法覆盖 ubuntu 安装的软件包。
如果你能得到 ubuntu 396.26 驱动程序包的预发布版本,那么
- 您可以安装 ubuntu 预发布版(可能需要在 synaptic 中试用才能正确安装)
- 您可以按照 debnetwork 说明中的前三个步骤进行操作
- 不要进入突触,而是
sudo apt-get install cuda
搜索小写 cuda(它存在!),将其标记为已安装,然后更新其依赖项。 - 然后,您将添加所有必要的文件,但您单击的 cuda 链接将被损坏(因为它无法安装其自己的 396.26 版本)。
- 没关系:它是一个元包,实际上不需要安装,就是这样。将其标记为删除。当您点击应用时,突触可能会吐出死包的残余,这看起来很糟糕,但有删除其尸体的副作用。再试一次,如果那是唯一损坏的包,安装将成功。
- 根据您安装的其他程序的顺序,您可能会玩类似的逻辑游戏来摆脱其他损坏的软件包,但这是可行的。我强烈建议在将它们整理好之前不要重新启动。我相信您很快就会看到正式版本。如果您能找到预发行版,那就太好了……
https://launchpad.net/~bstudent/+archive/ubuntu/nvidia-graphics-drivers-396.26-copy-of-staging-ppa-20180522
答案2
这是 NVIDIA 和 CUDA 的一个较旧的解决方法,作为对 Optimus 卡的完整识别的解决方案。
您必须先卸载已安装的 nvidia-drivers,然后在没有 nvidia-drivers 的情况下重新启动。然后按照以下链接中的说明继续操作。这很简陋,但可以作为您较旧的芯片组的解决方案。:
答案3
好吧,过了一段时间我终于可以解决这个问题了。我具体做了什么:
- 清理了
cuda
Synaptic 中包含的所有内容。 - 在 Synaptic 中强制将
cuda-drivers
软件包版本改为 390.xx。 然后
apt update
再次dpkg --configure -a
解决损坏的依赖关系apt update
。然后
sudo apt install cuda
确实可以工作,但仍然建议我安装 cuda 9.2 并nvidia-396
在此过程中升级到,尽管我已经锁定了驱动程序。但sudo apt install cuda-9-1
没有兼容,并允许我安装 CUDA 9.1nvidia-390
(我发现 9.1 驱动程序也适用于nvidia-390
,这就是为什么 9.0 不行)。
此后(并重新启动),我的所有 CUDA 应用程序都可以运行,optirun
直到现在。:)
我后来遇到的唯一小麻烦是apt dist-upgrade
仍然建议我升级nvidia-390
(但常规apt upgrade
没有)。 使用 解决了该问题apt-mark hold nvidia-390
,并且该包现在在 Synaptic 中也显示为“已锁定”。 此外,即使我尝试apt install cuda
手动运行,现在也会抛出一个错误:
The following packages have unmet dependencies:
cuda : Depends: cuda-9-2 (>= 9.2.148) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
但实际上没有损坏的软件包,所以现在看来我也不会意外安装错误的 CUDA 版本。