我正在尝试在 Debian Stretch 中安装最新的 NVIDIA 驱动程序。我已经NVIDIA-Linux-x86_64-390.48.run
从这里下载了,但是当我尝试做
sudo sh ./NVIDIA-Linux-x86_64-390.48.run
按照建议,会出现一条错误消息。
ERROR: An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in your kernel. This may be because it is in use (for example, by an X server, a CUDA program, or
the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading. Please be sure to exit any programs
that may be using the GPU(s) before attempting to upgrade your driver. If no GPU-based programs are running, you know that your kernel supports module unloading,
and you still receive this message, then an error may have occured that has corrupted an NVIDIA kernel module's usage count, for which the simplest remedy is to
reboot your computer.
当我试图找出谁在使用nvidia-drm
(或nvidia_drm
)时,我什么也看不到。
~$ sudo lsof | grep nvidia-drm
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
~$ sudo lsof -e /run/user/1000/gvfs | grep nvidia-drm
~$
当我尝试删除它时,它说它正在被使用。
~$ sudo modprobe -r nvidia-drm
modprobe: FATAL: Module nvidia_drm is in use.
~$
我已经重新启动并以纯文本模式启动(通过在提供用户名/密码之前按 Ctrl+Alt+F2),但我得到了同样的错误。
除此之外,我如何“知道我的内核支持模块卸载”?
我在启动时收到了一些与 nvidia 相关的警告,但不知道它们是否相关:
Apr 30 00:46:15 debian-9 kernel: nvidia: loading out-of-tree module taints kernel.
Apr 30 00:46:15 debian-9 kernel: nvidia: module license 'NVIDIA' taints kernel.
Apr 30 00:46:15 debian-9 kernel: Disabling lock debugging due to kernel taint
Apr 30 00:46:15 debian-9 kernel: NVRM: loading NVIDIA UNIX x86_64 Kernel Module 375.82 Wed Jul 19 21:16:49 PDT 2017 (using threaded interrupts)
我想您想停止显示管理器,我怀疑这将使用 Nvidia 驱动程序。
更改为文本控制台(按Ctrl++ Alt)F2并以 root 身份登录后,使用以下命令禁用图形目标,这使显示管理器保持运行:
此时,我希望您能够使用
modprobe -r
(或rmmod
直接)卸载 Nvidia 驱动程序:一旦你设法替换/升级它并且你准备好再次启动图形环境,你可以使用这个命令:
CUDA 安装
1) 下载最新的CUDA 工具包
2) 按 Ctl+Alt+F3 切换到 tty3
3) 在继续之前卸载 nvidia-drm。
3a) 隔离 multi-user.target
3b) 请注意,nvidia-drm 当前正在使用中。
3c) 卸载 nvidia-drm
4d) 请注意,nvidia-drm 不再使用。
5) 转到您的下载文件夹并运行 cuda 安装。
6) 在安装过程中回答任何提示。
7) 安装完成后,确认 CUDA 版本已更新。
8) 再次启动 GUI。
lsof
列出用户空间进程正在使用的所有文件。但是nvidia_drm
是一个内核模块,所以lsof
不一定会看到它是否实际在使用。(模块文件不会打开,因为内核已经将它完全加载到 RAM 中。但是模块可能正在为用户空间或其他内核组件提供服务,这就是阻止模块卸载的原因。)运行并查看模块名称
lsmod | grep nvidia.drm
右侧的数字。nvidia_drm
第一个数字只是模块的大小;第二个是使用计数。为了成功移除模块,使用计数必须首先为 0。如果 X11 服务器正在运行并使用
nvidia
驱动程序,那么nvidia_drm
内核模块肯定会被使用。因此,您至少需要切换到文本控制台并关闭 X11 服务器。通常这可以通过停止您正在使用的任何 X 显示管理器服务来完成(取决于您正在使用的桌面环境)。正如错误消息所说,如果您正在运行
nvidia-persistenced
,您也需要在卸载nvidia_drm
模块之前停止它。我通过禁用 GUI、重新启动、登录并安装驱动程序、启用 GUI 和重新启动解决了这个问题。
请确保您知道您的用户名和密码!!!
打开终端并写入
现在登录,您将直接进入终端,安装驱动程序请注意,我在这里安装的是 440.44 ,因此您需要针对您的驱动程序版本进行修改。
安装驱动程序后启用 GUI 并重新启动:
你应该完成
就我而言,nvidia-smi 报告了新版本 440.44,在 Ubuntu 18.04 软件和更新实用程序中抱怨,附加驱动程序选项卡显示 435!!另一个 NVIDIA 之谜,但见鬼我的新 docker 工作!!!
我有一个类似的问题。
我通过清除所有 NVIDIA 软件包来修复它。
使用以下 2 个命令删除所有以前的 NVIDIA 安装:
$ sudo apt-get purge nvidia*
$ sudo apt-get autoremove
模块应该被移除。
重新启动并继续前进。
您在评论中报告说,停止 systemd-logind 服务会将您带回图形登录。如果您有图形登录,则 X 正在运行,因此视频驱动程序已加载并正在使用中。这很可能部分解释了为什么使用 nvidia-drm 模块。
此外,当您说
按 Ctrl+Alt+F2 会切换到虚拟终端 #2,它可能已配置为文本模式登录,但这与“以文本模式启动”相去甚远。如果您在默认虚拟终端上有一个图形登录屏幕,那么 X 正在运行,并且切换到不同的 VT 不会改变这一点。您只是登录到非 X 会话。
尝试的第一件也是最简单的事情是实际关闭 X 服务器。执行此操作的老式方法是登录到您的文本模式会话并执行命令
切换到运行级别 3。这也应该适用于 systemd,但本机 systemd 方式将改为运行
当然,这两者都需要特权,因此您需要使用
sudo
或使自己成为 root。如果这没有删除模块,或者至少让您可以手动执行此操作,那么您的下一个最佳选择是将系统直接引导到运行级别 3(多用户目标),甚至可能进入运行级别 1 (救援目标)。我通常通过引导加载程序在引导时将“3”(或“1”)添加到内核参数列表的末尾来做到这一点。您还可以按照本文所述更改默认引导目标。
另请注意,大多数 Linux 发行版的预构建软件包中都提供了 nVidia 驱动程序。很少有人将这些软件包包含在他们自己的标准存储库中,因为驱动程序毕竟是专有的,但您肯定可以找到拥有它的信誉良好的第 3 方存储库。我强烈建议使用此类软件包而不是直接运行安装程序,但要从现在的位置到达那里,您可能需要先手动卸载驱动程序。
停止
systemd-logind
为我修复它:在 nvidia-xrun github 页面上的这个 github 问题中建议将其作为解决方法:
尝试安装 Nvidia 驱动程序时,Debian Stretch 遇到了同样的问题。在 text mod 中,我唯一的解决方案是删除驱动程序,重新安装 gdm 和 gnome-shell。我知道这是一个笨拙的解决方案,但我记得我首先尝试修复 gnome-shell 并且只删除 Nvidia 驱动程序并重新安装 GDM。事实证明,重新安装整个外壳要容易得多。
我也遇到了同样的问题。报错的原因是我在安装cuda的时候不小心选择了“Install nvidia driver”。
所以,在安装 CUDA 的过程中,当你遇到以下选项时:
请选择q,问题将得到解决。
对我有用的是更改系统以更多地以文本开头
然后重新启动并安装 nvidia cuda 驱动程序,完成后您可能需要更改系统以再次以图形模式启动