在使用Docker部署AI模型或进行深度学习训练时,我们经常需要利用NVIDIA GPU进行加速。然而,尝试运行带有–runtime=nvidia或现代–gpus all参数的容器时,可能会遇到以下错误:
1 docker: Error response from daemon: unknown or invalid runtime name: nvidia
这个错误表明Docker守护进程(Daemon)不知道如何处理名为nvidia的运行时。这不是Docker本身的问题,而是缺少了连接Docker和NVIDIA驱动的桥梁——NVIDIA Container Toolkit(即以前的nvidia-docker2)。
本文将提供详细的步骤,解决此问题并正确配置您的AI基础设施。
Contents
预备知识与环境检查
在安装Toolkit之前,请确保您的系统满足以下条件:
- NVIDIA驱动已安装: 确保驱动程序已正确安装并且可以识别您的GPU。
1
2 nvidia-smi
# 运行此命令应显示您的GPU信息,而不是“Command not found”或错误。
- Docker Engine已安装: 确保Docker服务正在运行。
步骤一:安装NVIDIA Container Toolkit
NVIDIA Container Toolkit是解决此问题的核心组件。它负责自动将NVIDIA容器运行时集成到Docker中。
针对 Ubuntu/Debian 系统
推荐使用NVIDIA官方的存储库进行安装。
- 配置存储库:
1
2
3
4
5
6
7
8 # 1. 添加NVIDIA GPG Key
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# 2. 添加存储库源
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/debian/$(. /etc/os-release; echo $ID$VERSION_ID)" | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 3. 更新APT索引
sudo apt update
- 安装Toolkit:
1 sudo apt install -y nvidia-container-toolkit
针对 CentOS/RHEL 系统
1
2 sudo dnf config-manager --add-repo https://nvidia.github.io/libnvidia-container/centos9/libnvidia-container.repo
sudo dnf install -y nvidia-container-toolkit
步骤二:配置与重启Docker服务
安装Toolkit后,您需要通知Docker守护进程进行配置更改并重启服务,使新的运行时生效。
- 配置Docker:
运行以下命令,使用nvidia-ctk工具配置Docker。这通常会自动修改 /etc/docker/daemon.json 文件,添加nvidia运行时配置。
1 sudo nvidia-ctk runtime configure --runtime=docker
配置完成后,/etc/docker/daemon.json的内容可能看起来像这样(如果文件原本为空,则只包含“runtimes”部分):
1
2
3
4
5
6
7
8 {
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
- 重启Docker服务:
1 sudo systemctl restart docker
步骤三:验证GPU运行时
重启服务后,Docker守护进程现在应该能够识别并使用nvidia运行时了。我们可以通过运行一个简单的CUDA容器来验证是否成功。
注意: 现代Docker推荐使用–gpus all而不是遗留的–runtime=nvidia。
1
2 # 运行一个官方的CUDA基础镜像,并执行nvidia-smi
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
如果配置成功,您将看到容器内部输出了与宿主机上运行nvidia-smi时相同的GPU信息。如果仍然报错,请仔细检查步骤一和步骤二的执行情况,特别是Docker服务是否已经重启。
总结
解决unknown or invalid runtime name: nvidia错误的核心在于正确安装和配置 NVIDIA Container Toolkit,它是Docker与NVIDIA GPU之间进行通信的必要桥梁。通过遵循上述步骤,您可以确保您的AI工作负载能够高效地利用GPU资源进行加速部署。
汤不热吧