Tối ưu hóa suy luận OpenVINO cho YOLO#
Giới thiệu#
Khi triển khai các mô hình deep learning, đặc biệt là các mô hình dành cho object detection như các mô hình Ultralytics YOLO, việc đạt được hiệu suất tối ưu là rất quan trọng. Hướng dẫn này đi sâu vào việc tận dụng Intel's OpenVINO toolkit để tối ưu hóa inference, tập trung vào độ trễ (latency) và thông lượng (throughput). Dù bạn đang làm việc trên các ứng dụng cấp độ người dùng phổ thông hay các hệ thống triển khai quy mô lớn, việc hiểu và áp dụng các chiến lược tối ưu hóa này sẽ giúp đảm bảo mô hình của bạn chạy hiệu quả trên nhiều thiết bị khác nhau.
Tối ưu hóa cho độ trễ#
Tối ưu hóa độ trễ là rất quan trọng đối với các ứng dụng yêu cầu phản hồi tức thì từ một model duy nhất cho một đầu vào đơn lẻ, thường thấy trong các kịch bản người tiêu dùng. Mục tiêu là giảm thiểu độ trễ giữa đầu vào và kết quả suy luận. Tuy nhiên, việc đạt được độ trễ thấp đòi hỏi phải cân nhắc kỹ lưỡng, đặc biệt là khi thực hiện các suy luận đồng thời hoặc quản lý nhiều model.
Các chiến lược chính để tối ưu hóa độ trễ:#
- Suy luận đơn lẻ trên mỗi thiết bị: Cách đơn giản nhất để đạt được độ trễ thấp là giới hạn ở một suy luận tại một thời điểm trên mỗi thiết bị. Việc tăng tính đồng thời thường dẫn đến tăng độ trễ.
- Tận dụng các thiết bị phụ (Sub-Devices): Các thiết bị như CPU đa socket hoặc GPU đa tile có thể thực hiện nhiều yêu cầu với độ trễ tăng tối thiểu bằng cách sử dụng các thiết bị phụ nội bộ của chúng.
- OpenVINO Performance Hints: Sử dụng
ov::LATENCYcủa OpenVINO cho thuộc tínhov::performance_modetrong quá trình biên dịch mô hình giúp đơn giản hóa việc tinh chỉnh hiệu suất, mang lại cách tiếp cận không phụ thuộc thiết bị (device-agnostic) và hướng tới tương lai.
Quản lý độ trễ suy luận lần đầu:#
- Bộ nhớ đệm model (Model Caching): Để giảm thiểu thời gian tải và biên dịch model ảnh hưởng đến độ trễ, hãy sử dụng bộ nhớ đệm model ở những nơi có thể. Đối với các kịch bản mà bộ nhớ đệm không khả thi, CPU thường cung cấp thời gian tải model nhanh nhất.
- Model Mapping vs. Reading: Để giảm thời gian tải, OpenVINO đã thay thế việc đọc mô hình (reading) bằng việc ánh xạ (mapping). Tuy nhiên, nếu mô hình nằm trên ổ đĩa di động hoặc ổ đĩa mạng, hãy cân nhắc sử dụng
ov::enable_mmap(false)để chuyển đổi trở lại chế độ đọc. - Chọn thiết bị AUTO: Chế độ này bắt đầu suy luận trên CPU, sau đó chuyển sang bộ tăng tốc khi sẵn sàng, giúp giảm độ trễ suy luận lần đầu một cách liền mạch.
Tối ưu hóa cho thông lượng#
Tối ưu hóa thông lượng là rất quan trọng đối với các kịch bản phục vụ nhiều yêu cầu inference đồng thời, giúp tối đa hóa resource utilization mà không làm giảm đáng kể hiệu năng của từng yêu cầu riêng lẻ.
Các phương pháp tối ưu hóa thông lượng:#
-
Gợi ý hiệu suất OpenVINO: Một phương pháp cấp cao, sẵn sàng cho tương lai để tăng cường thông lượng trên các thiết bị sử dụng gợi ý hiệu suất.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Batching rõ ràng và luồng (Streams): Một phương pháp chi tiết hơn liên quan đến việc batching rõ ràng và sử dụng luồng để tinh chỉnh hiệu suất nâng cao.
Thiết kế các ứng dụng hướng tới thông lượng:#
Để tối đa hóa thông lượng, các ứng dụng nên:
- Xử lý đầu vào song song, tận dụng tối đa khả năng của thiết bị.
- Phân tách luồng dữ liệu thành các yêu cầu suy luận đồng thời, được lên lịch để thực thi song song.
- Sử dụng Async API với các callback để duy trì hiệu quả và tránh tình trạng thiếu tài nguyên thiết bị.
Thực thi đa thiết bị:#
Chế độ đa thiết bị của OpenVINO giúp đơn giản hóa việc mở rộng thông lượng bằng cách tự động cân bằng các yêu cầu suy luận trên các thiết bị mà không cần quản lý thiết bị ở cấp độ ứng dụng.
Hiệu suất đạt được trong thực tế#
Việc áp dụng các tối ưu hóa OpenVINO với các mô hình Ultralytics YOLO có thể mang lại những cải thiện hiệu suất đáng kể. Như đã minh họa trong các benchmarks, người dùng có thể trải nghiệm tốc độ inference nhanh hơn tới 3 lần trên CPU Intel, với mức tăng tốc thậm chí còn lớn hơn trên toàn bộ dải phần cứng của Intel bao gồm GPU tích hợp, GPU rời và VPU.
Ví dụ, khi chạy các mô hình YOLO26 trên CPU Intel Xeon, các phiên bản được tối ưu hóa bằng OpenVINO luôn vượt trội hơn các phiên bản PyTorch tương đương về thời gian inference trên mỗi hình ảnh mà không làm giảm accuracy.
Triển khai thực tế#
Để xuất và tối ưu hóa mô hình Ultralytics YOLO cho OpenVINO, bạn có thể sử dụng tính năng export:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", quantize=16) # Export with FP16 precisionSau khi xuất, bạn có thể chạy suy luận với model đã được tối ưu hóa:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)Kết luận#
Tối ưu hóa các model Ultralytics YOLO cho độ trễ và thông lượng với OpenVINO có thể nâng cao đáng kể hiệu suất ứng dụng của bạn. Bằng cách cẩn thận áp dụng các chiến lược được nêu trong hướng dẫn này, các nhà phát triển có thể đảm bảo model của họ chạy hiệu quả, đáp ứng nhu cầu của các kịch bản triển khai khác nhau. Hãy nhớ rằng, việc lựa chọn giữa tối ưu hóa độ trễ hay thông lượng phụ thuộc vào nhu cầu ứng dụng cụ thể của bạn và các đặc điểm của môi trường triển khai.
Để biết thêm thông tin kỹ thuật chi tiết và các cập nhật mới nhất, hãy tham khảo OpenVINO documentation và Ultralytics YOLO repository. Các tài nguyên này cung cấp các hướng dẫn chi tiết, tài liệu hướng dẫn và hỗ trợ từ cộng đồng để giúp bạn tận dụng tối đa các mô hình deep learning của mình.
Đảm bảo các mô hình đạt được hiệu suất tối ưu không chỉ là việc tinh chỉnh cấu hình; mà là hiểu rõ nhu cầu của ứng dụng và đưa ra các quyết định sáng suốt. Cho dù bạn đang tối ưu hóa cho real-time responses hay tối đa hóa thông lượng cho xử lý quy mô lớn, sự kết hợp giữa các mô hình Ultralytics YOLO và OpenVINO cung cấp một bộ công cụ mạnh mẽ cho các nhà phát triển để triển khai các giải pháp AI hiệu suất cao.
Câu hỏi thường gặp#
Tối ưu hóa các model Ultralytics YOLO cho độ trễ thấp bao gồm một số chiến lược chính:
- Suy luận đơn lẻ trên mỗi thiết bị: Giới hạn suy luận ở một lần tại một thời điểm trên mỗi thiết bị để giảm thiểu độ trễ.
- Tận dụng các thiết bị phụ: Sử dụng các thiết bị như CPU đa socket hoặc GPU đa tile có khả năng xử lý nhiều yêu cầu với độ trễ tăng tối thiểu.
- OpenVINO Performance Hints: Sử dụng
ov::LATENCYcủa OpenVINO trong quá trình biên dịch mô hình để tinh chỉnh đơn giản, không phụ thuộc vào thiết bị.
Để có thêm các mẹo thực tế về việc tối ưu hóa độ trễ, hãy xem Latency Optimization section trong hướng dẫn của chúng tôi.
OpenVINO tăng cường thông lượng model Ultralytics YOLO bằng cách tối đa hóa việc sử dụng tài nguyên thiết bị mà không làm ảnh hưởng đến hiệu suất. Các lợi ích chính bao gồm:
- Gợi ý hiệu suất: Tinh chỉnh hiệu suất đơn giản, cấp cao trên các thiết bị.
- Batching rõ ràng và luồng: Tinh chỉnh để đạt hiệu suất nâng cao.
- Thực thi đa thiết bị: Tự động cân bằng tải suy luận, giảm bớt quản lý ở cấp độ ứng dụng.
Ví dụ về cấu hình:
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)Tìm hiểu thêm về tối ưu hóa thông lượng tại Throughput Optimization section trong hướng dẫn chi tiết của chúng tôi.
Để giảm độ trễ suy luận lần đầu, hãy cân nhắc các cách thực hành sau:
- Bộ nhớ đệm model: Sử dụng bộ nhớ đệm model để giảm thời gian tải và biên dịch.
- Model Mapping vs. Reading: Sử dụng ánh xạ (
ov::enable_mmap(true)) theo mặc định nhưng chuyển sang đọc (ov::enable_mmap(false)) nếu mô hình nằm trên ổ đĩa di động hoặc ổ đĩa mạng. - Chọn thiết bị AUTO: Sử dụng chế độ AUTO để bắt đầu với suy luận CPU và chuyển sang bộ tăng tốc một cách liền mạch.
Để biết các chiến lược chi tiết về quản lý độ trễ inference lần đầu, hãy tham khảo Managing First-Inference Latency section.
Việc cân bằng tối ưu hóa độ trễ và thông lượng đòi hỏi phải hiểu nhu cầu ứng dụng của bạn:
- Tối ưu hóa độ trễ: Lý tưởng cho các ứng dụng thời gian thực yêu cầu phản hồi tức thì (ví dụ: ứng dụng tiêu dùng).
- Tối ưu hóa thông lượng: Tốt nhất cho các kịch bản có nhiều suy luận đồng thời, tối đa hóa việc sử dụng tài nguyên (ví dụ: triển khai quy mô lớn).
Sử dụng các gợi ý hiệu suất cấp cao và chế độ đa thiết bị của OpenVINO có thể giúp đạt được sự cân bằng phù hợp. Hãy chọn OpenVINO performance hints phù hợp dựa trên các yêu cầu cụ thể của bạn.
Có, các model Ultralytics YOLO rất linh hoạt và có thể được tích hợp với nhiều framework AI khác nhau. Các tùy chọn bao gồm:
- TensorRT: Để tối ưu hóa GPU NVIDIA, hãy làm theo TensorRT integration guide.
- CoreML: Đối với các thiết bị Apple, hãy tham khảo CoreML export instructions của chúng tôi.
- LiteRT.js: Đối với các ứng dụng web và Node.js, hãy xem LiteRT integration guide và LiteRT.js web runtime.
Khám phá thêm các tích hợp trên Ultralytics Integrations page.