ubuntu 24.04 : Failed to initialize NVML: Unknown Error

我想在docker 内部使用gpu时,当我执行nvidia官方的测试命令:

sudo docker run --rm --runtime=nvidia --gpus all ubuntu:22.04 nvidia-smi

出现l了如题的错误。

解决方法:
首先执行如下文件:

sudo vim /etc/nvidia-container-runtime/config.toml

然后修改其中的no-cgroupsfalse即可

#accept-nvidia-visible-devices-as-volume-mounts = false
#accept-nvidia-visible-devices-envvar-when-unprivileged = true
disable-require = false
supported-driver-capabilities = "compat32,compute,display,graphics,ngx,utility,video"
#swarm-resource = "DOCKER_RESOURCE_GPU"

[nvidia-container-cli]
#debug = "/var/log/nvidia-container-toolkit.log"
environment = []
#ldcache = "/etc/ld.so.cache"
ldconfig = "@/sbin/ldconfig.real"
load-kmods = true
no-cgroups = false
#path = "/usr/bin/nvidia-container-cli"
#root = "/run/nvidia/driver"
#user = "root:video"

[nvidia-container-runtime]
#debug = "/var/log/nvidia-container-runtime.log"
log-level = "info"
mode = "auto"
runtimes = ["docker-runc", "runc", "crun"]

[nvidia-container-runtime.modes]

[nvidia-container-runtime.modes.cdi]
annotation-prefixes = ["cdi.k8s.io/"]
default-kind = "nvidia.com/gpu"
spec-dirs = ["/etc/cdi", "/var/run/cdi"]

[nvidia-container-runtime.modes.csv]
mount-spec-path = "/etc/nvidia-container-runtime/host-files-for-container.d"

[nvidia-container-runtime-hook]
path = "nvidia-container-runtime-hook"
skip-mode-detection = false

[nvidia-ctk]
path = "nvidia-ctk"

接下来重启docker,然后重新执行命令即可:

sudo systemctl restart docker

