YOLO Vision 2026:

Hướng dẫn nhanh Docker cho Ultralytics#

Ultralytics Docker Package Visual

Hướng dẫn này đóng vai trò là tài liệu giới thiệu toàn diện về việc thiết lập môi trường Docker cho các dự án Ultralytics của bạn. Docker là một nền tảng để phát triển, vận chuyển và chạy các ứng dụng trong container. Nó đặc biệt hữu ích để đảm bảo phần mềm sẽ luôn chạy đồng nhất, bất kể được triển khai ở đâu. Để biết thêm chi tiết, hãy truy cập kho lưu trữ Docker của Ultralytics trên Docker Hub.

Docker Image Version Docker Pulls

Những gì bạn sẽ học#

  • Thiết lập Docker với hỗ trợ NVIDIA
  • Cài đặt các Docker image của Ultralytics
  • Chạy Ultralytics trong Docker container với hỗ trợ CPU hoặc GPU
  • Sử dụng display server với Docker để hiển thị kết quả phát hiện của Ultralytics
  • Mount các thư mục cục bộ vào container


Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉

Điều kiện tiên quyết#

  • Hãy đảm bảo rằng Docker đã được cài đặt trên hệ thống của bạn. Nếu chưa, bạn có thể tải xuống và cài đặt nó từ trang web của Docker.
  • Để tăng tốc GPU, hãy đảm bảo hệ thống của bạn có GPU NVIDIA và đã cài đặt NVIDIA drivers. Các image CPU không yêu cầu phần cứng NVIDIA.
  • Nếu bạn đang sử dụng các thiết bị NVIDIA Jetson, hãy đảm bảo rằng bạn đã cài đặt phiên bản JetPack phù hợp. Tham khảo hướng dẫn NVIDIA Jetson để biết thêm chi tiết.

Thiết lập Docker với hỗ trợ NVIDIA (Tùy chọn)#

Trước tiên, hãy xác minh rằng các driver NVIDIA đã được cài đặt đúng cách bằng cách chạy:

nvidia-smi

Cài đặt NVIDIA Container Toolkit#

Bây giờ, hãy cài đặt NVIDIA Container Toolkit để kích hoạt hỗ trợ GPU trong các Docker container:

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

Cập nhật danh sách gói và cài đặt NVIDIA Container Toolkit:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Xác minh thiết bị CDI với Docker#

Chạy nvidia-ctk cdi list để đảm bảo các thiết bị GPU CDI khả dụng (dịch vụ nvidia-cdi-refresh của bộ công cụ sẽ tự động tạo và duy trì thông số kỹ thuật trên phiên bản toolkit >= 1.18):

nvidia-ctk cdi list

Bạn sẽ thấy các mục như nvidia.com/gpu=0nvidia.com/gpu=all. Các thiết bị CDI được phát hiện cũng sẽ xuất hiện trong docker info.


Cài đặt các Docker image của Ultralytics#

Ultralytics xuất bản các image sau lên Docker Hub. Mỗi image được xây dựng từ Dockerfile được liên kết bởi Docker publishing workflow.

TagNền tảng và mục đíchNguồn
latestLinux AMD64 với CUDA cho việc huấn luyện và suy luận GPUDockerfile
latest-exportLinux AMD64 với CUDA và các dependency xuất để chuyển đổi và kiểm chuẩnDockerfile-export
latest-pythonImage Linux AMD64 Python nhẹ dành cho suy luận CPUDockerfile-python
latest-python-exportImage Linux AMD64 CPU với các dependency xuấtDockerfile-python-export
latest-cpuImage Linux AMD64 CPU với Bash là lệnh mặc địnhDockerfile-cpu
latest-jupyterImage Linux AMD64 CPU với JupyterLab và các notebook hướng dẫn của UltralyticsDockerfile-jupyter
latest-arm64Image Linux ARM64 CPU cho Apple silicon, Raspberry Pi và các hệ thống ARM64 khácDockerfile-arm64
latest-nvidia-arm64Linux ARM64 với hỗ trợ GPU NVIDIA cho Jetson AGX Thor, DGX Spark, JetPack 7 và DGX OSDockerfile-nvidia-arm64
latest-jetson-jetpack6Linux ARM64 cho thiết bị NVIDIA Jetson chạy JetPack 6Dockerfile-jetson-jetpack6
latest-jetson-jetpack5Linux ARM64 cho thiết bị NVIDIA Jetson chạy JetPack 5Dockerfile-jetson-jetpack5
latest-jetson-jetpack4Linux ARM64 cho thiết bị NVIDIA Jetson chạy JetPack 4Dockerfile-jetson-jetpack4
latest-runnerImage Linux AMD64 CUDA cho GPU runner tự lưu trữ trên GitHub ActionsDockerfile-runner
latest-runner-cpuImage Linux AMD64 cho CPU runner tự lưu trữ trên GitHub ActionsDockerfile-runner-cpu

