Ultralytics YOLO27:
Get Started

Hướng dẫn bắt đầu nhanh với Docker cho Ultralytics#

Ultralytics Docker Package Visual

Hướng dẫn này giới thiệu toàn diện cách thiết lập môi trường Docker cho các dự án Ultralytics của bạn. Docker là nền tảng để phát triển, phân phối và chạy ứng dụng trong các container. Docker đặc biệt hữu ích trong việc đảm bảo phần mềm luôn chạy giống nhau, 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.

Phiên bản Docker Image Lượt tải Docker

Bạn sẽ tìm hiểu#

  • Thiết lập Docker với hỗ trợ NVIDIA
  • Cài đặt Docker image 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 thư mục cục bộ vào container


Xem: Cách bắt đầu với Docker | Demo trực tiếp về cách sử dụng package Python của Ultralytics bên trong Docker 🎉

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

  • Đảm bảo 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 Docker từ trang web Docker.
  • Để tăng tốc GPU, hãy đảm bảo hệ thống có GPU NVIDIA và đã cài đặt driver NVIDIA. Image CPU không yêu cầu phần cứng NVIDIA.
  • Nếu bạn sử dụng thiết bị NVIDIA Jetson, hãy đảm bảo đã 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, xác minh 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 để bật hỗ trợ GPU trong 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 package 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 bằng 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 toolkit tự động tạo và duy trì spec trên toolkit >= 1.18):

nvidia-ctk cdi list

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

Cài đặt Docker image Ultralytics#

Ultralytics phát hành các image sau lên Docker Hub. Mỗi image được build từ Dockerfile được liên kết bằng quy trình phát hành Docker.

TagNền tảng và mục đíchNguồn
latestLinux AMD64 với CUDA để huấn luyện và suy luận GPUDockerfile
latest-exportLinux AMD64 với CUDA và dependency xuất model để chuyển đổi và benchmarkDockerfile-export
latest-amdLinux AMD64 với ROCm và MIGraphX để huấn luyện và suy luận trên GPU AMDDockerfile-amd
latest-pythonImage Linux AMD64 Python 3.14 gọn nhẹ cho suy luận trên CPUDockerfile-python
latest-python-exportImage Linux AMD64 Python 3.13 cho CPU, kèm các dependency phục vụ exportDockerfile-python-export
latest-cpuLinux AMD64 CPU image với Bash làm lệnh mặc địnhDockerfile-cpu
latest-jupyterLinux AMD64 CPU image với JupyterLab và notebook hướng dẫn UltralyticsDockerfile-jupyter
latest-arm64Image Linux ARM64 Python 3.13 cho CPU, dành cho Apple silicon, Raspberry Pi và các hệ thống ARM64 khácDockerfile-arm64
latest-nvidia-arm64Linux ARM64 dành cho DGX Spark (DGX OS) và PyTorch trên Thor (JetPack 7.1); TensorRT đi kèm không hỗ trợ JetPackDockerfile-nvidia-arm64
latest-jetson-jetpack6Linux ARM64 dành cho thiết bị NVIDIA Jetson chạy JetPack 6Dockerfile-jetson-jetpack6
latest-jetson-jetpack5Linux ARM64 dành cho thiết bị NVIDIA Jetson chạy JetPack 5Dockerfile-jetson-jetpack5
latest-jetson-jetpack4Linux ARM64 dành cho thiết bị NVIDIA Jetson chạy JetPack 4Dockerfile-jetson-jetpack4
latest-runnerLinux AMD64 CUDA image dành cho GPU runner GitHub Actions tự hostDockerfile-runner
latest-runner-cpuLinux AMD64 image dành cho CPU runner GitHub Actions tự hostDockerfile-runner-cpu