<think>首先,用户的问题是关于在Windows 10上安装了NVIDIA K80显卡驱动(版本475.14),然后在Ubuntu 24.04上安装了CUDA 11.4和cuDNN 8.1.0后,执行nvidia-smi命令时出现错误:"Failed to initialize NVML: GPU access blocked by the operating system"。我需要解决这个问题。 来自用户的引用提供了相关信息: - 引用[1]提到在Ubuntu安装驱动时使用特定命令如sudo ./NVIDIA-Linux-x86_64-384.183.run -no-opengl-files,并强调选项的重要性以避免桌面循环问题。 - 引用[2]提到Ubuntu 20.04卸载驱动和禁用X service。 - 引用[3]是关于安装cuDNN的dpkg命令。 - 引用[4]提到禁用nouveau驱动,通过添加blacklist nouveau到配置文件中并更新initramfs。 用户的问题是Ubuntu 24.04上的错误,提示GPU访问被操作系统阻止。这通常表示驱动程序或系统内核模块问题,可能与nouveau驱动冲突、Secure Boot设置或内核模块加载问题相关。 关键点: - 用户在Windows 10上安装了K80驱动,但问题发生在Ubuntu上。 - 错误消息:GPU access blocked – 这可能是因为Secure Boot阻止了未签名驱动,或者nouveau驱动没有被正确禁用。 常见原因和解决方案: 1. **Secure Boot**: 在UEFI系统中,Secure Boot可能需要禁用或配置来允许第三方驱动加载。因为NVIDIA驱动可能没有被签名。 2. **Nouveau驱动冲突**: Ubuntu默认使用开源nouveau驱动,可能与NVIDIA驱动冲突。需要禁用nouveau。 3. **驱动程序安装问题**: 驱动可能没有正确安装或加载。 4. **Windows Fast Startup**: 如果在双系统环境中,Windows的Fast Startup可能导致Ubuntu无法访问GPU。 基于引用: - 引用[4]提到禁用nouveau驱动:echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf 然后 sudo update-initramfs -u。 - 引用[1]提到安装驱动时使用-no-opengl-files选项以避免桌面问题。 用户的问题是在Ubuntu 24.04上,所以需要针对这个具体版本的步骤。 我的回答需要: - 用中文回答。 - 结构清晰:逐步解决问题。 - 生成相关问题。 - 在引用末尾添加引用标识如[^1]。 回答结构: 1. **问题分析**: 简要解释为什么出现这个错误。 2. **解决方案步骤**: 提供清晰的逐步指导。 - 步骤1: 禁用nouveau驱动(基于引用[4])。 - 步骤2: 确保Secure Boot已禁用或配置。 - 步骤3: 重新安装NVIDIA驱动(如果需要)。 - 步骤4: 检查内核模块加载。 - 步骤5: 重启并测试。 3. **验证**: 如何确认问题解决。 4. **相关问题**: 生成几个相关问题。 由于用户在Windows上安装了驱动,但问题在Ubuntu,焦点在Ubuntu端。 具体步骤: 1. **禁用Nouveau驱动**: - 打开终端。 - 运行: sudo nano /etc/modprobe.d/blacklist-nouveau.conf - 添加内容: blacklist nouveau options nouveau modeset=0 - 保存并退出。 - 运行: sudo update-initramfs -u - 重启。 2. **检查Secure Boot**: - 在系统启动时进入UEFI/BIOS设置。 - 禁用Secure Boot。 - 保存并重启到Ubuntu。 3. **重新安装NVIDIA驱动**: - 用户已经安装了CUDA 11.4和cuDNN,但驱动可能有问题。 - 建议使用官方驱动或PPA安装。 - 例如,使用sudo ubuntu-drivers autoinstall或从NVIDIA网站下载驱动。 - 安装时使用-no-opengl-files选项,如在引用[1]中提到的。 - 确保安装驱动版本兼容CUDA 11.4。CUDA 11.4需要驱动版本>=470.82.01,用户版本475.14应该兼容。 4. **加载内核模块**: - 运行: sudo modprobe nvidia - 检查: lsmod | grep nvidia - 如果加载失败,检查dmesg日志。 5. **处理双系统问题**: - 在Windows中禁用Fast Startup(控制面板 > 电源选项 > 选择电源按钮功能 > 更改当前不可用设置 > 取消勾选启用快速启动)。 验证: - 重启后运行nvidia-smi。 - 如果正常工作,GPU信息应显示。 相关问题: 1. 如何在Ubuntu 24.04上正确安装NVIDIA驱动? 2. 什么是Secure Boot,以及如何禁用它? 3. 为什么在双系统环境中GPU访问被阻止? 4. 如何卸载和重新安装NVIDIA驱动在Ubuntu上? 确保回答真实可靠:基于常见Linux问题解决经验。 </think>### 解决 Ubuntu 24.04 执行 `nvidia-smi` 提示 "Failed to initialize NVML: GPU access blocked by the operating system" 的问题 您的错误消息 "GPU access blocked by the operating system" 通常发生在 NVIDIA 驱动与系统配置冲突时,尤其是在双系统(Windows 10 + Ubuntu)环境中。常见原因包括: - **Nouveau 开源驱动未被禁用**:Ubuntu 默认使用 Nouveau 驱动,会与 NVIDIA 专有驱动冲突。 - **Secure Boot 启用**:UEFI Secure Boot 会阻止未签名的内核模块加载。 - **内核模块加载失败**:驱动安装后未正确加载或 Windows Fast Startup 导致资源锁。 - **驱动安装问题**:驱动可能与 Ubuntu 24.04 不兼容或安装不完整(您已安装驱动 475.14、CUDA 11.4 和 cuDNN 8.1.0,但需验证)。 以下是根据您的描述(Windows 10 安装 K80 驱动 475.14,Ubuntu 24.04 安装 CUDA 11.4 和 cuDNN 8.1.0)的完整解决方案。步骤如下: --- ### 步骤 1: 禁用 Nouveau 驱动(关键步骤) Nouveau 是 Ubuntu 默认的开源 GPU 驱动,必须禁用以避免冲突。参考引用[4]的方法,但适配 Ubuntu 24.04: 1. 打开终端,运行以下命令创建配置文件: ```bash echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf ``` 2. 更新 initramfs 并重启: ```bash sudo update-initramfs -u sudo reboot ``` 3. 重启后验证 Nouveau 是否禁用: ```bash lsmod | grep nouveau # 若无输出,表示成功禁用 ``` ### 步骤 2: 禁用 Secure Boot Secure Boot 会阻止 NVIDIA 驱动加载,因为驱动模块未签名。Ubuntu 24.04 使用 GRUB 引导,需在 UEFI 设置中操作: 1. 重启系统,在启动时按 `F2`、`F10` 或 `Del` 键进入 UEFI/BIOS 设置(具体键因主板而异)。 2. 找到 "Secure Boot" 选项并将其设为 "Disabled"。 3. 保存设置并重启到 Ubuntu。 4. 验证 Secure Boot 状态: ```bash mokutil --sb-state # 若输出 "SecureBoot disabled",表示成功 ``` ### 步骤 3: 检查并重新安装 NVIDIA 驱动 您在 Windows 上安装了驱动,但 Ubuntu 端的驱动可能未正确加载。CUDA 11.4 要求驱动版本 ≥470.82.01,您的 475.14 理论上兼容。但建议重新安装以确保完整: 1. 首先卸载现有 NVIDIA 驱动(参考引用[2]的卸载逻辑): ```bash sudo apt purge nvidia-* # 卸载所有 NVIDIA 包 sudo apt autoremove sudo reboot ``` 2. 安装官方驱动(使用 `-no-opengl-files` 选项避免桌面循环问题,如引用[1]强调的): - 下载驱动:从 [NVIDIA 官网](https://www.nvidia.com/download/driverResults.aspx/214264/en-us) 获取 K80 兼容的 Linux 驱动(版本 475.14)。 - 关闭图形界面: ```bash sudo systemctl stop gdm # Ubuntu 24.04 使用 GDM 显示管理器 ``` - 安装驱动(注意 `-no-opengl-files` 选项,确保 `-` 和字母间无空格): ```bash sudo sh ./NVIDIA-Linux-x86_64-475.14.run -no-opengl-files --dkms ``` 安装过程中选择: - `Accept` 许可协议。 - `Yes` 安装 DKMS 模块。 - `Install and overwrite existing files`(覆盖现有文件)。 - 重启系统: ```bash sudo reboot ``` ### 步骤 4: 验证驱动加载和测试 1. 检查内核模块是否加载: ```bash lsmod | grep nvidia # 应有输出,如 nvidianvidia_uvm 等 ``` 若无输出,运行 `sudo modprobe nvidia` 手动加载。 2. 运行测试命令: ```bash nvidia-smi # 应显示 GPU 信息(包括 K80 详情) nvidia-settings # 应弹出设置窗口 ``` 3. 如果错误仍在,检查日志: ```bash dmesg | grep nvidia # 查看内核日志中的错误线索 ``` ### 步骤 5: 处理双系统冲突(Windows Fast Startup) Windows Fast Startup 可能导致 GPU 资源被锁定,Ubuntu 无法访问: 1. 在 **Windows 10** 中: - 打开 "控制面板" > "电源选项" > "选择电源按钮的功能"。 - 点击 "更改当前不可用的设置"。 - 取消勾选 "启用快速启动"。 - 保存更改并关机。 2. 然后从关机状态启动到 Ubuntu(不要用重启)。 ### 验证问题解决 完成所有步骤后: -Ubuntu 24.04 中运行 `nvidia-smi`,应输出类似以下信息: ``` +------------------------------------------------------+ | NVIDIA-SMI 475.14 Driver Version: 475.14 | |------------------------------------------------------| | GPU Name Persistence-M| Bus-Id Disp.A | |===============================+======================| | 0 NVIDIA K80 On | 00000000:00:04.0 Off | +------------------------------------------------------+ ``` - 如果 CUDA/cuDNN 需要验证,运行 `nvcc --version` 和测试 cuDNN 示例。 ### 注意事项 - **Ubuntu 24.04 兼容性**:K80 是较旧 GPU,但驱动 475.14 支持 Ubuntu 24.04。如果问题持续,考虑使用 CUDA 11.4 推荐的驱动版本(如 470.x)。 - **优先级顺序**:始终先安装驱动,再安装 CUDA/cuDNN(您已安装 CUDA 11.4,但驱动重新安装不会影响 CUDA)。 - **引用提示**:禁用 Nouveau 和选项语法参考了引用[4][^4],安装驱动选项参考引用[1][^1]。 如果以上步骤未解决,请提供 `dmesg | grep nvidia` 的输出进一步诊断。 --- ### 相关问题 1. 如何在 Ubuntu 24.04 上正确安装 NVIDIA 驱动并避免桌面循环问题? 2. Secure Boot 是什么,为什么它会影响 NVIDIA 驱动加载? 3. 在双系统环境中,如何避免 Windows 和 Ubuntu 之间的硬件资源冲突? 4. 如何验证 CUDA 和 cuDNN 在 Ubuntu 24.04 上的安装是否正确?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值