Xuất TensorRT cho model YOLO26#
Việc triển khai các model thị giác máy tính trong môi trường hiệu năng cao có thể yêu cầu một định dạng tối đa hóa tốc độ và hiệu quả. Điều này đặc biệt đúng khi bạn triển khai model trên GPU NVIDIA.
Bằng cách sử dụng định dạng xuất TensorRT, bạn có thể tối ưu các model Ultralytics YOLO26 để suy luận nhanh chóng và hiệu quả trên phần cứng NVIDIA. Hướng dẫn này cung cấp các bước dễ thực hiện cho quá trình chuyển đổi và giúp bạn tận dụng tối đa công nghệ tiên tiến của NVIDIA trong các dự án deep learning.
TensorRT#
TensorRT, do NVIDIA phát triển, là một bộ công cụ phát triển phần mềm (SDK) tiên tiến được thiết kế cho suy luận deep learning tốc độ cao. Công cụ này phù hợp với các ứng dụng thời gian thực như phát hiện đối tượng.
Bộ công cụ này tối ưu các model deep learning cho GPU NVIDIA, giúp các tác vụ nhanh hơn và hiệu quả hơn. Các model TensorRT trải qua quá trình tối ưu TensorRT, bao gồm các kỹ thuật như hợp nhất layer, hiệu chỉnh độ chính xác (INT8 và FP16), quản lý bộ nhớ tensor động và tự động tinh chỉnh kernel. Việc chuyển đổi model deep learning sang định dạng TensorRT cho phép developer khai thác đầy đủ tiềm năng của GPU NVIDIA.
TensorRT nổi tiếng nhờ khả năng tương thích với nhiều định dạng model, bao gồm TensorFlow, PyTorch và ONNX, cung cấp cho developer một giải pháp linh hoạt để tích hợp và tối ưu model từ các framework khác nhau. Tính linh hoạt này cho phép triển khai model hiệu quả trên nhiều môi trường phần cứng và phần mềm.
TensorRT lập profile và tinh chỉnh engine trên GPU dùng để build engine. Hãy build cho kiến trúc GPU triển khai và khớp runtime TensorRT/CUDA; không coi file .engine là định dạng model có tính di động. Đối với triển khai edge, Ultralytics Platform cung cấp tám lựa chọn target Jetson, với trạng thái build và validation vật lý được ghi nhận cho từng lựa chọn; hoặc bạn có thể xuất cục bộ trên thiết bị đích.
Các tính năng chính của model TensorRT#
Model TensorRT cung cấp nhiều tính năng chính góp phần nâng cao hiệu quả và hiệu suất trong suy luận deep learning tốc độ cao:
-
Hiệu chỉnh độ chính xác: TensorRT hỗ trợ hiệu chỉnh độ chính xác, cho phép tinh chỉnh model theo các yêu cầu độ chính xác cụ thể. Tính năng này bao gồm hỗ trợ các định dạng độ chính xác thấp hơn như INT8 và FP16, có thể tiếp tục tăng tốc độ suy luận trong khi vẫn duy trì mức độ chính xác chấp nhận được.
-
Hợp nhất layer: Quy trình tối ưu TensorRT bao gồm hợp nhất layer, trong đó nhiều layer của một mạng neural được kết hợp thành một phép toán duy nhất. Điều này giảm overhead tính toán và cải thiện tốc độ suy luận bằng cách giảm thiểu truy cập bộ nhớ và phép tính.
-
Quản lý bộ nhớ tensor động: TensorRT quản lý hiệu quả việc sử dụng bộ nhớ tensor trong quá trình suy luận, giảm overhead bộ nhớ và tối ưu phân bổ bộ nhớ. Kết quả là GPU sử dụng bộ nhớ hiệu quả hơn.
-
Tự động tinh chỉnh kernel: TensorRT áp dụng tính năng tự động tinh chỉnh kernel để chọn kernel GPU được tối ưu nhất cho từng layer của model. Phương pháp thích ứng này đảm bảo model tận dụng tối đa năng lực tính toán của GPU.
Các tùy chọn triển khai trong TensorRT#
Trước khi xem code để xuất model YOLO26 sang định dạng TensorRT, hãy tìm hiểu nơi các model TensorRT thường được sử dụng.
TensorRT cung cấp một số tùy chọn triển khai, trong đó mỗi tùy chọn cân bằng khác nhau giữa mức độ dễ tích hợp, tối ưu hiệu suất và tính linh hoạt:
- Triển khai trong TensorFlow: Phương pháp này tích hợp TensorRT vào TensorFlow, cho phép model đã tối ưu chạy trong môi trường TensorFlow quen thuộc. Phương pháp này hữu ích cho các model kết hợp layer được hỗ trợ và không được hỗ trợ, vì TF-TRT có thể xử lý chúng hiệu quả.
-
Standalone TensorRT Runtime API: Cung cấp khả năng kiểm soát chi tiết, lý tưởng cho các ứng dụng yêu cầu hiệu suất cao. Phương pháp này phức tạp hơn nhưng cho phép triển khai tùy chỉnh các operator không được hỗ trợ.
-
NVIDIA Triton Inference Server: Một tùy chọn hỗ trợ model từ nhiều framework khác nhau. Đặc biệt phù hợp cho suy luận trên cloud hoặc edge, tùy chọn này cung cấp các tính năng như thực thi model đồng thời và phân tích model.
Các Task được hỗ trợ#
Tính năng xuất TensorRT hỗ trợ cả bảy task của Ultralytics. Phân đoạn ngữ nghĩa và ước lượng độ sâu chỉ khả dụng với YOLO26, là family duy nhất cung cấp các head này.
Xuất model YOLO26 sang TensorRT#
Bạn có thể cải thiện hiệu quả thực thi và tối ưu hiệu suất bằng cách chuyển đổi model YOLO26 sang định dạng TensorRT.
Cài đặt#
Để cài đặt package bắt buộc, hãy chạy:
# Install the required package for YOLO26
pip install ultralyticsĐể xem hướng dẫn chi tiết và các best practice liên quan đến quá trình cài đặt, hãy tham khảo hướng dẫn Cài đặt YOLO26 của chúng tôi. Trong quá trình cài đặt các package cần thiết cho YOLO26, nếu gặp khó khăn, hãy tham khảo hướng dẫn Các vấn đề thường gặp để tìm giải pháp và mẹo xử lý.
Cách sử dụng#
Trước khi bắt đầu xem hướng dẫn sử dụng, hãy tham khảo danh sách các model YOLO26 do Ultralytics cung cấp. Điều này sẽ giúp bạn chọn model phù hợp nhất với yêu cầu của project.
Định dạng TensorRT hỗ trợ các mode Export, Predict và Validate. Suy luận và validation yêu cầu GPU NVIDIA. Hãy xuất model, sau đó load model đã xuất để chạy suy luận hoặc validation độ chính xác.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Đối số Export#
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'engine' | Định dạng đích của model đã export, xác định khả năng tương thích với nhiều môi trường triển khai. |
imgsz | int hoặc tuple | 640 | Kích thước ảnh mong muốn cho input của model. Có thể là một số nguyên đối với ảnh vuông hoặc một tuple (height, width) cho các kích thước cụ thể. |
quantize | int hoặc str | None | Độ chính xác lượng tử hóa: 16 (FP16) hoặc 8 (INT8/PTQ; cần hiệu chuẩn data/fraction); 32/không thiết lập là FP32. Một checkpoint được huấn luyện bằng quantize=8 luôn xuất INT8 từ các dải mà checkpoint đó mang theo, không cần hiệu chuẩn. Thay thế các cờ half/int8 đã lỗi thời. |
dynamic | bool | False | Cho phép kích thước input động, tăng tính linh hoạt khi xử lý các kích thước ảnh khác nhau. |
simplify | bool | True | Đơn giản hóa graph của model bằng onnxslim, có khả năng cải thiện hiệu năng và khả năng tương thích. |
opset | int | None | Chỉ định phiên bản opset ONNX cho graph ONNX trung gian. Nếu không thiết lập, phiên bản được hỗ trợ mới nhất sẽ được sử dụng. |
workspace | float hoặc None | None | Thiết lập kích thước workspace tối đa tính bằng GiB cho các tối ưu hóa TensorRT, cân bằng giữa mức sử dụng bộ nhớ và hiệu suất; sử dụng None để TensorRT tự động phân bổ tối đa theo giới hạn của thiết bị. |
nms | bool, tùy chọn | None | Chọn đầu ra thô (None, mặc định), NMS tích hợp (True), hoặc phần đầu không có NMS (False). |
batch | int | 1 | Chỉ định batch inference size của model export hoặc số image tối đa mà model đã export sẽ xử lý đồng thời trong mode predict. |
data | str | None | Đường dẫn tới dataset YAML, rất cần thiết cho việc lượng tử hóa; phân loại thay vào đó nhận một thư mục dataset hoặc tên dataset tích hợp sẵn. Nếu bỏ qua với quantize=8, Ultralytics sẽ chọn dataset hiệu chuẩn mặc định cho tác vụ model; một checkpoint được huấn luyện bằng quantize=8 không cần dataset nào. |
fraction | float, int hoặc list | 1.0 | Tập con hiệu chuẩn dưới dạng tỷ lệ, số lượng ảnh hoặc các tỷ lệ/số lượng [train, val, test]. Với danh sách gồm hai mục, test để trống, còn 0 sẽ bỏ qua mục này. |
device | str | None | Chỉ định thiết bị dùng để xuất: GPU (device=0), DLA cho NVIDIA Jetson (device=dla:0 hoặc device=dla:1). |
Hãy đảm bảo sử dụng GPU có hỗ trợ CUDA khi xuất sang TensorRT.
TensorRT 11.2.1 does not support JetPack, bao gồm cả Thor; hãy sử dụng runtime TensorRT 10.x được hỗ trợ bởi bản phát hành JetPack của bạn. Đối với device=dla:0 hoặc device=dla:1, NVIDIA xác định TensorRT 10.7 là bản phát hành cuối cùng có DLA support. TensorRT 11.0, 11.1 và 11.2 không hỗ trợ DLA.
Để biết thêm chi tiết về quy trình export, hãy truy cập trang tài liệu Ultralytics về export.
Xuất TensorRT với lượng tử hóa INT8#
Việc xuất các model Ultralytics YOLO bằng TensorRT với precision INT8 thực hiện lượng tử hóa sau huấn luyện (PTQ). TensorRT sử dụng quá trình hiệu chuẩn cho PTQ, đo lường sự phân phối của các activation bên trong mỗi activation tensor khi model YOLO xử lý suy luận trên dữ liệu đầu vào đại diện, và sau đó sử dụng phân phối đó để ước tính các giá trị tỷ lệ cho từng tensor. Mỗi activation tensor là ứng viên cho lượng tử hóa có một tỷ lệ liên kết được suy ra bởi một quá trình hiệu chuẩn. Một checkpoint được tinh chỉnh bằng quantize=8 thông qua quantization-aware training đã mang sẵn các dải INT8 của checkpoint đó, vì vậy quá trình xuất sử dụng các dải đó và bỏ qua hiệu chuẩn.
TensorRT 11 đã loại bỏ lượng tử hóa ngầm và interface IInt8Calibrator. Trên TensorRT 11 trở lên, Ultralytics thực hiện lượng tử hóa INT8 bằng lượng tử hóa tường minh NVIDIA ModelOpt, chèn các node Q/DQ vào graph ONNX trước khi build engine kiểu mạnh, và áp dụng FP16 bằng chuyển đổi mixed-precision ModelOpt AutoCast. Các tham số quantize=8, quantize=16 và data hoạt động theo cùng cách; ModelOpt được tự động cài đặt trong lần sử dụng đầu tiên. Trên TensorRT 7-10, calibrator legacy được mô tả bên dưới sẽ được sử dụng.
Khi xử lý các network được lượng tử hóa ngầm, TensorRT sử dụng INT8 một cách cơ hội để tối ưu thời gian thực thi layer. Nếu một layer chạy nhanh hơn ở INT8 và có scale lượng tử hóa được gán cho các input và output dữ liệu của layer đó, kernel với độ chính xác INT8 sẽ được gán cho layer; nếu không, TensorRT chọn độ chính xác FP32 hoặc FP16 cho kernel, tùy theo lựa chọn nào cho thời gian thực thi nhanh hơn đối với layer đó.
Điều cực kỳ quan trọng là phải đảm bảo sử dụng chính thiết bị sẽ dùng các weight model TensorRT khi triển khai để thực hiện xuất với độ chính xác INT8, vì kết quả calibration có thể khác nhau giữa các thiết bị.
Cấu hình xuất INT8#
Các tham số được cung cấp khi sử dụng export cho model Ultralytics YOLO sẽ ảnh hưởng rất lớn đến hiệu suất của model đã xuất. Tuy nhiên, các tham số này cũng cần được lựa chọn dựa trên tài nguyên thiết bị hiện có; các tham số mặc định nên hoạt động với hầu hết GPU rời NVIDIA Ampere (hoặc mới hơn). Thuật toán calibration được sử dụng là "MINMAX_CALIBRATION" cho các lần xuất GPU, trong khi xuất DLA trên NVIDIA Jetson sử dụng "ENTROPY_CALIBRATION_2". Bạn có thể đọc thêm chi tiết về các tùy chọn khả dụng trong TensorRT Developer Guide. Các thử nghiệm của Ultralytics cho thấy "MINMAX_CALIBRATION" là lựa chọn tốt nhất cho xuất GPU; thuật toán được tự động chọn dựa trên thiết bị xuất.
-
workspace: Kiểm soát kích thước (tính bằng GiB) của phần bộ nhớ thiết bị được phân bổ trong khi chuyển đổi weight model.-
Điều chỉnh giá trị
workspacetheo nhu cầu calibration và tài nguyên khả dụng. Mặc dùworkspacelớn hơn có thể làm tăng thời gian calibration, giá trị này cho phép TensorRT khám phá phạm vi chiến thuật tối ưu rộng hơn, có khả năng cải thiện hiệu suất và độ chính xác của model. Ngược lại,workspacenhỏ hơn có thể giảm thời gian calibration nhưng hạn chế các chiến lược tối ưu, ảnh hưởng đến chất lượng của model đã lượng tử hóa. -
Giá trị mặc định là
workspace=None, cho phép TensorRT tự động phân bổ bộ nhớ; khi cấu hình thủ công, có thể cần tăng giá trị này nếu calibration bị crash (thoát mà không cảnh báo). -
TensorRT sẽ báo cáo
UNSUPPORTED_STATEtrong quá trình xuất nếu giá trị củaworkspacelớn hơn bộ nhớ khả dụng của thiết bị; điều này có nghĩa là nên giảm giá trịworkspacehoặc đặt thànhNone. -
Nếu
workspaceđược đặt ở giá trị tối đa và calibration thất bại/bị crash, hãy cân nhắc sử dụngNoneđể tự động phân bổ hoặc giảm các giá trịimgszvàbatchnhằm giảm yêu cầu bộ nhớ. -
Hãy nhớ rằng calibration cho INT8 phụ thuộc vào từng thiết bị; việc mượn GPU "cao cấp" để calibration có thể dẫn đến hiệu suất kém khi chạy suy luận trên thiết bị khác.
-
-
batch: Kích thước batch tối đa được sử dụng cho suy luận. Trong quá trình suy luận, có thể sử dụng các batch nhỏ hơn, nhưng suy luận sẽ không chấp nhận batch lớn hơn giá trị đã chỉ định.
Việc sử dụng batch nhỏ có thể dẫn đến scaling không chính xác trong quá trình calibration INT8. Điều này là do quy trình điều chỉnh dựa trên dữ liệu mà nó quan sát được. Batch nhỏ có thể không bao quát đầy đủ phạm vi giá trị, dẫn đến vấn đề với calibration cuối cùng. Sử dụng batch size lớn hơn giúp đảm bảo kết quả calibration mang tính đại diện hơn.
Thực nghiệm từ NVIDIA dẫn đến khuyến nghị sử dụng ít nhất 500 ảnh hiệu chuẩn mang tính đại diện cho dữ liệu của model, với quá trình hiệu chuẩn lượng tử hóa INT8. Đây là một hướng dẫn chứ không phải là một yêu cầu bắt buộc, và bạn sẽ cần thử nghiệm những gì được yêu cầu để hoạt động tốt cho dataset của bạn. Vì dữ liệu hiệu chuẩn là bắt buộc đối với quá trình hiệu chuẩn INT8 bằng TensorRT, hãy đảm bảo sử dụng đối số data khi xuất một checkpoint chưa được huấn luyện bằng quantize=8 (lượng tử hóa sau huấn luyện) tại quantize=8 cho TensorRT, và sử dụng data="my_dataset.yaml", điều này sẽ sử dụng các ảnh từ validation để hiệu chuẩn. Một checkpoint được huấn luyện bằng quantize=8 sẽ bỏ qua hiệu chuẩn, vì vậy hãy bỏ qua data đối với checkpoint đó. Khi không có giá trị nào được truyền cho data với việc xuất sang TensorRT bằng lượng tử hóa INT8, mặc định sẽ sử dụng một trong các "small" example datasets based on the model task thay vì ném ra lỗi.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
quantize=8,
data="coco.yaml", # (4)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")- Xuất với các trục động;
dynamicgiữ nguyênFalsetrừ khi được thiết lập rõ ràng. Xem export arguments để biết thêm thông tin. - Thiết lập batch size tối đa là 8 cho model đã xuất và calibration INT8.
- Phân bổ 4 GiB bộ nhớ thay vì phân bổ toàn bộ thiết bị cho quy trình chuyển đổi.
- Sử dụng dataset COCO để calibration, cụ thể là các ảnh được sử dụng cho validation (tổng cộng 5.000 ảnh).
Cache calibration
TensorRT sẽ tạo một .cache calibration có thể được tái sử dụng để tăng tốc quá trình xuất các weight model sau này bằng cùng dữ liệu, nhưng điều này có thể dẫn đến calibration kém khi dữ liệu khác biệt đáng kể hoặc khi giá trị batch bị thay đổi nhiều. Trong những trường hợp này, nên đổi tên và di chuyển .cache hiện có sang thư mục khác hoặc xóa hoàn toàn.
Ưu điểm khi sử dụng YOLO với TensorRT INT8#
-
Giảm kích thước model: Lượng tử hóa từ FP32 sang INT8 có thể giảm kích thước model 4 lần (trên disk hoặc trong bộ nhớ), giúp tải xuống nhanh hơn, giảm yêu cầu lưu trữ và giảm footprint bộ nhớ khi triển khai model.
-
Tiêu thụ điện năng thấp hơn: Các phép toán độ chính xác thấp hơn cho model YOLO xuất INT8 có thể tiêu thụ ít điện năng hơn so với model FP32, đặc biệt trên các thiết bị chạy bằng pin.
-
Tốc độ suy luận được cải thiện: TensorRT tối ưu model cho phần cứng đích, có khả năng giúp tăng tốc độ suy luận trên GPU, thiết bị nhúng và accelerator.
Lưu ý về tốc độ suy luận
Một vài lần gọi suy luận đầu tiên với model được xuất sang TensorRT INT8 có thể có thời gian preprocessing, suy luận và/hoặc postprocessing lâu hơn bình thường. Điều này cũng có thể xảy ra khi thay đổi imgsz trong quá trình suy luận, đặc biệt khi imgsz không giống giá trị được chỉ định khi xuất (export imgsz được đặt làm profile "optimal" của TensorRT).
Nhược điểm khi sử dụng YOLO với TensorRT INT8#
-
Suy giảm các metric đánh giá: Việc sử dụng độ chính xác thấp hơn có nghĩa là
mAP,Precision,Recallhoặc bất kỳ metric nào khác dùng để đánh giá hiệu suất model có khả năng kém hơn đôi chút. Các layer Sigmoid được giữ ở độ chính xác cao hơn để duy trì calibration score, nhưng INT8 vẫn có thể làm thay đổi các giá trị confidence; vì vậy, hãy chọn threshold vận hành từ đường cong F1 của chính model INT8. Xem phần kết quả hiệu suất để so sánh khác biệt vềmAP50vàmAP50-95khi xuất với INT8 trên một mẫu nhỏ từ nhiều thiết bị khác nhau. -
Tăng thời gian phát triển: Việc tìm các thiết lập "tối ưu" cho calibration INT8 theo dataset và thiết bị có thể đòi hỏi nhiều thời gian thử nghiệm.
-
Phụ thuộc phần cứng: Calibration và mức tăng hiệu suất có thể phụ thuộc nhiều vào phần cứng, đồng thời weight model khó chuyển đổi giữa các thiết bị hơn.
Hiệu suất xuất Ultralytics YOLO TensorRT#
NVIDIA A100#
Được kiểm thử với Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1
Xem Tài liệu Phát hiện để biết các ví dụ sử dụng những model được huấn luyện trên COCO, bao gồm 80 class được huấn luyện trước.
Thời gian suy luận hiển thị cho mean, min (nhanh nhất) và max (chậm nhất) trong mỗi bài kiểm thử, sử dụng weight pretrained yolov8n.engine
| Precision | Bài kiểm thử đánh giá | trung bình (ms) | tối thiểu | tối đa (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | kích thước (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predict | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predict | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predict | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
GPU dành cho người dùng phổ thông#
Được kiểm thử với Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6
Thời gian suy luận hiển thị cho mean, min (nhanh nhất) và max (chậm nhất) trong mỗi bài kiểm thử, sử dụng weight pretrained yolov8n.engine
| Precision | Bài kiểm thử đánh giá | trung bình (ms) | tối thiểu | tối đa (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | kích thước (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predict | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predict | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predict | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Thiết bị nhúng#
Được kiểm thử với JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1
Thời gian suy luận hiển thị cho mean, min (nhanh nhất) và max (chậm nhất) trong mỗi bài kiểm thử, sử dụng weight pretrained yolov8n.engine
| Precision | Bài kiểm thử đánh giá | trung bình (ms) | tối thiểu | tối đa (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | kích thước (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predict | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predict | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predict | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Xem hướng dẫn quickstart về NVIDIA Jetson với Ultralytics YOLO để tìm hiểu thêm về thiết lập và cấu hình.
Xem hướng dẫn quickstart về NVIDIA DGX Spark với Ultralytics YOLO để tìm hiểu thêm về thiết lập và cấu hình.
Các phương pháp đánh giá#
Mở rộng các section bên dưới để biết thông tin về cách những model này được xuất và kiểm thử.
Cấu hình export
Xem mode export để biết chi tiết về các tham số cấu hình export.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)
# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)Vòng lặp predict
Xem mode predict để biết thêm thông tin.
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # batch=8 of the same image
verbose=False,
device="cuda",
)Cấu hình validation
Xem mode val để tìm hiểu thêm về các tham số cấu hình validation.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)Triển khai các model YOLO26 TensorRT đã export#
Sau khi export thành công các model Ultralytics YOLO26 sang định dạng TensorRT, giờ đây bạn đã sẵn sàng triển khai chúng. Để xem hướng dẫn chuyên sâu về cách triển khai các model TensorRT trong nhiều môi trường khác nhau, hãy tham khảo các tài nguyên sau:
-
Triển khai Ultralytics với Triton Server: Hướng dẫn của chúng tôi về cách sử dụng Triton Inference Server của NVIDIA (trước đây là TensorRT Inference Server), được thiết kế riêng để sử dụng với các model Ultralytics YOLO.
-
Triển khai mạng neural sâu với NVIDIA TensorRT: Bài viết này giải thích cách sử dụng NVIDIA TensorRT để triển khai hiệu quả các mạng neural sâu trên những nền tảng triển khai dựa trên GPU.
-
AI đầu cuối cho PC dựa trên NVIDIA: Triển khai NVIDIA TensorRT: Bài blog này giải thích cách sử dụng NVIDIA TensorRT để tối ưu hóa và triển khai các model AI trên PC dựa trên NVIDIA.
-
Kho lưu trữ GitHub cho NVIDIA TensorRT: Đây là kho lưu trữ GitHub chính thống chứa mã nguồn và tài liệu cho NVIDIA TensorRT.
Tóm tắt#
Trong hướng dẫn này, chúng tôi tập trung vào việc chuyển đổi các model Ultralytics YOLO26 sang định dạng model TensorRT của NVIDIA. Bước chuyển đổi này rất quan trọng để cải thiện hiệu suất và tốc độ của các model YOLO26, giúp chúng hoạt động hiệu quả hơn và phù hợp với nhiều môi trường triển khai khác nhau.
Để biết thêm thông tin về chi tiết sử dụng, hãy tham khảo tài liệu chính thức của TensorRT.
Nếu bạn muốn tìm hiểu về các tích hợp Ultralytics YOLO26 bổ sung, trang hướng dẫn tích hợp của chúng tôi cung cấp nhiều tài nguyên và thông tin chuyên sâu hữu ích.
FAQ#
Để chuyển đổi các model Ultralytics YOLO26 sang định dạng TensorRT nhằm tối ưu hóa suy luận trên GPU NVIDIA, hãy thực hiện các bước sau:
-
Cài đặt package bắt buộc:
pip install ultralytics -
Export model YOLO26 của bạn:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine") # creates 'yolo26n.engine' # Run inference model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Để biết thêm chi tiết, hãy truy cập hướng dẫn cài đặt YOLO26 và tài liệu export.
-
Sử dụng TensorRT để tối ưu hóa các model YOLO26 mang lại một số lợi ích:
- Tốc độ suy luận nhanh hơn: TensorRT tối ưu hóa các layer của model và sử dụng hiệu chuẩn precision (INT8 và FP16) để tăng tốc suy luận mà không làm giảm đáng kể độ chính xác.
- Hiệu quả bộ nhớ: TensorRT quản lý bộ nhớ tensor một cách động, giảm overhead và cải thiện khả năng sử dụng bộ nhớ GPU.
- Hợp nhất layer: Kết hợp nhiều layer thành các operation đơn, giúp giảm độ phức tạp tính toán.
- Tự động tinh chỉnh kernel: Tự động lựa chọn các kernel GPU đã được tối ưu hóa cho từng layer của model, đảm bảo hiệu năng tối đa.
Để tìm hiểu thêm, hãy tham khảo tài liệu TensorRT chính thức của NVIDIA và tổng quan chuyên sâu về TensorRT của chúng tôi.
Có, bạn có thể xuất các model YOLO26 bằng TensorRT với lượng tử hóa INT8. Quá trình này liên quan đến lượng tử hóa sau huấn luyện (PTQ) và hiệu chuẩn, trừ khi checkpoint được huấn luyện bằng
quantize=8(quantization-aware training), trong trường hợp đó các dải mà checkpoint mang theo sẽ được xuất mà không cần hiệu chuẩn:-
Export với INT8:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml") -
Chạy suy luận:
from ultralytics import YOLO model = YOLO("yolo26n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
Để biết thêm chi tiết, hãy tham khảo phần export TensorRT với lượng tử hóa INT8.
-
Có thể triển khai các model YOLO26 TensorRT trên NVIDIA Triton Inference Server bằng các tài nguyên sau:
- Triển khai Ultralytics YOLO26 với Triton Server: Hướng dẫn từng bước về cách thiết lập và sử dụng Triton Inference Server.
- Triển khai mạng neural sâu với NVIDIA TensorRT: Hướng dẫn của NVIDIA về triển khai các model deep learning với TensorRT, cùng các tùy chọn và cấu hình triển khai chi tiết.
Các hướng dẫn này sẽ giúp bạn tích hợp hiệu quả các model YOLO26 trong nhiều môi trường triển khai khác nhau.
Mức cải thiện hiệu năng với TensorRT có thể khác nhau tùy theo phần cứng được sử dụng. Dưới đây là một số benchmark điển hình:
-
NVIDIA A100:
- FP32 Suy luận: ~0.52 ms / ảnh
- FP16 Suy luận: ~0.34 ms / ảnh
- INT8 Suy luận: ~0.28 ms / ảnh
- mAP giảm nhẹ với precision INT8, nhưng tốc độ được cải thiện đáng kể.
-
GPU dành cho người dùng phổ thông (ví dụ: RTX 3080):
- FP32 Suy luận: ~1.06 ms / ảnh
- FP16 Suy luận: ~0.62 ms / ảnh
- INT8 Suy luận: ~0.52 ms / ảnh
Bạn có thể tìm thấy benchmark hiệu năng chi tiết cho các cấu hình phần cứng khác nhau trong phần hiệu năng.
Để có thông tin chuyên sâu hơn về hiệu năng TensorRT, hãy tham khảo tài liệu Ultralytics và các báo cáo phân tích hiệu năng của chúng tôi.
-