Các GPU image AMD64 (latest, latest-export và latest-runner) sử dụng PyTorch 2.14 và CUDA 13.2. Trước khi khởi chạy, hãy kiểm tra khả năng hỗ trợ CUDA của driver máy chủ bằng nvidia-smi; cài đặt container mới hơn không nâng cấp driver máy chủ. CUDA 13 ngừng hỗ trợ GPU Maxwell, Pascal và Volta, bao gồm Tesla P100 và V100. Xem ghi chú phát hành CUDA của NVIDIA và yêu cầu tương thích driver.

Image NVIDIA ARM64 sử dụng NVIDIA PyTorch 26.08 với CUDA 13.4 và TensorRT 11.2. Khả năng hỗ trợ Thor của PyTorch không áp dụng cho TensorRT: NVIDIA không hỗ trợ TensorRT 11.2 trên JetPack. Để xuất TensorRT cho Jetson, hãy sử dụng runtime TensorRT 10.x được hỗ trợ cho bản JetPack của bạn. Làm theo yêu cầu nền tảng trong hướng dẫn Jetson hoặc hướng dẫn DGX Spark. Các image JetPack 4, 5 và 6 vẫn giữ nguyên các stack riêng cho từng thiết bị.

Dockerfile Conda có sẵn để build cục bộ; tính năng phát hành tự động của latest-conda đã bị tắt, vì vậy tag registry đó không chứa các bản cập nhật này.

Sử dụng latest-python-export để xuất LiteRT. GPU image latest-export vẫn dùng PyTorch 2.14 và không bao gồm LiteRT vì dependency hiện tại của LiteRT yêu cầu PyTorch thấp hơn 2.14.

Các image Python, CPU, Jupyter và CPU runner sử dụng Python 3.14. Image Python export sử dụng base latest-python-3.13, được build từ cùng Dockerfile-python với --build-arg PYTHON_VERSION=3.13, vì TensorFlow, CoreML và PaddlePaddle hiện chưa hỗ trợ Python 3.14.

Các tag bắt đầu bằng latest theo dõi bản build nhánh main được phát hành gần đây nhất. Trong tag có phiên bản, tiền tố latest được thay bằng phiên bản phát hành Ultralytics, chẳng hạn VERSION, VERSION-cpu hoặc VERSION-jetson-jetpack6. Hãy dùng tag có phiên bản để tạo môi trường có thể tái lập.

Để tải image mới nhất:

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

Nếu muốn tự build image, hãy clone repository và truyền Dockerfile tương ứng trong bảng trên, dùng thư mục gốc repository làm build context:

# Build the CPU image locally from docker/Dockerfile-cpu
sudo docker build -t ultralytics/ultralytics:latest-cpu -f docker/Dockerfile-cpu .

Chạy Ultralytics trong Docker container#

Sau đây là cách chạy Ultralytics Docker container:

Chỉ sử dụng CPU#

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

Sử dụng 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 cấp pseudo-TTY và giữ stdin luôn mở, cho phép bạn tương tác với container. Cờ --ipc=host bật chia sẻ namespace IPC của máy chủ, cần thiết để chia sẻ bộ nhớ giữa các tiến trình. Với GPU NVIDIA, cờ --device nvidia.com/gpu=... cấp quyền truy cập thông qua CDI. Với GPU AMD, các cờ --device cấp quyền truy cập vào driver kernel GPU (/dev/kfd) và các nút render của display (/dev/dri).

Dùng CDI thay cho `--gpus all`

