跳至内容

Docker 快速入门指南Ultralytics

Ultralytics Docker 软件包可视化

本指南全面介绍如何为Ultralytics 项目设置 Docker 环境。Docker是一个在容器中开发、运输和运行应用程序的平台。它尤其有利于确保软件无论部署在哪里,都能以相同的方式运行。有关详细信息,请访问Docker Hub 上的Ultralytics Docker 存储库。

Docker 映像版本 Docker 拉动

您将学到什么

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

先决条件

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

通过NVIDIA 支持设置 Docker

首先,运行NVIDIA 驱动程序,验证是否已正确安装:

nvidia-smi

安装NVIDIA Docker 运行时

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

# Add NVIDIA package repositories
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

# Install NVIDIA Docker runtime
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# Restart Docker service to apply changes
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:包含通过 Conda 安装的Miniconda3和Ultralytics 软件包。

提取最新图像:

# Set image name as a variable
t=ultralytics/ultralytics:latest

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t

在 Docker 容器中运行Ultralytics

下面介绍如何执行Ultralytics Docker 容器:

仅使用CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

使用图形处理器

# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

"(《世界人权宣言》) -it 标记会分配一个伪 TTY 并保持 stdin 开启,以便与容器进行交互。标记 --ipc=host 标记可共享主机的 IPC 命名空间,这对进程间共享内存至关重要。该 --gpus 标记允许容器访问主机的 GPU。

在 Docker 容器中运行Ultralytics

下面介绍如何执行Ultralytics Docker 容器:

仅使用CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

使用图形处理器

# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

"(《世界人权宣言》) -it 标记会分配一个伪 TTY 并保持 stdin 开启,以便与容器进行交互。标记 --ipc=host 标记可共享主机的 IPC 命名空间,这对进程间共享内存至关重要。该 --gpus 标记允许容器访问主机的 GPU。

关于文件无障碍访问的说明

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

# Mount a local directory into the container
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 窗口系统)和Wayland。在开始之前,必须确定你当前使用的是哪种图形服务器。运行此命令即可知道:

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

X11 或 Wayland 显示服务器的设置和配置不在本指南的讨论范围之内。如果上述命令没有返回任何结果,那么在继续之前,你需要先让你的系统运行这两个命令中的任何一个。

使用图形用户界面运行 Docker 容器

示例

使用图形处理器
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.

如果使用 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 服务器。

通过图形用户界面使用 Docker

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

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

验证 Docker 组是否能访问 X11 服务器的一个简单方法是运行一个带有图形用户界面程序的容器,如 xclockxeyes.或者,你也可以在Ultralytics Docker 容器中安装这些程序,以测试对 GNU-Linux 显示服务器的 X11 服务器的访问。如果遇到任何问题,可考虑设置环境变量 -e QT_DEBUG_PLUGINS=1.设置该环境变量可以输出调试信息,帮助排除故障。

使用 Docker GUI 完成后

撤销访问权限

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

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

请参阅以下使用终端查看图像结果的指南


恭喜您!您现在已经设置好使用Ultralytics 和 Docker,并准备好利用其强大的功能。有关其他安装方法,请浏览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 映像,例如 Dockerfile 一般用于GPU 和 Dockerfile-jetson 用于NVIDIA Jetson 设备。探索 Ultralytics Docker Hub 了解更多详情。

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

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

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

该命令设置一个具有GPU 访问权限的 Docker 容器。有关其他详细信息,请参阅《Docker 快速入门指南》

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

要在 Docker 容器中使用图形用户界面可视化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 容器中吗?

Ultralytics 是的,您可以使用 -v 旗子

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

更换 /path/on/host 本地计算机上的目录,然后 /path/in/container 容器内的所需路径。通过这种设置,您可以在容器内处理本地文件。有关详细信息,请参阅 加载本地目录.



创建于 2023-11-12,更新于 2024-07-05
作者:glenn-jocher(7),Burhan-Q(1),jpedrofonseca_94@hotmail.com(1)

评论