通过 Docker 🚀 开始使用 YOLOv5#
欢迎阅读 Ultralytics YOLOv5 Docker 快速入门指南!本教程将分步指导你如何在 Docker 容器中设置并运行 YOLOv5。使用 Docker 可以在隔离且一致的环境中运行 YOLOv5,从而简化不同系统上的部署和依赖管理。此方法利用容器化将应用程序及其依赖项打包在一起。
如需采用其他设置方法,可参考我们的 Colab Notebook
、GCP Deep Learning VM 或 Amazon AWS 指南。若要大致了解如何将 Docker 与 Ultralytics 模型配合使用,请参阅 Ultralytics Docker 快速入门指南。
前置条件#
开始之前,请确保已安装以下组件:
- Docker:从 Docker 官方网站下载并安装 Docker。Docker 是创建和管理容器的必备工具。
- NVIDIA 驱动程序(GPU 支持所必需):请确保已安装 455.23 或更高版本的 NVIDIA 驱动程序。你可以从 NVIDIA 网站下载最新驱动程序。
- NVIDIA Container Toolkit(GPU 支持所必需):此工具包允许 Docker 容器访问主机上的 NVIDIA GPU。请按照官方的 NVIDIA Container Toolkit 安装指南了解详细说明。
设置 NVIDIA Container Toolkit(GPU 用户)#
首先,运行以下命令,确认 NVIDIA 驱动程序已正确安装:
nvidia-smi此命令应显示 GPU 信息和已安装的驱动程序版本。
接下来,安装 NVIDIA Container Toolkit。以下命令通常适用于 Ubuntu 等基于 Debian 的系统,以及 Fedora/CentOS 等基于 RHEL 的系统;有关特定发行版的说明,请参阅上文链接的官方指南:
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更新软件包列表并安装 NVIDIA Container Toolkit:
sudo apt-get updatesudo apt-get install -y nvidia-container-toolkit使用 Docker 验证 CDI 设备#
运行 nvidia-ctk cdi list,确保 GPU CDI 设备可用(在 toolkit >= 1.18 时,toolkit 的 nvidia-cdi-refresh 服务会自动生成并维护规范):
nvidia-ctk cdi list你应该会看到 nvidia.com/gpu=0 和 nvidia.com/gpu=all 等条目。在 Linux 上,CDI 设备请求要求 Docker >= 28.2.0 且 NVIDIA Container Toolkit >= 1.18。旧版 --gpus all 标志在主机守护进程重新加载后可能导致 GPU 访问丢失,因此请升级较旧的 Linux 主机并改用 --device。
步骤 1:拉取 YOLOv5 Docker 镜像#
Ultralytics 在 Docker Hub 上提供官方 YOLOv5 镜像。latest 标签会跟踪仓库中的最新提交,确保你始终获取最新版本。使用以下命令拉取镜像:
# Define the image name with tag
t=ultralytics/yolov5:latest
# Pull the latest YOLOv5 image from Docker Hub
sudo docker pull $t你可以在 Ultralytics YOLOv5 Docker Hub 仓库浏览所有可用镜像。
步骤 2:运行 Docker 容器#
拉取镜像后,你就可以将其作为容器运行。
仅使用 CPU#
若要仅使用 CPU 运行交互式容器实例,请使用 -it 标志。--ipc=host 标志允许共享主机 IPC 命名空间,这对共享内存访问很重要。
# Run an interactive container instance using CPU
sudo docker run -it --ipc=host $t使用 GPU#
若要在容器中启用 GPU 访问,请使用 --device nvidia.com/gpu=... CDI 标志。为此必须正确安装 NVIDIA Container Toolkit。
# Run with access to all available GPUs
sudo docker run -it --ipc=host --device nvidia.com/gpu=all $t
# Run with access to specific GPUs (e.g., GPUs 2 and 3)
sudo docker run -it --ipc=host --device nvidia.com/gpu=2 --device nvidia.com/gpu=3 $t有关命令选项的更多详情,请参阅 Docker run 参考。
挂载本地目录#
若要在容器中使用本地文件(数据集、模型权重等),请使用 -v 标志,将主机目录挂载到容器中:
# Mount /path/on/host (your local machine) to /path/in/container (inside the container)
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container $t将 /path/on/host 替换为你计算机上的实际路径,并将 /path/in/container 替换为 Docker 容器内所需的路径(例如 /usr/src/datasets)。
步骤 3:在 Docker 容器中使用 YOLOv5 🚀#
现在你已进入正在运行的 YOLOv5 Docker 容器!在容器中,你可以执行标准 YOLOv5 命令,完成各种机器学习和深度学习任务,例如目标检测。
# Train a YOLOv5 model on your custom dataset (ensure data is mounted or downloaded)
python train.py --data your_dataset.yaml --weights yolov5s.pt --img 640 # Start training
# Validate the trained model's performance (Precision, Recall, mAP)
python val.py --weights path/to/your/best.pt --data your_dataset.yaml # Validate accuracy
# Run inference on images or videos using a trained model
python detect.py --weights yolov5s.pt --source path/to/your/images_or_videos # Perform detection
# Export the trained model to various formats like ONNX, CoreML, or TFLite for deployment
python export.py --weights yolov5s.pt --include onnx coreml tflite # Export model了解更多关于 Precision、Recall 和 mAP 等评估指标的信息。了解 ONNX、CoreML 和 TFLite 等不同导出格式,并探索各种模型部署选项。记得妥善管理你的模型权重。

你已成功在 Docker 容器中设置并运行 YOLOv5。
常见问题#
PyTorch 数据加载器工作进程会通过共享内存共享张量,而 Docker 默认分配的 64 MB 共享内存太小。
--ipc=host会共享主机的内存段;如果你希望容器保持隔离,也可以使用--shm-size=8g。在主机上运行
nvidia-smi以确认驱动程序正常工作,使用nvidia-ctk cdi list验证 NVIDIA Container Toolkit 已安装,并确保 Docker 版本为 28.2 或更高,以便接受--device nvidia.com/gpu=all。使用
-v /path/on/host:/path/in/container挂载主机目录,并将--data和--project指向挂载路径。容器中其他位置写入的文件会在容器移除时被丢弃。可以,但容器需要访问显示服务器。请参阅 Ultralytics Docker 指南中的 X11 和 Wayland 说明。如果没有显示服务器,请改用
--save-txt或默认的runs/detect/输出保存结果。