nvidia-docker容器中nvidia-smi中CUDA Version显示N/A

本文介绍了解决Docker容器内CUDA版本显示为N/A及torch.cuda.is_available()报错的方法。通过设置环境变量-e NVIDIA_VISIBLE_DEVICES=all 和-e NVIDIA_DRIVER_CAPABILITIES=compute,utility,可以启用容器内的CUDA支持。对于更高版本的Docker,可以直接使用-egpus=all参数来简化配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nvidia-docker2版本以上增加在启动容器的时候加上

 -e NVIDIA_VISIBLE_DEVICES=all

在容器中使用nvidia-smi可以显示出GPU信息

                                                                        图源:来自网络

 但是发现CUDA Version的版本为N/A,使用torch.cuda.is_available()会出现报错

UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:100.)
  return torch._C._cuda_getDeviceCount() > 0

造成这样的主要原因是因为环境变量的配置

需要在启动容器时候加上

-e NVIDIA_DRIVER_CAPABILITIES=compute,utility

如果你不改这个环境变量,宿主机的nvidia driver在容器内是仅作为utility存在的,也就是个花瓶。如果加上compute,宿主机的英伟达driver将对容器提供计算支持(所谓的计算支持也就是cuda支持)。

这样大概率问题就解决了

当然更推荐是将docker版本升级19以后,就不用使用nvidia-docker操作,在docker起容器的时候直接加上

-e gpus=all

就可以使用宿主机的GPU了,更为方便。

参考:

Found no NVIDIA driver on your system · Issue #533 · NVIDIA/nvidia-docker · GitHub

<think>我们正在处理一个关于解释nvidia-docker安装脚本命令的问题。用户希望理解并验证安装脚本中各个命令的含义。 根据提供的引用,我们可以提取出安装脚本的相关命令并逐一解释。 主要步骤分为两个部分: 1. 安装Docker(如果尚未安装) 2. 设置NVIDIA Container Toolkit 下面我们逐步解释每个命令: 第一步:安装Docker(引用[3]和引用[4]中都有提及) 使用curl下载并运行安装脚本: ``` curl https://get.docker.com | sh \ && sudo systemctl start docker \ && sudo systemctl enable docker ``` 解释: - `curl https://get.docker.com`:从Docker官网获取安装脚本。 - `| sh`:将下载的脚本通过管道传递给shell执行,即运行安装脚本。 - `&&`:如果前一个命令成功,则执行下一个命令。 - `sudo systemctl start docker`:启动docker服务。 - `sudo systemctl enable docker`:设置docker服务开机自启。 第二步:设置NVIDIA Container Toolkit(引用[3]和引用[4]) 1. 设置仓库和GPG密钥: ``` distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list ``` 解释: - `distribution=$(. /etc/os-release;echo $ID$VERSION_ID)`:获取当前系统的发行版名称和版本号(例如Ubuntu18.04会得到ubuntu18.04),并赋值给变量distribution- `curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey`:安静地(-s)下载NVIDIA Docker仓库的GPG密钥(-L表示跟随重定向)。 - `| sudo apt-key add -`:将下载的密钥添加到apt的信任密钥中。 - 第二个curl命令:下载与当前发行版对应的仓库列表文件(nvidia-docker.list),并通过`tee`命令将其写入到`/etc/apt/sources.list.d/nvidia-docker.list`(同时输出到屏幕)。 2. 更新apt并安装nvidia-docker2: ``` sudo apt-get update sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker ``` 解释: - `sudo apt-get update`:更新软件包列表,以包含新添加的nvidia-docker仓库。 - `sudo apt-get install -y nvidia-docker2`:安装nvidia-docker2软件包(-y表示自动确认)。 - `sudo systemctl restart docker`:重启docker服务,使配置生效。 3. 测试安装(引用[2]和引用[3]): ``` sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi ``` 解释: - 运行一个基于CUDA 11.0基础镜像的容器,并执行`nvidia-smi`命令。 - `--rm`:容器退出后自动删除。 - `--gpus all`:将宿主机的所有GPU设备挂载到容器中(这是nvidia-docker2提供的功能)。 - 运行后,如果安装成功,将显示宿主机的GPU信息。 另外,引用[1]中提到了另一种测试方式(使用nvidia-docker命令,但注意nvidia-docker已经被废弃,现在推荐使用`--gpus`选项): ``` nvidia-docker run -it -d --name your_name -e TZ='Asia/Shanghai' your_ai_image:latest ``` 但根据官方文档,现在更推荐使用`docker run --gpus`的方式。 总结:以上命令完成了从安装Docker到设置NVIDIA Container Toolkit,再到测试的整个过程。 根据用户要求,我们生成相关问题: 1. 为什么在安装nvidia-docker2之后需要重启docker服务? 2. 如何验证NVIDIA Docker是否安装成功? 3. 安装过程中如果遇到GPG密钥错误应该怎么办? 4. 如何指定容器使用的GPU数量? 注意:在回答中,我们引用了提供的引用内容,并在相应位置添加了引用标识。</think>### NVIDIA Docker 安装脚本命令详解 以下是对安装脚本中关键命令的逐行解释,参考提供的引用内容: #### **1. Docker 安装脚本** ```bash curl https://get.docker.com | sh \ && sudo systemctl start docker \ && sudo systemctl enable docker ``` - **`curl https://get.docker.com | sh`** 从 Docker 官方获取安装脚本并通过 `sh` 执行,自动完成 Docker-CE 安装[^3][^4]。 - **`sudo systemctl start docker`** 启动 Docker 守护进程。 - **`sudo systemctl enable docker`** 设置 Docker 开机自启。 #### **2. NVIDIA Container Toolkit 配置** ```bash distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list ``` - **`distribution=$(. /etc/os-release;echo $ID$VERSION_ID)`** 自动获取当前系统的发行版名称和版本号(如 `ubuntu18.04`)[^3]。 - **`curl -s -L ... | sudo apt-key add -`** 下载 NVIDIA 仓库的 GPG 密钥并添加到 APT 信任列表(`-s` 静默模式,`-L` 跟随重定向)。 - **`curl -s -L ... | sudo tee /etc/apt/sources.list.d/nvidia-docker.list`** 下载对应发行版的仓库列表文件,并写入 `/etc/apt/sources.list.d/nvidia-docker.list`[^3]。 #### **3. 安装 NVIDIA Docker** ```bash sudo apt-get update sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker ``` - **`sudo apt-get update`** 刷新软件包列表,使新添加的 NVIDIA 仓库生效。 - **`sudo apt-get install -y nvidia-docker2`** 安装 `nvidia-docker2` 软件包(`-y` 自动确认)[^3]。 - **`sudo systemctl restart docker`** 重启 Docker 以加载 NVIDIA 运行时配置。 #### **4. 验证安装** ```bash sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi ``` - **`--rm`**:容器退出后自动删除。 - **`--gpus all`**:将宿主机所有 GPU 设备挂载到容器内[^2]。 - **`nvidia/cuda:11.0-base`**:使用 NVIDIA 官方 CUDA 基础镜像。 - **`nvidia-smi`**:在容器内运行 GPU 状态检测工具,输出 GPU 信息即表示成功[^2][^3]。 ### 关键组件说明 1. **`nvidia-docker2`** 提供 Docker 运行时扩展,使容器能直接调用宿主机 GPU 驱动[^3]。 2. **`--gpus` 参数** 替代旧版 `nvidia-docker` 命令,是 Docker 原生支持的 GPU 挂载方式[^2]。 > **验证逻辑**:若 `nvidia-smi` 在容器内输出与宿主机相同的 GPU 信息,则证明安装成功[^2]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值