Ultralytics 的 Docker 快速入门指南
本指南全面介绍了为您的 Ultralytics 项目设置 Docker 环境的过程。Docker 是一个用于开发、交付和运行应用程序的平台,使用容器。它特别有利于确保软件无论部署在哪里都能始终如一地运行。更多详情,请访问 Docker Hub 上的 Ultralytics Docker 仓库。
你将学到什么
- 设置支持 NVIDIA 的 Docker
- 安装 Ultralytics Docker 镜像
- 在 Docker 容器中使用 CPU 或 GPU 支持运行 Ultralytics
- 使用 Docker 显示服务器显示 Ultralytics 检测结果
- 将本地目录挂载到容器中
前提条件
- 确保 Docker 已安装在您的系统上。如果没有,您可以从 Docker 的网站 下载并安装。
- 确保您的系统有 NVIDIA GPU 并且已安装 NVIDIA 驱动程序。
设置支持 NVIDIA 的 Docker
首先,通过运行以下命令验证 NVIDIA 驱动程序是否正确安装:
安装 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
出现在运行时列表中:
安装 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
# 使用所有 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
# 使用所有 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 卷:
将 /path/on/host
替换为本地机器上的目录路径,将 /path/in/container
替换为 Docker 容器内的目标路径。
在 Docker 容器中运行图形用户界面(GUI)应用程序
高度实验性 - 用户承担所有风险
以下说明是实验性的。与 Docker 容器共享 X11 套接字存在潜在的安全风险。因此,建议仅在受控环境中测试此解决方案。有关更多信息,请参阅这些资源,了解如何使用 xhost
(1)(2)。
Docker 主要用于容器化后台应用程序和 CLI 程序,但它也可以运行图形程序。在 Linux 世界中,两个主要的图形服务器处理图形显示:X11(也称为 X Window 系统)和 Wayland。在开始之前,确定当前使用的是哪个图形服务器至关重要。运行以下命令以找出:
X11 或 Wayland 显示服务器的设置和配置不在本指南的范围内。如果上述命令没有返回任何内容,那么您需要先让其中之一在您的系统上工作,然后再继续。
运行带有 GUI 的 Docker 容器
Example
使用 GPU
如果您使用的是 [GPU](#using-gpus),可以在命令中添加 `--gpus all` 标志。
使用带有 GUI 的 Docker
现在您可以在 Docker 容器内显示图形应用程序。例如,您可以运行以下 CLI 命令 来可视化 YOLO11 模型 的 预测:
测试
验证 Docker 组是否可以访问 X11 服务器的简单方法是运行带有 GUI 程序的容器,如 xclock
或 xeyes
。或者,您也可以在 Ultralytics Docker 容器中安装这些程序,以测试您的 GNU-Linux 显示服务器的 X11 服务器访问权限。如果遇到任何问题,请考虑设置环境变量 -e QT_DEBUG_PLUGINS=1
。设置此环境变量将启用调试信息的输出,有助于故障排除。
完成 Docker GUI 后
想直接在终端中查看图像结果?
请参阅以下指南,了解如何在终端中查看图像结果
恭喜!您现在已设置好使用 Docker 的 Ultralytics,并准备好利用其强大的功能。有关其他安装方法,请随意浏览 Ultralytics 快速入门文档。
常见问题
如何使用 Docker 设置 Ultralytics?
要使用 Docker 设置 Ultralytics,首先确保 Docker 已安装在您的系统上。如果您有 NVIDIA GPU,请安装 NVIDIA Docker 运行时以启用 GPU 支持。然后,使用以下命令从 Docker Hub 拉取最新的 Ultralytics Docker 镜像:
有关详细步骤,请参阅我们的 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:
此命令设置了一个具有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
替换为容器内的目标路径。此设置允许您在容器内处理本地文件。更多信息请参阅挂载本地目录相关部分。