本文档提供了使用 Docker 容器部署 YOLOv5 的全面说明。Docker 允许您将 YOLOv5 及其所有依赖项打包到标准化的单元中,以便在不同环境中进行开发、交付和部署。
有关将 YOLOv5 作为 REST API 服务的更多信息,请参阅 REST API。有关使用 Triton Inference Server 进行部署的信息,请参阅 Triton Inference Server。
YOLOv5 存储库提供了三个专门的 Docker 镜像,每个镜像都针对不同的部署场景进行了优化
所有镜像都在 ultralytics/yolov5 存储库中自动构建并发布到 Docker Hub。
来源:utils/docker/Dockerfile utils/docker/Dockerfile-cpu utils/docker/Dockerfile-arm64
YOLOv5 Docker 镜像的结构旨在提供一个完整的 YOLOv5 运行环境。每个镜像都基于不同的基础镜像构建,并包含所有必需的依赖项。
来源:utils/docker/Dockerfile6-7 utils/docker/Dockerfile-cpu6-7 utils/docker/Dockerfile-arm646-7
您可以直接从 Docker Hub 拉取预构建的镜像
来源:utils/docker/Dockerfile49-50 utils/docker/Dockerfile-cpu43-44 utils/docker/Dockerfile-arm6440-41
--ipc=host 标志对于多进程性能很重要,而 --gpus all 则启用 GPU 访问。
为了从容器内部访问本地文件(例如数据集、自定义模型)
这使得您的本地 datasets 目录在容器内的 /usr/src/datasets 可用。
来源:utils/docker/Dockerfile52-53 utils/docker/Dockerfile-cpu43-44 utils/docker/Dockerfile-arm6440-41
您可以从 YOLOv5 存储库构建自定义 Docker 镜像
来源:utils/docker/Dockerfile46-47 utils/docker/Dockerfile-cpu39-40 utils/docker/Dockerfile-arm6437-38
下表概述了每个 Docker 镜像中包含的关键组件
| 组件 | GPU 镜像 | CPU 镜像 | ARM64 镜像 | 描述 |
|---|---|---|---|---|
| 基础镜像 | PyTorch CUDA | Ubuntu 23.10 | ARM64 Ubuntu 22.10 | 基础操作系统镜像 |
| 系统依赖项 | gcc, libgl1, 等 | gcc, libgl1, 等 | gcc, libgl1, 等 | 必需的系统库 |
| Python 要求 | 带 CUDA 的 PyTorch | CPU 版 PyTorch | PyTorch | Python 依赖项 |
| 导出库 | ONNX, OpenVINO, CoreML | ONNX, OpenVINO, CoreML | ONNX | 模型导出功能 |
| 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
YOLOv5 使用 GitHub Actions 来自动构建 Docker 镜像,并在更改推送到 master 分支时将其发布到 Docker Hub。
来源:.github/workflows/docker.yml
来源:utils/docker/Dockerfile55-65
为获得最佳性能,尤其是在训练或批量处理期间
共享内存:增加共享内存以处理大批量数据
CPU 线程:镜像默认将 OMP_NUM_THREADS=1 设置为优化多进程
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 API 和 Triton 推理服务器 文档。