Hướng dẫn nhanh về Docker cho Ultralytics
Hướng dẫn này cung cấp một 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 có lợi để đảm bảo rằng phần mềm sẽ luôn chạy giống nhau, 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ữ Ultralytics Docker trên Docker Hub.
Bạn Sẽ Học Được Gì
- Thiết lập Docker với hỗ trợ NVIDIA
- Cài đặt Ultralytics Docker images
- 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 Ultralytics
- Mount các thư mục cục bộ vào container
Xem: Cách Bắt đầu với Docker | Sử dụng Gói Ultralytics Python bên trong Docker demo trực tiếp 🎉
Đ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ó GPU NVIDIA và trình điều khiển NVIDIA đã được cài đặt.
Thiết Lập Docker với Hỗ Trợ NVIDIA
Đầu tiên, xác minh rằng trình điều khiển NVIDIA đã được cài đặt đúng cách bằng cách chạy:
nvidia-smi
Cài Đặt NVIDIA Docker Runtime
Bây giờ, hãy cài đặt NVIDIA Docker runtime để bật hỗ trợ GPU trong Docker container:
# 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
Xá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 runtimes:
docker info | grep -i runtime
Cài Đặt Ultralytics Docker Image
Ultralytics cung cấp một số Docker image được tối ưu hóa cho các nền tảng và trường hợp sử dụng khác nhau:
- Dockerfile: GPU image, lý tưởng cho việc huấn luyện.
- Dockerfile-arm64: Dành 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ỉ dành cho CPU để suy luận và môi trường không có GPU.
- Dockerfile-jetson-jetpack4: Được tối ưu hóa cho các thiết bị NVIDIA Jetson chạy NVIDIA JetPack 4.
- Dockerfile-jetson-jetpack5: Được tối ưu hóa cho các thiết bị NVIDIA Jetson chạy NVIDIA JetPack 5.
- Dockerfile-jetson-jetpack6: Được 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 bằng JupyterLab trên trình duyệt.
- Dockerfile-python: Môi trường Python tối thiểu cho các ứng dụng nhẹ.
- Dockerfile-conda: Bao gồm Miniconda3 và gói Ultralytics được cài đặt thông qua Conda.
Để 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 $t
Chạy Ultralytics trong Docker Container
Đây là cách thực thi Ultralytics Docker container:
Chỉ Sử Dụng CPU
# Run without GPU
sudo docker run -it --ipc=host $t
Sử Dụng GPU
# 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
Hàm -it
cờ chỉ định 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 máy chủ, điều này rất cần thiết để chia sẻ bộ nhớ giữa các tiến trình. Cờ --gpus
cho phép container truy cập vào các GPU của máy chủ.
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 volumes:
# Mount a local directory into the container
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t
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.
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 Chấp nhận Mọi Rủi ro
Các hướng dẫn sau đây mang tính thử nghiệm. Việc chia sẻ một X11 socket với một Docker container tiềm ẩn các rủi ro bảo mật. Do đó, bạn nên kiểm tra giải pháp này chỉ trong một 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 để chứa các ứng dụng nền và các 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: X11 (còn được gọi là X Window System) và Wayland. Trước khi bắt đầu, điều quan trọng là phải xác định máy chủ đồ họa 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'
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ì, thì bạn cần bắt đầu bằng cách làm cho một trong hai hoạt động cho hệ thống của bạn trước khi tiếp tục.
Chạy Docker Container với GUI
Ví dụ
Sử dụng GPU
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.
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 X11 socket:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host $t
Lệnh này đặt DISPLAY
biến môi trường thành màn hình của máy chủ, gắn X11 socket và ánh xạ .Xauthority
tệp vào container. Lệnh xhost +local:docker
cho phép Docker container truy cập vào máy chủ X11.
Đối với Wayland, hãy sử dụng lệnh sau:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t
Lệnh này đặt DISPLAY
biến môi trường thành màn hình của máy chủ, gắn Wayland socket và cho phép Docker container truy cập vào máy chủ Wayland.
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 mô hình YOLO11:
yolo predict model=yolo11n.pt show=True
Kiểm tra
Một cách đơn giản để xác thực 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 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 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ỳ 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ề xem kết quả hình ảnh bằng terminal
Chúc mừng bạn! Bạn đã thiết lập xong để sử dụng Ultralytics với Docker và sẵn sàng tận dụng các khả năng mạnh mẽ của nó. Để biết các phương pháp cài đặt khác, vui lòng khám phá tài liệu bắt đầu nhanh của 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ó NVIDIA GPU, hãy cài đặt NVIDIA Docker runtime để bật hỗ trợ GPU. Sau đó, hãy kéo ảnh Ultralytics Docker 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 Bắt đầu Nhanh Docker của chúng tôi.
Những lợi ích của việc sử dụng Ultralytics Docker image cho các dự án máy học là gì?
Sử dụng ảnh Docker Ultralytics đảm bảo một 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ần phụ thuộc. Điều này đặc biệt hữu ích cho cộng tác giữa các nhóm, chạy mô hình trên nhiều phần cứng khác nhau và duy trì khả năng tái tạo. Để huấn luyện dựa trên GPU, Ultralytics cung cấp các ảnh Docker được tối ưu hóa như Dockerfile
cho việc sử dụng GPU nói 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 để chạy Ultralytics YOLO trong Docker container có hỗ trợ GPU?
Đầu tiên, hãy đảm bảo rằng NVIDIA Docker runtime đã được cài đặt và định 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 --gpus all ultralytics/ultralytics:latest
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 Bắt đầu Nhanh về Docker.
Làm thế nào để trực quan hóa kết quả dự đoán YOLO trong Docker container với một máy chủ hiển thị?
Để trực quan hóa kết quả dự đoán YOLO bằng GUI trong vùng chứa Docker, bạn cần cho phép Docker truy cập vào máy chủ hiển thị của bạn. Đố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 chi tiết hơn 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 Vùng chứa 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ể gắn các thư mục cục bộ vào vùng chứa Ultralytics Docker bằng cờ -v
:
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest
Thay thế /path/on/host
với thư mục trên máy cục bộ của bạn và /path/in/container
với đườ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 Lưu Ý Về Khả Năng Truy Cập Tệp ở phần này.