解决关于Docker运行容器使用GPU资源时的异常:could not select device driver ““ with capabilities: [[gpu]]

异常场景

执行如下命令,启动一个容器,同时在运行容器的时候调用GPU

docker run -d -p 6008:6008 --gpus all registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest

--gpus all参数说明:运行容器的时候调用本机的GPU

运行容器出现如下异常:

Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

原因分析

上述异常问题可以大概推断出:Docker容器无法选择正确的GPU设备驱动程序,可能是由于Docker运行时的配置或GPU设备驱动程序配置不正确所致。

大概在Docker19版本之后,Docker可以直接获得GPU资源的支持, 其支持不需要再单独安装nvidia-docker,它已被集成到Docker中。

1.检查GPU设备驱动程序:

确保已正确安装适用于系统和 GPU 设备的 NVIDIA 驱动程序。可以通过运行以下命令来验证GPU 驱动程序的安装

ChatGLM3) root@master:~/work/# nvidia-smi
Tue Feb 27 01:38:39 2024       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.154.05             Driver Version: 535.154.05   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla V100S-PCIE-32GB          Off | 00000000:23:00.0 Off |                    0 |
| N/A   68C    P0              50W / 250W |  12352MiB / 32768MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A    592394      C   .../envs/Langchain-Chatchat/bin/python    12348MiB |

2.更新Docker版本:

使用适合系统的包管理工具(如 apt、yum、brew 等)来更新 Docker 到最新版本。例如,这里使用 apt,可以运行以下命令来更新Docker

sudo apt update

sudo apt upgrade docker-ce

sudo systemctl restart docker

3.推测原因

在Docker容器中使用宿主机的GPU资源,需要在执行docker run命令的时候添加 --gpus all参数即可轻松实现容器使用宿主机的GPU资源。

目前系统安装Docker版本是最新且满足当前要求,故应该能使用GPU资源才对,但是出现了上述异常,因此,怀疑是因为nvidia-docker的问题,于是尝试安装NVIDIA容器工具包

解决方法

既然通过--gpus参数调用宿主机GPU失败,那就重新安装一个英伟达的容器工具包

安装和配置NVIDIA Container Toolkit步骤:

1.按照NVIDIA 官方文档中提供的指南,安装NVIDIA容器运行时。

2.配置Docker守护程序以使用NVIDIA运行时。可以按照官方文档中的说明来编辑Docker守护程序配置文件,以确保Docker正确识别GPU资源。

具体官方文档参考Installing the NVIDIA Container Toolkit安装说明解决

安装

这里使用Ubuntu系统,因此选择其中使用 Apt 安装方式,执行如下命令即可安装NVIDIA Container Toolkit

1.配置生产存储库:

NVIDIA容器工具包不能直接通过apt install命令安装,因此需要先执行如下命令添加英伟达的apt软件源

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

2.从存储库更新包列表:

sudo apt-get update

3.安装 NVIDIA Container Toolkit 软件包:

确保英伟达软件源添加成功后,执行如下命令直接通过apt命令安装nvidia-container-toolkit

sudo apt-get install -y nvidia-container-toolkit

配置

先决条件:

安装了受支持的容器引擎(Docker、Containerd、CRI-O、Podman)

安装了 NVIDIA Container Toolkit

这里使用Docker,故选择配置Docker方式

1.使用以下命令配置容器运行时nvidia-ctk:

该nvidia-ctk命令修改/etc/docker/daemon.json主机上的文件。该文件已更新,以便 Docker 可以使用 NVIDIA 容器运行时。

sudo nvidia-ctk runtime configure --runtime=docker

检查 Docker 配置文件,确保已启用对 GPU 的支持

{
    "registry-mirrors": [
        "https://xxxx.mirror.aliyuncs.com"
    ],
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    }
}

2.重新启动 Docker 守护进程:

sudo systemctl restart docker
回答: 这个错误信息表明Docker无法选择具备GPU功能的设备驱动程序。这可能是由于以下几个原因导致的:\[1\]\[2\]\[3\] 1. 缺少正确的GPU驱动程序:确保在主机上安装了正确的GPU驱动程序,并且驱动程序与Docker版本兼容。 2. 没有正确配置Docker:检查Docker的配置文件,确保已正确配置GPU支持。可以通过编辑Docker的配置文件来启用GPU支持。 3. 权限问题:确保当前用户具有访问GPU设备的权限。可以尝试使用sudo命令以管理员权限运行Docker命令。 4. Docker版本不兼容:某些Docker版本可能不支持GPU功能。尝试升级到最新版本的Docker,以确保GPU功能得到支持。 请根据具体情况尝试上述解决方法,以解决该错误。 #### 引用[.reference_title] - *1* *3* [docker gpu报错Error response from daemon: could not select device driver ““ with capabilities: [...](https://blog.csdn.net/weixin_44966641/article/details/123760614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [docker: Error response from daemon: could not select device driver的原因及解决办法](https://blog.csdn.net/uzwuzw/article/details/116213250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeDevMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值