Docker使用宿主机GPU驱动:绕开nvidia docker的神奇方法

0、前言

当我们在一个docker的容器中想要使用GPU时,往往需要从docker image构建之初就开始使用nvidia docker。那么有没有什么方法绕开,直接使用普通的docker,也能让容器访问到宿主机的驱动呢?

有的,兄弟,有的,这样的方法我问GPT了还有1种。

1、具体场景

场景:我是普通的docker运行yolo,需要使用GPU,但是报错:

RuntimeError: 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 这显然是因为docker的隔离使得他没有驱动,但我又不想重新开始搭建nvidia docker image

2、具体方法

需要在宿主机安装 nvidia-container-runtime,让 Docker 自动挂载 GPU 设备和驱动:

安装 nvidia-container-runtime

sudo apt update
sudo apt install -y nvidia-container-runtime

然后,运行容器:

docker run --runtime=nvidia --gpus all -it --name my_gpu_container mynew /bin/bash

--gpus all 是核心

3. 可能报错及解决

然而,sudo apt install -y nvidia-container-runtime时,有可能报错:

E: 无法定位软件包 nvidia-container-runtime

解决方案:

1. 首先,安装 curl

sudo apt install curl

2. 安装完成后,执行命令来添加 NVIDIA 官方软件源:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

3. 你需要下载并添加 NVIDIA 官方 GPG 密钥,解决 NO_PUBKEY 错误。

     运行以下命令来添加缺失的 GPG 密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DDCAE044F796ECB0

4. 接着继续:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

5. 更新 apt 软件源并安装 NVIDIA 容器运行时

sudo apt update
sudo apt install -y nvidia-container-runtime

6. 然后改下配置文件:

sudo nano /etc/docker/daemon.json

7. 如果文件不存在,可以手动创建并添加以下内容: 

{
  "runtimes": {
    "nvidia": {
      "path": "/usr/bin/nvidia-container-runtime"
    }
  }
}

8. 保存文件后,重启 Docker 服务:

sudo systemctl restart docker

9. 最后再执行:

docker run --runtime=nvidia --gpus all -it --name my_gpu_container mynew /bin/bash

你可能感兴趣的:(工具类学习积累,docker,容器,运维)