黎小葱 2025-09-11 03:50 采纳率: 98.6%
浏览 55
已采纳

问题:如何解决"module nvidia is in use by nvidia_uvm"导致无法卸载NVIDIA驱动?

在Linux系统中,卸载NVIDIA驱动时,常遇到错误提示“module nvidia is in use by nvidia_uvm”,导致无法直接移除驱动模块。这个问题通常发生在NVIDIA的内核模块被用户空间组件(如CUDA应用程序或NVIDIA持久模式服务)占用时。解决方法包括:首先停止所有使用GPU的进程,如X Server、CUDA程序或Docker容器;其次,禁用nvidia-persistenced服务;最后通过modprobe卸载模块。若仍无法卸载,可尝试进入字符界面或使用init 3切换运行级别,再执行rmmod操作。掌握这一流程对维护GPU环境至关重要。
  • 写回答

1条回答 默认 最新

  • The Smurf 2025-09-11 03:50
    关注

    Linux系统中卸载NVIDIA驱动时“module nvidia is in use by nvidia_uvm”错误的深度解析与解决方案

    1. 问题现象与初步理解

    在尝试卸载NVIDIA驱动时,用户常会遇到如下错误提示:

    ERROR: Module nvidia is in use by nvidia_uvm

    这表明内核模块 nvidia 正在被另一个模块 nvidia_uvm 使用,而后者通常与CUDA、NVIDIA持久模式服务或Docker容器相关。

    2. 常见原因分析

    该问题的根本原因在于用户空间组件对GPU的占用。常见场景包括:

    • 运行中的CUDA程序
    • X Server图形界面
    • Docker容器中使用GPU资源
    • nvidia-persistenced服务正在运行

    3. 解决流程概述

    为成功卸载驱动,需依次执行以下步骤:

    1. 终止所有使用GPU的用户进程
    2. 停止并禁用nvidia-persistenced服务
    3. 尝试使用 modprobe -r nvidia 卸载模块
    4. 若仍失败,切换至字符界面(如运行级别3)后使用 rmmod

    4. 操作步骤详解

    步骤操作命令目的
    1kill -9 $(pgrep -u $USER -f 'nvidia')终止当前用户的GPU相关进程
    2sudo systemctl stop nvidia-persistenced停止持久模式服务
    3sudo systemctl disable nvidia-persistenced禁用开机启动服务
    4sudo modprobe -r nvidia尝试卸载内核模块
    5sudo init 3
    sudo rmmod nvidia
    切换运行级别后强制卸载

    5. 高级诊断与调试方法

    若上述方法仍无法解决问题,可进一步使用以下命令分析模块依赖关系:

    lsmod | grep nvidia

    输出示例:

    nvidia_uvm           983040  0
    nvidia_drm             57344  1
    nvidia_modeset        1146880  1 nvidia_drm
    nvidia               20971520  2 nvidia_uvm,nvidia_modeset

    通过 modinfo 可查看模块依赖关系:

    modinfo nvidia

    6. 自动化脚本建议

    为简化流程,可编写如下脚本自动执行关键步骤:

    #!/bin/bash
    
    # 停止持久化服务
    sudo systemctl stop nvidia-persistenced
    sudo systemctl disable nvidia-persistenced
    
    # 终止相关进程
    pkill -f 'nvidia'
    
    # 卸载模块
    sudo modprobe -r nvidia || echo "Modprobe failed, switching to rmmod"
    
    # 切换运行级别并卸载
    sudo init 3
    sleep 5
    sudo rmmod nvidia

    7. 可视化流程图

    graph TD A[开始卸载] --> B{是否有GPU进程占用?} B -->|是| C[终止进程] B -->|否| D[继续] C --> D D --> E{是否启用nvidia-persistenced?} E -->|是| F[停止并禁用服务] E -->|否| G[继续] F --> G G --> H[尝试modprobe -r nvidia] H --> I{卸载成功?} I -->|是| J[结束] I -->|否| K[切换至字符界面] K --> L[执行rmmod nvidia] L --> J
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 9月11日