Docker 与 NVIDIA Container Toolkit

2024 年 4 月 14 日 星期日(已编辑)
/ , , , , ,
2
摘要
厘清 Docker 和 NVIDIA Container Toolkit 的各自角色,以 YOLOv5 训练容器为例展示 docker-compose.yml 写法,含 runtime: nvidia、shm_size 等关键配置。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

Docker 与 NVIDIA Container Toolkit

编写时间:2024-04

记录一下 Docker 和 NVIDIA Container Toolkit 各自干什么、怎么配合。以 YOLOv5 训练环境为例。

Docker 和 NVIDIA Container Toolkit 的区别

这俩经常一起出现,但角色完全不同:

组件作用
Docker容器化运行环境,把项目和依赖打包
NVIDIA Driver宿主机上的 GPU 驱动
NVIDIA Container Toolkit让容器访问宿主机 GPU
CUDA 镜像容器内 CUDA/cuDNN/PyTorch 基础环境

Docker 本身不知道 GPU 是什么。NVIDIA Container Toolkit 的角色就是在 docker run 和 GPU 驱动之间架一座桥——它把 GPU 设备文件暴露给容器,让容器里的 CUDA 程序能正常调用驱动。

安装和验证

装完 Docker 后把用户加入 docker 组:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

验证:

docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

能打印出 nvidia-smi 的输出就说明通了。

YOLOv5 容器示例

搭一个可复用的 YOLOv5 训练镜像,项目结构:

/my-yolov5/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── fonts/
└── yolov5-im/
    ├── train.py
    ├── models/
    └── data/

Dockerfile 基于 PyTorch 官方 CUDA 镜像,装好依赖、复制项目代码即可。这里不展开了。

docker-compose.yml

用 compose 比直接 docker run 更干净——挂载、网络、runtime 都写在一处:

services:
  yolov5-im:
    build: .
    image: yolov5-im:latest
    container_name: yolov5_im_train
    volumes:
      - /path/to/datasets:/workspace/yolov5-im/datasets
    working_dir: /workspace/yolov5-im
    runtime: nvidia
    shm_size: '8gb'
    command: sleep infinity
    networks:
      - yolov5net

networks:
  yolov5net:

几个值得注意的点:

  • runtime: nvidia——告诉 compose 用 NVIDIA Container Toolkit,不然容器里看不到 GPU
  • shm_size: '8gb'——PyTorch DataLoader 多 worker 加载时共享内存需求大,默认 64MB 不够
  • command: sleep infinity——让容器保持运行,训练命令手动 docker exec 进去执行,方便调试

常用操作

docker compose up -d                           # 启动
docker exec -it yolov5_im_train /bin/bash      # 进入容器
docker logs --tail 100 yolov5_im_train         # 查看日志
docker cp yolov5_im_train:/workspace/runs ./runs  # 复制训练结果
docker compose down                            # 停止并删除

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...