Ubuntu 16.04 上 Nvidia 驱动程序降级后无法安装 CUDA

Ubuntu 16.04 上 Nvidia 驱动程序降级后无法安装 CUDA

最近,我通过定期自动更新将 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

按照https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=debnetwork

三个命令都可以,但是最后一个……休斯顿,我们有问题了!

$ 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 驱动程序包的预发布版本,那么

    1. 您可以安装 ubuntu 预发布版(可能需要在 synaptic 中试用才能正确安装)
    2. 您可以按照 debnetwork 说明中的前三个步骤进行操作
    3. 不要进入突触,而是sudo apt-get install cuda搜索小写 cuda(它存在!),将其标记为已安装,然后更新其依赖项。
    4. 然后,您将添加所有必要的文件,但您单击的 cuda 链接将被损坏(因为它无法安装其自己的 396.26 版本)。
    5. 没关系:它是一个元包,实际上不需要安装,就是这样。将其标记为删除。当您点击应用时,突触可能会吐出死包的残余,这看起来很糟糕,但有删除其尸体的副作用。再试一次,如果那是唯一损坏的包,安装将成功。
    6. 根据您安装的其他程序的顺序,您可能会玩类似的逻辑游戏来摆脱其他损坏的软件包,但这是可行的。我强烈建议在将它们整理好之前不要重新启动。我相信您很快就会看到正式版本。如果您能找到预发行版,那就太好了……
      https://launchpad.net/~bstudent/+archive/ubuntu/nvidia-graphics-drivers-396.26-copy-of-staging-ppa-20180522

答案2

这是 NVIDIA 和 CUDA 的一个较旧的解决方法,作为对 Optimus 卡的完整识别的解决方案。

您必须先卸载已安装的 nvidia-drivers,然后在没有 nvidia-drivers 的情况下重新启动。然后按照以下链接中的说明继续操作。这很简陋,但可以作为您较旧的芯片组的解决方案。:

如何在 Ubuntu13.04 中安装 Nvidia Driver GT 520 和 Cuda 5.0?

答案3

好吧,过了一段时间我终于可以解决这个问题了。我具体做了什么:

  • 清理了cudaSynaptic 中包含的所有内容。
  • 在 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.1 nvidia-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 版本。

相关内容