Meet YOLO26: next-gen vision AI.

Link to this sectionTối ưu hóa suy luận OpenVINO cho YOLO#

OpenVINO Ecosystem

Link to this sectionGiới thiệu#

Khi triển khai các model học sâu, đặ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 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 bộ công cụ OpenVINO của Intel để tối ưu hóa suy luận, tập trung vào độ trễ (latency) và thông lượng (throughput). Cho dù bạn đang làm việc trên các ứng dụng dành cho người tiêu dùng hay 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ẽ đảm bảo model của bạn chạy hiệu quả trên nhiều thiết bị khác nhau.

Link to this sectionTố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.

Link to this sectionCá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.
  • Gợi ý hiệu suất OpenVINO: Sử dụng ov::LATENCY của OpenVINO cho thuộc tính ov::performance_mode trong quá trình biên dịch model giúp đơn giản hóa việc tinh chỉnh hiệu suất, cung cấp một phương pháp linh hoạt cho mọi thiết bị và sẵn sàng cho tương lai.

Link to this sectionQuả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.
  • Ánh xạ model (Model Mapping) so với Đọc: Để 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 tháo rời hoặc ổ đĩa mạng, hãy cân nhắc sử dụng ov::enable_mmap(false) để quay 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.

Link to this sectionTối ưu hóa cho thông lượng#

Tối ưu hóa thông lượng là rất quan trọng cho các kịch bản phục vụ nhiều yêu cầu suy luận đồng thời, tối đa hóa tận dụng tài nguyên mà không làm giảm đáng kể hiệu suất của từng yêu cầu riêng lẻ.

Link to this sectionCác phương pháp tối ưu hóa thông lượng:#

  1. 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)
  2. 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.

Link to this sectionThiế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ị.

Link to this sectionThự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.

Link to this sectionHiệu suất đạt được trong thực tế#

Việc 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 tiến hiệu suất đáng kể. Như đã được chứng minh trong các benchmarks, người dùng có thể trải nghiệm tốc độ suy luận nhanh gấp 3 lần trên CPU Intel, với khả năng tăng tốc thậm chí còn lớn hơn trên toàn bộ dải phần cứng Intel bao gồm GPU tích hợp, GPU chuyên dụng và VPU.

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 liên tục vượt trội hơn so với các phiên bản PyTorch tương đương về thời gian suy luận trên mỗi ảnh, mà không làm giảm độ chính xác.

Link to this sectionTriển khai thực tế#

Để xuất và tối ưu hóa model Ultralytics YOLO của bạn 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 precision

Sau 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)

Link to this sectionKế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 bản cập nhật mới nhất, hãy tham khảo tài liệu OpenVINOkho lưu trữ Ultralytics YOLO. Các tài nguyên này cung cấp hướng dẫn chuyên sâu, bài hướng dẫn và hỗ trợ cộng đồng để giúp bạn khai thác tối đa các model học sâu của mình.


Đảm bảo model của bạn đạt được hiệu suất tối ưu không chỉ là tinh chỉnh các cấu hình; đó là việc hiểu 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 phản hồi thời gian thực hay tối đa hóa thông lượng 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ẽ để các nhà phát triển triển khai các giải pháp AI hiệu suất cao.

Link to this sectionCâu hỏi thường gặp#

Link to this sectionLàm cách nào để tôi tối ưu hóa các model Ultralytics YOLO cho độ trễ thấp bằng OpenVINO?#

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:

  1. 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ễ.
  2. 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.
  3. Gợi ý hiệu suất OpenVINO: Sử dụng ov::LATENCY của OpenVINO trong quá trình biên dịch model để 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ề 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.

Link to this sectionTại sao tôi nên sử dụng OpenVINO để tối ưu hóa thông lượng Ultralytics YOLO?#

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 trong phần Tối ưu hóa thông lượng của hướng dẫn chi tiết của chúng tôi.

Link to this sectionCách thực hành tốt nhất để giảm độ trễ suy luận lần đầu trong OpenVINO là gì?#

Để giảm độ trễ suy luận lần đầu, hãy cân nhắc các cách thực hành sau:

  1. Bộ nhớ đệm model: Sử dụng bộ nhớ đệm model để giảm thời gian tải và biên dịch.
  2. Ánh xạ model so với Đọc: 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 model nằm trên ổ đĩa tháo rời hoặc ổ đĩa mạng.
  3. 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ễ suy luận lần đầu, hãy tham khảo phần Quản lý độ trễ suy luận lần đầu.

Link to this sectionLàm cách nào để tôi cân bằng giữa việc tối ưu hóa độ trễ và thông lượng với Ultralytics YOLO và OpenVINO?#

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 gợi ý hiệu suất OpenVINO thích hợp dựa trên các yêu cầu cụ thể của bạn.

Link to this sectionTôi có thể sử dụng các model Ultralytics YOLO với các framework AI khác ngoài OpenVINO không?#

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:

Khám phá thêm các tích hợp trên trang Tích hợp Ultralytics.

Bình luận