解决关于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
更多推荐
所有评论(0)