菜单

Docker 部署

相关源文件

本文档提供了使用 Docker 容器部署 YOLOv5 的全面说明。Docker 允许您将 YOLOv5 及其所有依赖项打包到标准化的单元中,以便在不同环境中进行开发、交付和部署。

有关将 YOLOv5 作为 REST API 服务的更多信息,请参阅 REST API。有关使用 Triton Inference Server 进行部署的信息,请参阅 Triton Inference Server

YOLOv5 Docker 镜像概述

YOLOv5 存储库提供了三个专门的 Docker 镜像,每个镜像都针对不同的部署场景进行了优化

  1. GPU 镜像:CUDA 优化,用于 NVIDIA GPU 的训练和推理
  2. CPU 镜像:针对没有 GPU 的系统进行了优化
  3. ARM64 镜像:与 Apple M1、Jetson Nano 和 Raspberry Pi 等 ARM 架构兼容

所有镜像都在 ultralytics/yolov5 存储库中自动构建并发布到 Docker Hub。

来源:utils/docker/Dockerfile utils/docker/Dockerfile-cpu utils/docker/Dockerfile-arm64

Docker 镜像结构

YOLOv5 Docker 镜像的结构旨在提供一个完整的 YOLOv5 运行环境。每个镜像都基于不同的基础镜像构建,并包含所有必需的依赖项。

来源:utils/docker/Dockerfile6-7 utils/docker/Dockerfile-cpu6-7 utils/docker/Dockerfile-arm646-7

使用预构建的 Docker 镜像

从 Docker Hub 拉取镜像

您可以直接从 Docker Hub 拉取预构建的镜像

来源:utils/docker/Dockerfile49-50 utils/docker/Dockerfile-cpu43-44 utils/docker/Dockerfile-arm6440-41

运行 YOLOv5 Docker 容器

基本用法

--ipc=host 标志对于多进程性能很重要,而 --gpus all 则启用 GPU 访问。

挂载本地目录

为了从容器内部访问本地文件(例如数据集、自定义模型)

这使得您的本地 datasets 目录在容器内的 /usr/src/datasets 可用。

来源:utils/docker/Dockerfile52-53 utils/docker/Dockerfile-cpu43-44 utils/docker/Dockerfile-arm6440-41

构建自定义 Docker 镜像

您可以从 YOLOv5 存储库构建自定义 Docker 镜像

来源:utils/docker/Dockerfile46-47 utils/docker/Dockerfile-cpu39-40 utils/docker/Dockerfile-arm6437-38

Docker 镜像组件

下表概述了每个 Docker 镜像中包含的关键组件

组件GPU 镜像CPU 镜像ARM64 镜像描述
基础镜像PyTorch CUDAUbuntu 23.10ARM64 Ubuntu 22.10基础操作系统镜像
系统依赖项gcc, libgl1, 等gcc, libgl1, 等gcc, libgl1, 等必需的系统库
Python 要求带 CUDA 的 PyTorchCPU 版 PyTorchPyTorchPython 依赖项
导出库ONNX, OpenVINO, CoreMLONNX, OpenVINO, CoreMLONNX模型导出功能
YOLOv5 代码完整仓库完整仓库完整仓库核心 YOLOv5 代码库
工作目录/usr/src/app/usr/src/app/usr/src/app默认容器目录

来源:utils/docker/Dockerfile12-36 utils/docker/Dockerfile-cpu12-34 utils/docker/Dockerfile-arm6412-32

Docker 镜像的 CI/CD 流水线

YOLOv5 使用 GitHub Actions 来自动构建 Docker 镜像,并在更改推送到 master 分支时将其发布到 Docker Hub。

来源:.github/workflows/docker.yml

常用 Docker 操作

运行 YOLOv5 推理任务

管理 Docker 容器

来源:utils/docker/Dockerfile55-65

性能优化

内存和资源配置

为获得最佳性能,尤其是在训练或批量处理期间

  1. 共享内存:增加共享内存以处理大批量数据

  2. CPU 线程:镜像默认将 OMP_NUM_THREADS=1 设置为优化多进程

  3. GPU 访问:确保已安装 NVIDIA Container Toolkit 以便 GPU 访问

来源:utils/docker/Dockerfile utils/docker/Dockerfile70-72

故障排除

常见问题与解决方案

问题解决方案
未检测到 GPU安装 NVIDIA Container Toolkit 并使用 --gpus all 标志
挂载卷时出现权限错误检查文件权限或使用 --user 标志
内存不足错误使用 --shm-size 增加共享内存
性能缓慢使用 --ipc=host 确保 IPC 命名空间共享
镜像构建失败检查系统要求和可用磁盘空间

来源:utils/docker/Dockerfile46-65 utils/docker/Dockerfile-cpu37-44 utils/docker/Dockerfile-arm6435-41

示例工作流程

开发工作流

生产部署工作流程

来源: utils/docker/Dockerfile44-65 utils/docker/Dockerfile-cpu37-44 utils/docker/Dockerfile-arm6435-41

结论

Docker 提供了一种强大灵活的方式,可在不同环境部署 YOLOv5。预先构建的 Docker 镜像为各种硬件目标提供了优化的配置,而构建自定义镜像的能力则允许进行定制化部署。

有关更专业的部署场景,请参阅 REST APITriton 推理服务器 文档。