Các tag bắt đầu bằng latest theo dõi bản build chính mới nhất vừa được xuất bản. Các tag phiên bản thay thế tiền tố latest bằng một bản phát hành Ultralytics, chẳng hạn như VERSION, VERSION-cpu hoặc VERSION-jetson-jetpack6. Hãy sử dụng tag phiên bản để có môi trường tái lập được.

Để pull image mới nhất:

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull ultralytics/ultralytics:latest

Chạy Ultralytics trong Docker container#

Đây là cách thực thi Docker container của Ultralytics:

Chỉ sử dụng CPU#

# Run without GPU
sudo docker run -it --ipc=host ultralytics/ultralytics:latest-cpu

Sử dụng các GPU#

# Run with all GPUs
sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --device nvidia.com/gpu=2 --device nvidia.com/gpu=3 ultralytics/ultralytics:latest

Cờ -it gán một pseudo-TTY và giữ stdin mở, cho phép bạn tương tác với container. Cờ --ipc=host cho phép chia sẻ namespace IPC của host, điều cần thiết để chia sẻ bộ nhớ giữa các tiến trình. Cờ --device nvidia.com/gpu=... cấp cho container quyền truy cập vào các GPU của host thông qua CDI.

Sử dụng CDI thay vì `--gpus all`

