Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Docker

Docker 将代码、库和模型权重打包到容器镜像中,使其在笔记本电脑、GPU 服务器、CI 运行器和边缘设备上都能以相同方式运行。

Docker 是一个开源平台,可用于构建、共享和运行容器:容器是相互隔离的进程,带有自己的文件系统,其中包含代码、库和系统软件包,同时共享主机的操作系统内核。dotCloud(后来更名为 Docker, Inc.)于 2013 年 3 月将其开源;Docker 的命令行工具、分层镜像格式和公共注册表,让 Linux 容器成为开发者日常使用的工具。在机器学习中,Docker 镜像会固定 Python 版本、CUDA 库、PyTorch 构建版本和模型权重,让模型在笔记本电脑、GPU 服务器、持续集成运行器和边缘设备上表现一致。

Docker 的工作原理#

Dockerfile 会列出构建镜像的步骤:起始基础镜像、安装软件包的命令、要复制进来的文件,以及启动时要运行的命令。每条 RUN、COPY 或 ADD 指令都会添加一个只读层;后续构建会重复使用缓存层,直到某条指令或其输入文件发生变化。因此,较早安装的依赖会保留在缓存中,而应用代码只需几秒钟就能重新构建。镜像就是这些层及其元数据的集合。容器则是镜像的运行实例,其顶部有一个薄薄的可写层;除非将数据写入挂载卷,否则容器删除时,这一层也会被删除。

docker 命令会与 Docker Engine 通信;Docker Engine 是一个后台守护进程,会将每个容器交给 containerd 和底层的 runc 运行时处理。containerd 和底层的 runc 运行时使用 Linux 命名空间隔离容器的进程、网络和文件系统,并使用 cgroups 限制容器的 CPU 和内存。共享镜像的注册表包括 Docker Hub、GitHub Container Registry、NVIDIA NGC,以及各云服务提供商自己的注册表。这些镜像遵循开放容器倡议的镜像格式,因此 Podman、containerd 和 Kubernetes 均可直接运行这些镜像,无需修改。

Ultralytics 为每种硬件目标发布官方 Docker 镜像,包括 CUDA GPU、CPU、ARM64 开发板、NVIDIA Jetson 设备和 AMD GPU;每个镜像还会标记对应的 Ultralytics 版本号,以便实现可复现构建。下面使用的轻量级 latest-python 镜像已经包含 Python、PyTorch、ultralytics 软件包和 YOLO26 nano 权重,因此项目的 Dockerfile 只需添加自己的代码:

# Official Ultralytics CPU image with Python, PyTorch, ultralytics, and yolo26n.pt
FROM ultralytics/ultralytics:latest-python

# Install extra dependencies in their own layer, cached until requirements.txt changes
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy the application last, so code edits rebuild only this layer
COPY app.py .

# Command every container runs when it starts
CMD ["python", "app.py"]

docker build -t yolo-app . 会将此文件及其同目录下的文件构建为镜像,而 docker run --rm yolo-app 会从镜像启动容器。将镜像推送到注册表后,其他任何机器都可以拉取并运行完全相同的环境,例如将其用作模型服务 API 或每晚运行的推理任务。

用于机器学习的 Docker#

容器通过 NVIDIA Container Toolkit 使用 GPU。NVIDIA 驱动程序保留在主机上,镜像只携带 CUDA 用户空间库;这些库必须受该驱动程序支持。在 Linux 上,Docker 28.2 及更高版本默认启用 CDI,因此 --device nvidia.com/gpu=all 会将 GPU 作为 CDI 设备请求,并让长时间运行的容器保持 GPU 访问能力;而旧版 --gpus all 标志在主机重新加载 systemd 时可能失效。

训练时还有两个设置很重要。PyTorch 数据加载器工作进程通过 /dev/shm 中的共享内存向训练进程传递批次数据,而 Docker 默认将共享内存限制为 64 MB,因此训练容器需要设置 --ipc=host 或使用更大的 --shm-size。数据集和输出文件应放在挂载卷中,因为如果训练运行将检查点写入容器内部,容器删除后这些文件也会丢失。使用固定的版本标签或镜像摘要,而不是 latest,可以让分布式训练任务或模型部署在所有机器上使用相同的镜像;NVIDIA Triton Inference Server 等推理服务器和 Vertex AI 等托管服务也都以容器镜像的形式运行模型。

Docker、虚拟机与 Kubernetes 的对比#

  • 虚拟机:虚拟机监控程序会模拟硬件,每个 VM 都会启动自己的客户机内核。这种方式能更好地隔离工作负载,并允许使用任何客户机操作系统,但每个 VM 都需要完整的操作系统镜像,启动也更慢。由于容器共享主机的 Linux 内核,macOS 和 Windows 上的 Docker Desktop 会在轻量级 Linux VM 中运行容器。
  • Docker Compose:定义在同一主机上协同运行的多个容器,例如推理 API、缓存和指标收集器。
  • Kubernetes:在集群中调度容器、重启故障容器,并根据流量扩缩副本。Kubernetes 1.24 移除了 dockershim(其内置的 Docker Engine 适配器),因此集群通过 containerd 或 CRI-O 运行容器。Docker 构建的镜像仍可在其中运行,因为它们是标准 OCI 镜像。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来