启动容器镜像出现docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]报错

更新时间:
复制 MD 格式

GPU云服务器上安装Docker环境后,如果未安装NVIDIA Container Toolkit,通过docker run --gpus all [镜像名称]启动容器镜像时,可能会出现docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]报错,本文为您介绍这种情况的解决方案。

问题描述

GPU云服务器上安装Docker环境后,通过执行 docker run --gpus all [镜像名称] 命令来启动该Docker容器时,出现如下报错:

ecs-user@xxx:~$ sudo docker run --gpus all ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/base:alinux3.2104
Unable to find image 'ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/base:alinux3.2104' locally
a1xxx04: Pulling from ac2/base
49xxx e3: Pull complete
30xxx 7c: Pull complete
17xxx ee: Pull complete
75xxx 8a: Pull complete
9fxxx 55: Pull complete
edxxx 55: Pull complete
Digest: sha256:5065d5946b1e30xxx7xxx4fxxx8xxxdxxx74acxxx6d0180f97
Status: Downloaded newer image for ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/base:alinux3.2104
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]

问题原因

NVIDIA Container ToolkitDocker能够访问GPU资源的工具。在GPU云服务器上安装Docker后,如果NVIDIA Container Toolkit未安装,可能会导致Docker无法选择GPU设备,即出现上述报错。

解决方案

  1. 执行以下命令,确认GPU实例已安装NVIDIA GPU驱动。

    说明

    GPU实例本身并未配备相关驱动,需要单独安装相应驱动。如果NVIDIA GPU驱动未安装,Docker也无法访问GPU设备。

    nvidia-smi

    如果显示驱动版本(如下所示),则表示已成功安装NVIDIA GPU驱动,否则,请继续安装Tesla驱动安装GRID驱动

    NVIDIA-SMI 550.127.08        Driver Version: 550.127.08      CUDA Version: 12.4
    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  NVIDIA A10          On    | 00000000:00:07.0 Off |                    0
     0%   27C    P8    10W / 150W  |      1MiB / 23028MiB |      0%    Default |
                                   |                      |               N/A |
    Processes:
      GPU   GI   CI        PID   Type   Process name                  GPU Memory
            ID   ID                                                   Usage
      No running processes found
  2. 执行以下命令,确认GPU实例已安装Docker。

    sudo docker -v

    如果显示Docker版本(如下所示),表示Docker已安装,否则,请继续安装并使用DockerDocker Compose

    [ecs-xxx ~]$ sudo docker -v
    Docker version 26.1.3, build b72abbb
  3. 执行以下命令,安装NVIDIA Container Toolkit。

    本步骤以CentOS、Alibaba Cloud LinuxUbuntu为例,其他操作系统的安装命令,请参见Installing the NVIDIA Container Toolkit

    • Alibaba Cloud Linux3/CentOS8操作系统

      # 配置源
      curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
        sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
      # 安装
      sudo yum install -y nvidia-container-toolkit
      # 重启Docker服务
      sudo systemctl restart docker

      如果安装失败,可以尝试用如下方法安装

      sudo dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
      sudo yum install -y nvidia-container-toolkit
    • Ubuntu操作系统

      # 配置源
      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' | \
          sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
      sudo apt-get update
      # 安装
      sudo apt-get install -y nvidia-container-toolkit
      # 重启Docker服务
      sudo systemctl restart docker

      如果安装失败,可以尝试用如下方法安装

      distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
      wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/3bf863cc.pub
      sudo apt-key add 3bf863cc.pub
      echo "deb https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64 /" | sudo tee /etc/apt/sources.list.d/cuda.list
      sudo apt-get update
      sudo apt-get install -y nvidia-container-toolkit
  4. 执行以下命令,查看NVIDIA Container Toolkit已成功安装。

    • CentOS\Alibaba Cloud Linux操作系统

      sudo rpm -qa | grep nvidia-container-toolkit
    • Ubuntu操作系统

      sudo dpkg -l | grep nvidia-container-toolkit

    如果显示NVIDIA Container Toolkit版本(如下所示),表示NVIDIA Container Toolkit已正确安装。

    ecs-uxxxx@xxxxxxxxxxxxxxxxxxxxx:~$ sudo dpkg -l | grep nvidia-container-toolkit
    ii  nvidia-container-toolkit            1.17.5-1                              amd64        NVIDIA Container toolkit
    ii  nvidia-container-toolkit-base       1.17.5-1                              amd64        NVIDIA Container Toolkit Base
  5. 执行docker run --gpus all [镜像名称]验证问题已解决。