1. 安装nvidia-docker
nvidia-docker2 这个包名已经被 NVIDIA 废弃,不再使用。现在的推荐做法是安装 nvidia-container-toolkit,这是 NVIDIA 容器工具包的新名称,它提供了与 Docker 集成的功能,用于运行 GPU 加速的容器。如果你尝试使用 apt-get install -y nvidia-docker2 命令,可能会遇到“无法找到包”的错误,因为这个包名已经不存在于官方仓库中了。
2. 安装必要的依赖
sudo apt-get update
sudo apt-get install -y apt-transport-inks ca-certificates curl gnupg lsb-release
3. 添加 NVIDIA 的 GPG 密钥
curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
4. 设置 NVIDIA Docker 仓库
首先确定你的 Ubuntu 版本(例如,focal 表示 20.04),然后使用以下命令来设置仓库:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.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-docker.list
5. 更新软件包索引并安装 NVIDIA Container Toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
6. 重启 Docker 服务
sudo systemctl restart docker
7. 验证安装
可以通过运行一个简单的 NVIDIA Docker 容器来验证安装是否成功:
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
完成以上步骤后,你应该能够成功安装并使用 NVIDIA 的 GPU 支持功能。希望这些步骤对你有帮助!
启动容器
在新版本中,NVIDIA 推荐使用普通的 docker 命令来启动 GPU 容器,而不是 nvidia-docker。这是因为 nvidia-container-toolkit 已经集成了对 Docker 的支持,使得你可以直接使用 docker 命令来运行带有 GPU 支持的容器。
使用普通 docker 命令启动 GPU 容器
在启动容器时,使用 --gpus 选项来指定要使用的 GPU。例如:
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
这个命令会启动一个带有所有可用 GPU 的容器,并运行 nvidia-smi 命令来验证 GPU 是否正确挂载。
假设你想启动一个带有 CUDA 11.0 的容器,并运行一个简单的测试:
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
指定特定的 GPU
你可以指定特定的 GPU ID 或者 UUID。例如:
sudo docker run --rm --gpus '"device=0"' nvidia/cuda:11.0-base nvidia-smi
限制 GPU 内存
你可以限制容器可以使用的 GPU 内存量。例如:
sudo docker run --rm --gpus '"device=0,capabilities=compute,memory=4G"' nvidia/cuda:11.0-base nvidia-smi
验证
你可以通过运行 nvidia-smi 命令来验证 GPU 是否正确挂载到容器中。如果一切正常,你应该能看到 GPU 的相关信息。
总结
使用 nvidia-container-toolkit 后,你不再需要使用 nvidia-docker 命令,而是可以直接使用 docker 命令,并通过 --gpus 选项来管理 GPU 资源。这样可以简化你的工作流程,并且更好地集成到现有的 Docker 生态系统中。