需求说明
希望使用docker-compose启动容器,并在容器中使用GPU。
1. 安装NVIDIA Container Toolkit
在之前老版本的docker,是不支持gpu的,需要额外安装nvidia-docker的,但是新版本的docker可以直接支持容器使用GPU。
启动容器的时候,docker 启动命令中添加 --gpus=all 即可。例如:
docker run -d -it --name="cuda" --gpus=all pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-devel
但是实际使用的时候,发现还需要NVIDIA Container Toolkit。下面介绍在Ubuntu24.04 上安装的过程。
前置条件: 安装好docker、NVIDIA显卡驱动。
- 配置
nvidia-container-toolkit软件存储库,并从存储库更新软件包列表:
# 为 apt 获取 HTTPS 支持
apt install apt-transport-https curl
# 添加 NVIDIA 软件存储库
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
# 更新软件包列表
systemctl daemon-reload sudo apt-get update
- 安装 NVIDIA Container Toolkit:
sudo apt-get install -y nvidia-container-toolkit
- 配置
nvidia-container-runtime,注意在此之前你需要提前安装了受支持的容器引擎(Docker、Containerd、CRI-O、Podman)。
$ docker --version
Docker version 27.0.3, build 7d4bcd8
$ containerd --version
containerd containerd.io 1.7.18 ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
# 使用 nvidia-ctk 命令修改主机上的 /etc/docker/daemon.json 文件
$ sudo nvidia-ctk runtime configure --runtime=docker
# INFO[0000] Loading config from /etc/docker/daemon.json
# INFO[0000] Wrote updated config to /etc/docker/daemon.json
# INFO[0000] It is recommended that docker daemon be restarted.
# /etc/docker/daemon.json 新增配置:
# "runtimes": { "nvidia": { "args": [], "path": "nvidia-container-runtime" } },
- 配置完成后重载systemd以及重启Docker服务。
# 服务重启
sudo systemctl daemon-reload
sudo systemctl restart containerd docker
# 验证运行时
docker info | grep "Runtimes"
# Runtimes: io.containerd.runc.v2 nvidia runc
5.安装和配置工具包并安装NVIDIA GPU驱动程序后,您可以通过运行示例工作负载来验证您的安装。
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
2. 配置docker-compose.yml文件
version: "3.8"
services:
ocr:
image: "xxxxx:xxxxx"
user: "root"
restart: "on-failure"
expose:
- "51005-51007"
ports:
- "51005-51007:51005-51007"
shm_size: "6g"
deploy:
resources:
reservations:
devices:
- device_ids: ["1"]
capabilities: ["gpu"]
driver: "nvidia"
networks:
- "ana"
container_name: "ocr"
tty: "true"
entrypoint: ["supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]
networks:
ana:
driver: bridge
其中,下面的部分是关于GPU配置的
deploy:
resources:
reservations:
devices:
- driver: "nvidia"
count: "all"
capabilities: ["gpu"]