Trên Linux, các yêu cầu thiết bị CDI yêu cầu Docker >= 28.2.0 (CDI được bật theo mặc định) và nvidia-container-toolkit >= 1.18 (tự động tạo đặc tả CDI). Hãy nâng cấp các máy chủ Linux cũ trước khi chạy container GPU. Flag --gpus all cũ có thể làm mất quyền truy cập GPU (Failed to initialize NVML: Unknown Error) khi máy chủ tải lại systemd trong quá trình cập nhật gói định kỳ (nvidia-container-toolkit#48). Các yêu cầu CDI --device bao gồm các node thiết bị trong cấu hình container, vì vậy các container chạy lâu như worker huấn luyện hoặc CI runner sẽ giữ được quyền truy cập GPU khi tải lại.

Hỗ trợ GPU Docker Desktop trên Windows hiện sử dụng --gpus all với backend WSL 2 vì các thiết bị NVIDIA CDI không khả dụng ở đó. Windows không sử dụng systemd của Linux, vì vậy lỗi daemon-reload ở trên không áp dụng.

Lưu ý về khả năng truy cập tệp#

Để làm việc với các tệp trên máy cục bộ của bạn bên trong container, bạn có thể sử dụng Docker volume:

# Mount a local directory into the container
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

Thay thế /path/on/host bằng đường dẫn thư mục trên máy cục bộ của bạn và /path/in/container bằng đường dẫn mong muốn bên trong Docker container.

Lưu trữ kết quả huấn luyện#

Các kết quả huấn luyện sẽ lưu vào /ultralytics/runs/<task>/<name>/ bên trong container theo mặc định. Nếu không mount một thư mục host, các kết quả sẽ bị mất khi container bị xóa.

Để lưu trữ kết quả huấn luyện:

# Recommended: mount workspace and specify project path
sudo docker run --rm -it -v "$(pwd)":/w -w /w ultralytics/ultralytics:latest \
  yolo train model=yolo26n.pt data=coco8.yaml project=/w/runs

Lệnh này lưu tất cả các kết quả huấn luyện vào ./runs trên máy host của bạn.

Chạy các ứng dụng giao diện người dùng đồ họa (GUI) trong Docker Container#

Thử nghiệm cao - Người dùng tự chịu mọi rủi ro

Các hướng dẫn sau đây mang tính chất thử nghiệm. Việc chia sẻ socket X11 với Docker container tiềm ẩn các rủi ro bảo mật. Do đó, khuyến nghị chỉ nên kiểm tra giải pháp này trong môi trường được kiểm soát. Để biết thêm thông tin, hãy tham khảo các tài nguyên này về cách sử dụng xhost(1)(2).

Docker chủ yếu được sử dụng để đóng gói các ứng dụng nền và chương trình CLI, nhưng nó cũng có thể chạy các chương trình đồ họa. Trong thế giới Linux, hai máy chủ đồ họa chính xử lý hiển thị đồ họa là X11 (còn được gọi là X Window System) và Wayland. Trước khi bắt đầu, điều cần thiết là phải xác định máy chủ đồ họa nào bạn hiện đang sử dụng. Chạy lệnh này để tìm hiểu:

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

Việc thiết lập và cấu hình máy chủ hiển thị X11 hoặc Wayland nằm ngoài phạm vi của hướng dẫn này. Nếu lệnh trên không trả về gì, bạn sẽ cần bắt đầu bằng việc làm cho một trong hai máy chủ hoạt động trên hệ thống của mình trước khi tiếp tục.

Chạy Docker container với GUI#

Ví dụ
Sử dụng GPU

Nếu bạn đang sử dụng GPU, bạn có thể thêm cờ --device nvidia.com/gpu=all vào lệnh.

Nếu bạn đang sử dụng X11, bạn có thể chạy lệnh sau để cho phép Docker container truy cập vào socket 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

Lệnh này đặt biến môi trường DISPLAY thành màn hình của host, mount socket X11 và ánh xạ tệp .Xauthority vào container. Lệnh xhost +local:docker cho phép Docker container truy cập vào máy chủ X11.

Sử dụng Docker với GUI#

Bây giờ bạn có thể hiển thị các ứng dụng đồ họa bên trong Docker container của mình. Ví dụ, bạn có thể chạy lệnh CLI sau để trực quan hóa các dự đoán từ một model YOLO26:

yolo predict model=yolo26n.pt show=True
Kiểm tra

Một cách đơn giản để xác thực rằng Docker group có quyền truy cập vào X11 server là chạy một container với một chương trình GUI như xclock hoặc xeyes. Ngoài ra, bạn cũng có thể cài đặt các chương trình này trong Ultralytics Docker container để kiểm tra quyền truy cập vào X11 server của display server GNU-Linux của bạn. Nếu bạn gặp bất kỳ sự cố nào, hãy cân nhắc đặt biến môi trường -e QT_DEBUG_PLUGINS=1. Việc thiết lập biến môi trường này cho phép xuất thông tin gỡ lỗi, hỗ trợ quá trình khắc phục sự cố.

Khi hoàn tất với Docker GUI#

Thu hồi quyền truy cập

Trong cả hai trường hợp, đừng quên thu hồi quyền truy cập từ nhóm Docker khi bạn đã hoàn tất.

xhost -local:docker
Bạn muốn xem kết quả hình ảnh trực tiếp trong Terminal?

Tham khảo hướng dẫn sau về cách xem kết quả hình ảnh bằng terminal


Giờ đây bạn đã sẵn sàng sử dụng Ultralytics với Docker và tận dụng các khả năng của nó. Để tự lưu trữ ứng dụng web Ultralytics, hãy xem Hướng dẫn triển khai tại chỗ (On-Premise). Để biết các phương pháp cài đặt gói Python thay thế, hãy xem Tài liệu hướng dẫn bắt đầu nhanh Ultralytics.

Câu hỏi thường gặp#

Làm cách nào để thiết lập Ultralytics với Docker?#

Để thiết lập Ultralytics với Docker, trước tiên hãy đảm bảo rằng Docker đã được cài đặt trên hệ thống của bạn. Nếu bạn có GPU NVIDIA, hãy cài đặt NVIDIA Container Toolkit để kích hoạt hỗ trợ GPU. Sau đó, pull Docker image Ultralytics mới nhất từ Docker Hub bằng lệnh sau:

sudo docker pull ultralytics/ultralytics:latest

Để biết các bước chi tiết, hãy tham khảo Hướng dẫn nhanh Docker của chúng tôi.

Lợi ích của việc sử dụng các Docker image Ultralytics cho các dự án machine learning là gì?#

Việc sử dụng các image Docker của Ultralytics đảm bảo môi trường nhất quán trên các máy khác nhau, sao chép cùng một phần mềm và các dependency. Điều này đặc biệt hữu ích cho việc cộng tác giữa các nhóm, chạy các model trên nhiều phần cứng khác nhau và duy trì khả năng tái lập. Hãy sử dụng latest cho việc huấn luyện GPU NVIDIA thông thường hoặc chọn image phù hợp với phiên bản JetPack của bạn cho thiết bị NVIDIA Jetson. Xem bảng image hoàn chỉnh hoặc khám phá Ultralytics Docker Hub.

Làm cách nào để tôi có thể chạy Ultralytics YOLO trong một Docker container với hỗ trợ GPU?#

Trước tiên, hãy đảm bảo rằng NVIDIA Container Toolkit đã được cài đặt và cấu hình. Sau đó, sử dụng lệnh sau để chạy Ultralytics YOLO với hỗ trợ GPU:

sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest # all GPUs

Lệnh này thiết lập một Docker container với quyền truy cập GPU. Để biết thêm chi tiết, hãy xem Hướng dẫn nhanh Docker.

Làm cách nào để trực quan hóa kết quả dự đoán YOLO trong Docker container với display server?#

Để trực quan hóa các kết quả dự đoán YOLO với GUI trong Docker container, bạn cần cho phép Docker truy cập vào máy chủ hiển thị của mình. Đối với các hệ thống chạy X11, lệnh là:

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

Đối với các hệ thống chạy Wayland, hãy sử dụng:

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

Thông tin thêm có thể được tìm thấy trong phần Chạy các ứng dụng giao diện người dùng đồ họa (GUI) trong Docker Container.

Tôi có thể mount các thư mục cục bộ vào Docker container của Ultralytics không?#

Có, bạn có thể mount các thư mục cục bộ vào Docker container của Ultralytics bằng cờ -v:

sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

Thay thế /path/on/host bằng thư mục trên máy cục bộ của bạn và /path/in/container bằng đường dẫn mong muốn bên trong container. Thiết lập này cho phép bạn làm việc với các tệp cục bộ của mình bên trong container. Để biết thêm thông tin, hãy tham khảo phần Lưu ý về khả năng truy cập tệp.

Bình luận