Skip to content

Ultralytics 的 Docker 快速入门指南

Ultralytics Docker 包视觉

本指南全面介绍了为您的 Ultralytics 项目设置 Docker 环境的过程。Docker 是一个用于开发、交付和运行应用程序的平台,使用容器。它特别有利于确保软件无论部署在哪里都能始终如一地运行。更多详情,请访问 Docker Hub 上的 Ultralytics Docker 仓库。

Docker 镜像版本 Docker 拉取次数

你将学到什么

  • 设置支持 NVIDIA 的 Docker
  • 安装 Ultralytics Docker 镜像
  • 在 Docker 容器中使用 CPU 或 GPU 支持运行 Ultralytics
  • 使用 Docker 显示服务器显示 Ultralytics 检测结果
  • 将本地目录挂载到容器中

前提条件

  • 确保 Docker 已安装在您的系统上。如果没有,您可以从 Docker 的网站 下载并安装。
  • 确保您的系统有 NVIDIA GPU 并且已安装 NVIDIA 驱动程序。

设置支持 NVIDIA 的 Docker

首先,通过运行以下命令验证 NVIDIA 驱动程序是否正确安装:

nvidia-smi

安装 NVIDIA Docker 运行时

现在,让我们安装 NVIDIA Docker 运行时以在 Docker 容器中启用 GPU 支持:

# 添加 NVIDIA 包仓库
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(lsb_release -cs)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 安装 NVIDIA Docker 运行时
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# 重启 Docker 服务以应用更改
sudo systemctl restart docker

验证 Docker 中的 NVIDIA 运行时

运行 docker info | grep -i runtime 以确保 nvidia 出现在运行时列表中:

docker info | grep -i runtime

安装 Ultralytics Docker 镜像

Ultralytics 提供了多个针对不同平台和使用场景优化的 Docker 镜像:

  • Dockerfile: GPU 镜像,适合训练。
  • Dockerfile-arm64: 适用于 ARM64 架构,适合 Raspberry Pi 等设备。
  • Dockerfile-cpu: 仅 CPU 版本,适合推理和非 GPU 环境。
  • Dockerfile-jetson: 针对 NVIDIA Jetson 设备优化。
  • Dockerfile-python: 最小 Python 环境,适合轻量级应用。
  • Dockerfile-conda: 包含 Miniconda3 并通过 Conda 安装了 Ultralytics 包。

拉取最新镜像:

# 将镜像名称设置为变量
t=ultralytics/ultralytics:latest

# 从 Docker Hub 拉取最新的 Ultralytics 镜像
sudo docker pull $t

在 Docker 容器中运行 Ultralytics

以下是如何执行 Ultralytics Docker 容器的方法:

仅使用 CPU

# 使用所有 GPU 运行
sudo docker run -it --ipc=host $t

使用 GPU

# 使用所有 GPU 运行
sudo docker run -it --ipc=host --gpus all $t

# 指定使用哪些 GPU 运行
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

-it 标志分配一个伪 TTY 并保持 stdin 打开,允许您与容器交互。--ipc=host 标志启用共享主机的 IPC 命名空间,这对于进程间共享内存是必要的。--gpus 标志允许容器访问主机的 GPU。

在 Docker 容器中运行 Ultralytics

以下是如何执行 Ultralytics Docker 容器的方法:

仅使用 CPU

# 使用所有 GPU 运行
sudo docker run -it --ipc=host $t

使用 GPU

# 使用所有 GPU 运行
sudo docker run -it --ipc=host --gpus all $t

# 指定使用哪些 GPU 运行
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

-it 标志分配一个伪 TTY 并保持 stdin 打开,允许您与容器交互。--ipc=host 标志启用共享主机的 IPC 命名空间,这对于进程间共享内存是必要的。--gpus 标志允许容器访问主机的 GPU。

文件访问说明

要在容器内访问本地机器上的文件,可以使用 Docker 卷:

# 将本地目录挂载到容器中
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t

/path/on/host 替换为本地机器上的目录路径,将 /path/in/container 替换为 Docker 容器内的目标路径。

在 Docker 容器中运行图形用户界面(GUI)应用程序

高度实验性 - 用户承担所有风险

以下说明是实验性的。与 Docker 容器共享 X11 套接字存在潜在的安全风险。因此,建议仅在受控环境中测试此解决方案。有关更多信息,请参阅这些资源,了解如何使用 xhost(1)(2)

