Hướng dẫn Docker Quickstart cho Ultralytics
Hướng dẫn này đóng vai trò là phần giới thiệu toàn diện về cách 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 ứng dụng trong các container. Nó đặc biệt hữu ích để đảm bảo rằng phần mềm sẽ luôn chạy ổn định, bất kể nó đượ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.
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 container Docker 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
- Đả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 nó từ trang web của Docker.
- Đảm bảo rằng hệ thống của bạn có NVIDIA GPU và các driver NVIDIA đã được cài đặt.
- 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
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 lệnh:
nvidia-smiCà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.listCập nhật danh sách gói và cài đặt gói nvidia-container-toolkit:
sudo apt-get updateCài đặt phiên bản mới nhất của nvidia-container-toolkit:
sudo apt-get install -y nvidia-container-toolkit \
nvidia-container-toolkit-base libnvidia-container-tools \
libnvidia-container1Tùy chọn: Cài đặt phiên bản cụ thể của nvidia-container-toolkit
Tùy chọn, bạn có thể cài đặt một phiên bản cụ thể của nvidia-container-toolkit bằng cách thiết lập biến môi trường NVIDIA_CONTAINER_TOOLKIT_VERSION:
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerXác minh NVIDIA Runtime với Docker
Chạy docker info | grep -i runtime để đảm bảo rằng nvidia xuất hiện trong danh sách các runtime:
docker info | grep -i runtimeCài đặt các Docker Image của Ultralytics
Ultralytics cung cấp một số Docker image được tối ưu hóa cho nhiều nền tảng và trường hợp sử dụng khác nhau:
- Dockerfile: Image GPU, lý tưởng cho việc huấn luyện.
- Dockerfile-arm64: Cho kiến trúc ARM64, phù hợp với các thiết bị như Raspberry Pi.
- Dockerfile-cpu: Phiên bản chỉ sử dụng CPU cho việc suy luận (inference) và các môi trường không có GPU.
- Dockerfile-jetson-jetpack4: Tối ưu hóa cho các thiết bị NVIDIA Jetson chạy NVIDIA JetPack 4.
- Dockerfile-jetson-jetpack5: Tối ưu hóa cho các thiết bị NVIDIA Jetson chạy NVIDIA JetPack 5.
- Dockerfile-jetson-jetpack6: Tối ưu hóa cho các thiết bị NVIDIA Jetson chạy NVIDIA JetPack 6.
- Dockerfile-jupyter: Dành cho phát triển tương tác sử dụng JupyterLab trong trình duyệt.
- Dockerfile-nvidia-arm64: Cho các thiết bị NVIDIA ARM64 như Jetson AGX Thor và DGX Spark, hỗ trợ JetPack 7.0 và DGX OS.
- Dockerfile-python: Môi trường Python tối giản cho các ứng dụng nhẹ.
- Dockerfile-python-export: Image Python tối giản được mở rộng với đầy đủ khả năng xuất (export) để chuyển đổi model YOLO.
- Dockerfile-conda: Bao gồm Miniconda3 và gói Ultralytics được cài đặt thông qua Conda.
- Dockerfile-export: Image GPU với tất cả các phụ thuộc định dạng xuất được cài đặt sẵn để chuyển đổi và benchmark model.
Để pull image mới nhất:
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $tChạy Ultralytics trong Container Docker
Đây là cách thực thi Docker container của Ultralytics:
Sử dụng chỉ CPU
# Run without GPU
sudo docker run -it --ipc=host $tSử dụng GPU
# Run with all GPUs
sudo docker run -it --ipc=host --runtime=nvidia --gpus all $t
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --runtime=nvidia --gpus '"device=2,3"' $tFlag -it chỉ định một pseudo-TTY và giữ cho stdin mở, cho phép bạn tương tác với container. Flag --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. Flag --gpus cho phép container truy cập vào các GPU của host.
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 các Docker volume:
# Mount a local directory into the container
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container $tThay 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ữ đầu ra quá trình huấn luyện
Đầu ra của quá trình huấn luyện được lưu vào /ultralytics/runs/<task>/<name>/ bên trong container theo mặc định. Nếu không mount thư mục host, các đầu ra này sẽ mất khi container bị xóa.
Để lưu trữ đầu ra quá trình 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Điều này lưu tất cả đầu ra 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 Container Docker
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à xác định máy chủ đồ họa nào bạ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ề kết quả gì, bạn sẽ cần bắt đầu bằng cách làm cho một trong hai loại hoạt động trên hệ thống của mình trước khi tiếp tục.
Chạy Container Docker với GUI
Sử dụng GPU
Nếu bạn đang sử dụng GPU, bạn có thể thêm flag --gpus all vào lệnh.
Flag Docker runtime
Nếu cài đặt Docker của bạn không sử dụng nvidia runtime theo mặc định, bạn có thể thêm flag --runtime=nvidia 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 $tLệ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=TrueKiểm tra
Một cách đơn giản để xác nhận rằng nhóm Docker có quyền truy cập vào máy chủ X11 là chạy một container với 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 máy chủ X11 của máy chủ hiển thị GNU-Linux của bạn. Nếu bạn gặp bất kỳ vấn đề nào, 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 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
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 đã xong.
xhost -local:dockerBạ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 đã được thiết lập để sử dụng Ultralytics với Docker và sẵn sàng tận dụng các khả năng của nó. Để biết các phương pháp cài đặt thay thế, hãy xem tài liệu quickstart của Ultralytics.
Câu hỏi thường gặp (FAQ)
Làm thế 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ó NVIDIA GPU, 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 Docker Quickstart của chúng tôi.
Những 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 Docker image 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 phụ thuộc. Đ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 model trên nhiều phần cứng khác nhau và duy trì khả năng tái lập. Đối với huấn luyện dựa trên GPU, Ultralytics cung cấp các Docker image được tối ưu hóa như Dockerfile cho sử dụng GPU chung và Dockerfile-jetson cho các thiết bị NVIDIA Jetson. Khám phá Ultralytics Docker Hub để biết thêm chi tiết.
Làm thế 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 --runtime=nvidia --gpus all ultralytics/ultralytics:latest # all GPUsLệ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 Docker Quickstart.
Làm thế nào để tôi trực quan hóa kết quả dự đoán YOLO trong Docker container với display server?
Để trực quan hóa kết quả dự đoán YOLO với GUI trong một Docker container, bạn cần cấp phép cho 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:latestThô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 Container Docker.
Tôi có thể mount các thư mục cục bộ vào Ultralytics Docker container không?
Có, bạn có thể mount các thư mục cục bộ vào Ultralytics Docker container bằng flag -v:
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestThay 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ộ 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.