Trên Linux, yêu cầu thiết bị CDI cần Docker >= 28.2.0 (CDI được bật theo mặc định) và nvidia-container-toolkit >= 1.18 (tự động tạo spec CDI). Hãy nâng cấp các máy chủ Linux cũ trước khi chạy GPU container. Cờ --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 các lần cập nhật package định kỳ (nvidia-container-toolkit#48). Các yêu cầu CDI --device đưa các nút thiết bị vào cấu hình container, nhờ đó những container chạy lâu như worker huấn luyện hoặc CI runner vẫn giữ được quyền truy cập GPU sau khi tải lại.

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

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

Để làm việc với file trên máy cục bộ từ 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 /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 giữ output huấn luyện#

Theo mặc định, output huấn luyện được lưu tại /ultralytics/runs/<task>/<name>/ bên trong container. Nếu không mount thư mục trên máy chủ, output sẽ bị mất khi container bị xóa.

Để lưu giữ output 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 toàn bộ output huấn luyện vào ./runs trên máy chủ của bạn.

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

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

Các hướng dẫn sau đây đang ở giai đoạn thử nghiệm. Việc chia sẻ socket X11 với container Docker tiềm ẩn rủi ro bảo mật. Vì vậy, bạn chỉ nên thử nghiệm 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 dùng để đóng gói các ứng dụng chạy nền và chương trình CLI trong container, nhưng cũng có thể chạy các chương trình đồ họa. Trong môi trường Linux, có hai máy chủ đồ họa chính xử lý việc hiển thị: X11 (còn gọi là Hệ thống Cửa sổ X) và Wayland. Trước khi bắt đầu, bạn cần xác định máy chủ đồ họa hiện đang sử dụng. Chạy lệnh sau để kiểm tra:

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ề kết quả, bạn cần bắt đầu bằng cách thiết lập một trong hai máy chủ này hoạt động trên hệ thống trước khi tiếp tục.

Chạy container Docker có giao diện đồ họa#

Ví dụ
Sử dụng GPU

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

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

Sử dụng Docker với giao diện đồ họa#

Các image Ultralytics đi kèm OpenCV headless, vì vậy trước tiên hãy cài đặt bản GUI của OpenCV cùng các thư viện hệ thống bên trong container:

apt-get update && apt-get install -y --no-install-recommends libgl1 libglib2.0-0 libsm6
pip uninstall -y opencv-python-headless && pip install opencv-python

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

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

Một cách đơn giản để xác nhận nhóm Docker có quyền truy cập máy chủ X11 là chạy container với một chương trình có giao diện đồ họa 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 container Docker của Ultralytics để kiểm tra quyền truy cập máy chủ X11 của máy chủ hiển thị GNU-Linux. Nếu gặp sự cố, hãy cân nhắc đặt biến môi trường -e QT_DEBUG_PLUGINS=1. Việc đặt biến môi trường này sẽ bật đầu ra thông tin gỡ lỗi, hỗ trợ quá trình khắc phục sự cố.

Sau khi sử dụng giao diện đồ họa Docker#

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 của nhóm Docker khi hoàn tất.

xhost -local:docker
Bạn muốn xem trực tiếp kết quả hình ảnh 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 đã thiết lập xong để sử dụng Ultralytics với Docker và sẵn sàng khai thác các khả năng của nền tảng. Để tự lưu trữ ứng dụng web Ultralytics, hãy xem hướng dẫn triển khai tại chỗ cho nền tảng. Để biết các phương thức cài đặt gói Python khác, hãy xem tài liệu bắt đầu nhanh của Ultralytics.

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

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

    sudo docker pull ultralytics/ultralytics:latest

    Để biết các bước chi tiết, hãy tham khảo Hướng dẫn bắt đầu nhanh với Docker.

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

  • Trước tiên, hãy đảm bảo 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 container Docker có quyền truy cập GPU. Để biết thêm chi tiết, hãy xem Hướng dẫn bắt đầu nhanh với Docker.

  • Để trực quan hóa kết quả dự đoán YOLO bằng giao diện đồ họa trong container Docker, bạn cần cho phép Docker truy cập máy chủ hiển thị. 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

    Với các hệ thống chạy Wayland, hãy 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

    Bên trong container, hãy cài đặt bản GUI của OpenCV trước khi sử dụng show=True, như mô tả trong phần Chạy các ứng dụng giao diện người dùng đồ họa (GUI) trong container Docker.

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

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

    Thay /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. Cấu hình này cho phép bạn làm việc với các tệp cục bộ bên trong container. Để biết thêm thông tin, hãy tham khảo mục Lưu ý về khả năng truy cập tệp.

Bình luận