Docker-compose 启动容器,使用GPU

1,028 阅读2分钟

需求说明

希望使用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显卡驱动。

  1. 配置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
  1. 安装 NVIDIA Container Toolkit:
sudo apt-get install -y nvidia-container-toolkit 
  1. 配置 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" } },
  1. 配置完成后重载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

image.png

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"]

参考资料