Docker 主要用于容器化后台应用程序和 CLI 程序,但它也可以运行图形程序。在 Linux 世界中,两个主要的图形服务器处理图形显示:X11(也称为 X Window 系统)和 Wayland。在开始之前,确定当前使用的是哪个图形服务器至关重要。运行以下命令以找出:

env | grep -E -i 'x11|xorg|wayland'

X11 或 Wayland 显示服务器的设置和配置不在本指南的范围内。如果上述命令没有返回任何内容,那么您需要先让其中之一在您的系统上工作,然后再继续。

运行带有 GUI 的 Docker 容器

Example

使用 GPU
如果您使用的是 [GPU](#using-gpus),可以在命令中添加 `--gpus all` 标志。

如果您使用的是 X11,可以运行以下命令以允许 Docker 容器访问 X11 套接字:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host $t

此命令将 DISPLAY 环境变量设置为主机的显示,挂载 X11 套接字,并将 .Xauthority 文件映射到容器。xhost +local:docker 命令允许 Docker 容器访问 X11 服务器。

对于 Wayland,使用以下命令:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t

此命令将 DISPLAY 环境变量设置为主机的显示,挂载 Wayland 套接字,并允许 Docker 容器访问 Wayland 服务器。

使用带有 GUI 的 Docker

现在您可以在 Docker 容器内显示图形应用程序。例如,您可以运行以下 CLI 命令 来可视化 YOLO11 模型预测

yolo predict model=yolo11n.pt show=True
测试

验证 Docker 组是否可以访问 X11 服务器的简单方法是运行带有 GUI 程序的容器,如 xclockxeyes。或者,您也可以在 Ultralytics Docker 容器中安装这些程序,以测试您的 GNU-Linux 显示服务器的 X11 服务器访问权限。如果遇到任何问题,请考虑设置环境变量 -e QT_DEBUG_PLUGINS=1。设置此环境变量将启用调试信息的输出,有助于故障排除。

完成 Docker GUI 后

撤销访问权限

在这两种情况下,完成后不要忘记撤销 Docker 组的访问权限。

xhost -local:docker
想直接在终端中查看图像结果?

请参阅以下指南,了解如何在终端中查看图像结果


恭喜!您现在已设置好使用 Docker 的 Ultralytics,并准备好利用其强大的功能。有关其他安装方法,请随意浏览 Ultralytics 快速入门文档

常见问题

如何使用 Docker 设置 Ultralytics?

要使用 Docker 设置 Ultralytics,首先确保 Docker 已安装在您的系统上。如果您有 NVIDIA GPU,请安装 NVIDIA Docker 运行时以启用 GPU 支持。然后,使用以下命令从 Docker Hub 拉取最新的 Ultralytics Docker 镜像:

sudo docker pull ultralytics/ultralytics:latest

有关详细步骤,请参阅我们的 Docker 快速入门指南

使用Ultralytics Docker镜像进行机器学习项目有哪些好处?

使用Ultralytics Docker镜像确保在不同机器上拥有一致的环境,复制相同的软件和依赖项。这对于跨团队协作、在各种硬件上运行模型以及保持可重复性特别有用。对于基于GPU的训练,Ultralytics提供了优化的Docker镜像,如适用于通用GPU使用的Dockerfile和适用于NVIDIA Jetson设备的Dockerfile-jetson。更多详情请访问Ultralytics Docker Hub

如何在支持GPU的Docker容器中运行Ultralytics YOLO?

首先,确保已安装并配置了NVIDIA Docker运行时。然后,使用以下命令在支持GPU的情况下运行Ultralytics YOLO:

sudo docker run -it --ipc=host --gpus all ultralytics/ultralytics:latest

此命令设置了一个具有GPU访问权限的Docker容器。更多详情请参阅Docker快速入门指南

如何在带有显示服务器的Docker容器中可视化YOLO预测结果?

要在Docker容器中通过GUI可视化YOLO预测结果,您需要允许Docker访问您的显示服务器。对于运行X11的系统,命令如下:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latest

对于运行Wayland的系统,使用:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host ultralytics/ultralytics:latest

更多信息请参阅在Docker容器中运行图形用户界面(GUI)应用程序部分。

我可以将本地目录挂载到Ultralytics Docker容器中吗?

是的,您可以使用-v标志将本地目录挂载到Ultralytics Docker容器中:

sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

/path/on/host替换为您本地机器上的目录,将/path/in/container替换为容器内的目标路径。此设置允许您在容器内处理本地文件。更多信息请参阅挂载本地目录相关部分。


📅 Created 11 months ago ✏️ Updated 13 days ago

Comments