Tối ưu hóa suy luận OpenVINO cho YOLO#
Giới thiệu#
Khi triển khai các model deep learning, đặc biệt là các model phát hiện đối tượng như các model Ultralytics YOLO, việc đạt được hiệu năng tối ưu là rất quan trọng. Hướng dẫn này trình bày cách tận dụng bộ công cụ OpenVINO của Intel để tối ưu hóa suy luận, tập trung vào độ trễ và throughput. Dù bạn đang phát triển ứng dụng cho thiết bị phổ thông hay triển khai trên 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ẽ đảm bảo model của bạn chạy hiệu quả trên nhiều loại thiết bị.
Tối ưu hóa độ trễ#
Tối ưu hóa độ trễ 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 duy nhất, điển hình là các kịch bản dành cho người dùng phổ thông. Mục tiêu là giảm thiểu khoảng thời gian từ khi nhận đầu vào đến khi có kết quả suy luận. Tuy nhiên, để đạt độ trễ thấp cần cân nhắc cẩn thận, đặc biệt khi chạy 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ễ#
- Một lần suy luận trên mỗi thiết bị: Cách đơn giản nhất để đạt độ trễ thấp là giới hạn mỗi thiết bị chỉ thực hiện một lần suy luận tại một thời điểm. Việc tăng mức độ đồng thời thường dẫn đến độ trễ cao hơn.
- Tận dụng các thiết bị con: Các thiết bị như CPU đa socket hoặc GPU đa tile có thể thực thi nhiều request với mức tăng độ trễ tối thiểu bằng cách tận dụng các thiết bị con bên trong.
- Gợi ý hiệu năng OpenVINO: Việc sử dụng
ov::LATENCYcủa OpenVINO cho thuộc tínhov::performance_modetrong quá trình biên dịch model giúp đơn giản hóa việc tinh chỉnh hiệu năng, đồng thời cung cấp phương pháp không phụ thuộc thiết bị và có khả năng thích ứng trong tương lai.
Quản lý độ trễ suy luận lần đầu#
- Bộ nhớ đệm model: Để giảm tác động của thời gian tải và biên dịch model đến độ trễ, hãy sử dụng bộ nhớ đệm model khi có thể. Trong các trường hợp không thể sử dụng bộ nhớ đệm, CPU thường cung cấp thời gian tải model nhanh nhất.
- Ánh xạ model so với đọc model: Để giảm thời gian tải, OpenVINO đã thay thế việc đọc model bằng ánh xạ. Tuy nhiên, nếu model 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 lại sang chế độ đọc. - Lựa chọn thiết bị AUTO: Chế độ này bắt đầu suy luận trên CPU rồi chuyển sang bộ tăng tốc khi bộ tăng tốc sẵn sàng, giúp giảm liền mạch độ trễ của lần suy luận đầu tiên.
Tối ưu hóa throughput#
Tối ưu hóa throughput rất quan trọng trong các kịch bản xử lý đồng thời nhiều request suy luận, nhằm tối đa hóa mức sử dụng tài nguyên mà không làm suy giảm đáng kể hiệu năng của từng request.
Các phương pháp tiếp cận để tối ưu hóa thông lượng#
-
Gợi ý hiệu năng OpenVINO: Phương pháp cấp cao, có khả năng thích ứng trong tương lai để cải thiện throughput trên nhiều thiết bị bằng cách sử dụng các gợi ý hiệu năng.
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Batching và stream tường minh: Phương pháp chi tiết hơn, bao gồm batching tường minh và sử dụng stream để tinh chỉnh hiệu năng nâng cao.
Thiết kế các ứng dụng hướng đến thông lượng#
Để tối đa hóa throughput, ứng dụng nên:
- Xử lý các đầu vào song song, tận dụng tối đa khả năng của thiết bị.
- Phân rã luồng dữ liệu thành các request suy luận đồng thời, được lập lịch để thực thi song song.
- Sử dụng Async API cùng callback để duy trì hiệu quả và tránh tình trạng thiết bị không được cung cấp đủ công việc.
Thực thi đa thiết bị#
Chế độ đa thiết bị của OpenVINO đơn giản hóa việc mở rộng throughput bằng cách tự động cân bằng các request suy luận giữa các thiết bị mà không yêu cầu ứng dụng phải quản lý thiết bị ở cấp ứng dụng.
Mức cải thiện hiệu năng trong thực tế#
Triển khai các tối ưu hóa OpenVINO với các model Ultralytics YOLO có thể mang lại những cải thiện hiệu suất đáng kể. Như đã chứng minh trong benchmarks, người dùng có thể trải nghiệm tốc độ suy luận 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ộ phổ phần cứng của Intel bao gồm GPU tích hợp, GPU chuyên dụng và NPU.
Ví dụ, khi chạy các model 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 so với các phiên bản tương ứng trong PyTorch về thời gian suy luận trên mỗi ảnh mà không ảnh hưởng đến độ chính xác.
Triển khai thực tế#
Để export và tối ưu model Ultralytics YOLO cho OpenVINO, bạn có thể sử dụng chức 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 export, 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 các model Ultralytics YOLO cho độ trễ và throughput bằng OpenVINO có thể cải thiện đáng kể hiệu năng của ứng dụng. Bằng cách áp dụng cẩn thận các chiến lược được nêu trong hướng dẫn này, developer có thể đảm bảo model của mình chạy hiệu quả và đáp ứng yêu cầu của nhiều kịch bản triển khai khác nhau. Hãy nhớ rằng việc lựa chọn tối ưu hóa cho độ trễ hay throughput phụ thuộc vào nhu cầu cụ thể của ứng dụng và đặ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 tài liệu OpenVINO và repository Ultralytics YOLO. Các tài nguyên này cung cấp hướng dẫn chuyên sâu, tutorial và hỗ trợ từ cộng đồng để giúp bạn khai thác tối đa các model deep learning của mình.
Đảm bảo model đạt hiệu năng tối ưu không chỉ là việc tinh chỉnh cấu hình; đó còn là việc hiểu nhu cầu của ứng dụng và đưa ra quyết định dựa trên thông tin đầy đủ. Dù bạn đang tối ưu cho phản hồi theo thời gian thực hay tối đa hóa throughput cho quá trình xử lý quy mô lớn, sự kết hợp giữa các model Ultralytics YOLO và OpenVINO cung cấp một bộ công cụ mạnh mẽ để developer triển khai các giải pháp AI hiệu năng cao.
FAQ#
Tối ưu các model Ultralytics YOLO cho độ trễ thấp bao gồm một số chiến lược chính:
- Một lần suy luận trên mỗi thiết bị: Giới hạn mỗi thiết bị chỉ thực hiện một lần suy luận tại một thời điểm để giảm thiểu độ trễ.
- Tận dụng các thiết bị con: 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 request với mức tăng độ trễ tối thiểu.
- Gợi ý hiệu năng OpenVINO: Sử dụng
ov::LATENCYcủa OpenVINO trong quá trình biên dịch model để đơn giản hóa việc tinh chỉnh không phụ thuộc thiết bị.
Để biết thêm các mẹo thực tế về tối ưu hóa độ trễ, hãy xem phần Tối ưu hóa độ trễ trong hướng dẫn của chúng tôi.
OpenVINO cải thiện throughput của model Ultralytics YOLO bằng cách tối đa hóa mức sử dụng tài nguyên thiết bị mà không làm giảm hiệu năng. Các lợi ích chính bao gồm:
- Gợi ý hiệu năng: Tinh chỉnh hiệu năng cấp cao, đơn giản trên nhiều thiết bị.
- Batching và stream tường minh: Tinh chỉnh chi tiết cho hiệu năng nâng cao.
- Thực thi trên nhiều thiết bị: Tự động cân bằng tải suy luận, giúp đơn giản hóa việc quản lý ở cấp ứng dụng.
Cấu hình mẫu:
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") 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 throughput trong phần Tối ưu hóa throughput của hướng dẫn chi tiết.
Để giảm độ trễ của lần suy luận đầu tiên, hãy cân nhắc các phương pháp sau:
- Bộ nhớ đệm model: Sử dụng bộ nhớ đệm model để giảm thời gian tải và biên dịch.
- Ánh xạ model so với đọc model: Mặc định sử dụng ánh xạ (
ov::enable_mmap(true)), nhưng chuyển sang chế độ đọc (ov::enable_mmap(false)) nếu model nằm trên ổ đĩa di động hoặc ổ đĩa mạng. - Lựa chọn thiết bị AUTO: Sử dụng chế độ AUTO để bắt đầu suy luận trên CPU và chuyển liền mạch sang bộ tăng tốc.
Để biết các chiến lược chi tiết về quản lý độ trễ của lần suy luận đầu tiên, hãy tham khảo phần Quản lý độ trễ của lần suy luận đầu tiên.
Việc cân bằng tối ưu hóa độ trễ và throughput đòi hỏi phải hiểu nhu cầu của ứng dụng:
- Tối ưu hóa độ trễ: Phù hợp 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 dành cho người dùng phổ thông).
- Tối ưu hóa throughput: Phù hợp nhất cho các kịch bản có nhiều suy luận đồng thời, nhằm tối đa hóa mức sử dụng tài nguyên (ví dụ: triển khai quy mô lớn).
Việc sử dụng các gợi ý hiệu năng 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 gợi ý hiệu năng OpenVINO thích 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ể tích hợp với nhiều framework AI khác nhau. Các lựa chọn bao gồm:
- TensorRT: Để tối ưu cho GPU NVIDIA, hãy làm theo hướng dẫn tích hợp TensorRT.
- CoreML: Đối với các thiết bị Apple, hãy tham khảo hướng dẫn export CoreML của chúng tôi.
- LiteRT.js: Đối với ứng dụng web và Node.js, hãy xem hướng dẫn tích hợp LiteRT và runtime web LiteRT.js.
Khám phá thêm các tích hợp trên trang Tích hợp của Ultralytics.