Xuất TensorRT cho các Model YOLO26#
Việc triển khai các model computer vision trong các môi trường hiệu năng cao có thể đòi hỏi 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 của mình trên GPU NVIDIA.
Bằng cách sử dụng định dạng xuất TensorRT, bạn có thể tối ưu hóa các model Ultralytics YOLO26 của mình để thực thi suy luận nhanh chóng và hiệu quả trên phần cứng NVIDIA. Hướng dẫn này sẽ cung cấp cho bạn 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 của mình.
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. Nó rất phù hợp cho các ứng dụng thời gian thực như object detection.
Bộ công cụ này tối ưu hóa các model deep learning cho GPU NVIDIA và mang lại các thao tác nhanh hơn và hiệu quả hơn. Các model TensorRT trải qua quá trình tối ưu hóa TensorRT, bao gồm các kỹ thuật như hợp nhất lớp (layer fusion), hiệu chuẩn độ chính xác (INT8 và FP16), quản lý bộ nhớ tensor động và tự động điều chỉnh kernel. Việc chuyển đổi các model deep learning sang định dạng TensorRT cho phép các nhà phát triển khai thác hoàn toàn tiềm năng của GPU NVIDIA.
TensorRT nổi tiếng với khả năng tương thích với nhiều định dạng model khác nhau, bao gồm TensorFlow, PyTorch và ONNX, mang đến cho nhà phát triển một giải pháp linh hoạt để tích hợp và tối ưu hóa model từ các framework khác nhau. Tính linh hoạt này cho phép model deployment hiệu quả trên nhiều môi trường phần cứng và phần mềm khác nhau.
TensorRT cấu hình và tinh chỉnh một engine trên GPU xây dựng của nó. Hãy xây dựng cho kiến trúc GPU triển khai và khớp với runtime TensorRT/CUDA; không coi tệp .engine là định dạng model di động. Đối với việc triển khai biên, Ultralytics Platform cung cấp tám lựa chọn mục tiêu Jetson, với trạng thái xây dựng vật lý và xác thực được tài liệu hóa 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#
Các model TensorRT cung cấp một loạt các tính năng chính góp phần vào hiệu quả và sự hiệu quả của chúng trong suy luận deep learning tốc độ cao:
-
Hiệu chuẩn độ chính xác (Precision Calibration): TensorRT hỗ trợ hiệu chuẩn độ chính xác, cho phép các model được tinh chỉnh theo các yêu cầu độ chính xác cụ thể. Điều này bao gồm hỗ trợ các định dạng độ chính xác giảm như INT8 và FP16, có thể tăng tốc độ suy luận hơn nữa trong khi vẫn duy trì các mức độ chính xác chấp nhận được.
-
Layer Fusion: Quá trình tối ưu hóa TensorRT bao gồm hợp nhất lớp, trong đó nhiều lớp của một neural network được kết hợp thành một thao tác duy nhất. Điều này làm giảm chi phí tính toán và cải thiện tốc độ suy luận bằng cách giảm thiểu việc truy cập bộ nhớ và tính toán.
-
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 chi phí bộ nhớ và tối ưu hóa việc phân bổ bộ nhớ. Điều này dẫn đến việc sử dụng bộ nhớ GPU hiệu quả hơn.
-
Tự động điều chỉnh Kernel: TensorRT áp dụng tính năng tự động điều chỉnh kernel để chọn kernel GPU tối ưu nhất cho từng lớp của model. Phương pháp thích ứng này đảm bảo rằng model tận dụng tối đa sức mạnh tính toán của GPU.
Các tùy chọn triển khai trong TensorRT#
Trước khi xem mã nguồn để xuất các model YOLO26 sang định dạng TensorRT, hãy 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, và mỗi tùy chọn cân bằng sự dễ dàng tích hợp, tối ưu hóa hiệu suất và tính linh hoạt theo các cách khác nhau:
- Deploying within TensorFlow: Phương pháp này tích hợp TensorRT vào TensorFlow, cho phép các model được tối ưu hóa chạy trong một môi trường TensorFlow quen thuộc. Nó hữu ích cho các model có sự kết hợp giữa các lớp được hỗ trợ và không được hỗ trợ, vì TF-TRT có thể xử lý các lớp này một cách hiệu quả.
-
Standalone TensorRT Runtime API: Cung cấp quyền kiểm soát chi tiết, lý tưởng cho các ứng dụng ưu tiên hiệu suất. Nó phức tạp hơn nhưng cho phép triển khai tùy chỉnh các toán tử không được hỗ trợ.
-
NVIDIA Triton Inference Server: Một tùy chọn hỗ trợ các model từ nhiều framework khác nhau. Đặc biệt phù hợp cho suy luận trên đám mây hoặc ở biên, nó 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 tác vụ được hỗ trợ#
Xuất TensorRT hỗ trợ tất cả bảy tác vụ của Ultralytics. Phân đoạn ngữ nghĩa và ước lượng chiều sâu chỉ khả dụng với YOLO26, dòng duy nhất tích hợp các đầu ra đó.
Xuất các Model YOLO26 sang TensorRT#
Bạn có thể cải thiện hiệu quả thực thi và tối ưu hóa hiệu suất bằng cách chuyển đổi các model YOLO26 sang định dạng TensorRT.
Cài đặt#
Để cài đặt gói cần thiết, hãy chạy:
# Install the required package for YOLO26
pip install ultralyticsĐể có hướng dẫn chi tiết và các best practice liên quan đến quá trình cài đặt, hãy xem YOLO26 Installation guide của chúng tôi. Trong quá trình cài đặt các gói cần thiết cho YOLO26, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo Common Issues guide của chúng tôi để tìm giải pháp và mẹo.
Cách sử dụng#
Trước khi đi sâu vào hướng dẫn sử dụng, hãy nhớ khám phá các YOLO26 models offered by Ultralytics. Điều này sẽ giúp bạn chọn được model phù hợp nhất cho các yêu cầu dự án của mình.
Định dạng TensorRT hỗ trợ các chế độ Export, Predict và Validate. Quá trình suy luận và xác thực yêu cầu GPU NVIDIA. Hãy xuất model của bạn, sau đó tải model đã xuất để chạy suy luận hoặc xác thực độ chính xác của nó.
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ố xuất#
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'engine' | Định dạng đích cho model được xuất, xác định khả năng tương thích với các môi trường triển khai khác nhau. |
imgsz | int hoặc tuple | 640 | Kích thước ảnh mong muốn cho đầu vào của mô hình. Có thể là một số nguyên cho ả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/chưa đặt là FP32. Thay thế các cờ half/int8 đã lỗi thời. |
dynamic | bool | False | Cho phép kích thước đầu vào động, tăng tính linh hoạt trong việc xử lý các kích thước hình ảnh khác nhau. |
simplify | bool | True | Đơn giản hóa đồ thị model với onnxslim, có khả năng cải thiện hiệu suất và tính tương thích. |
opset | int | None | Chỉ định phiên bản ONNX opset cho đồ thị ONNX trung gian. Nếu không được thiết lập, hệ thống sẽ sử dụng phiên bản được hỗ trợ mới nhất. |
workspace | float hoặc None | None | Đặt kích thước vùng làm việc tối đa tính bằng GiB cho các tối ưu hóa TensorRT, cân bằng giữa việc sử dụng bộ nhớ và hiệu năng; sử dụng None để cấp phát tự động bởi TensorRT lên đến mức tối đa của thiết bị. |
nms | bool | False | Thêm Non-Maximum Suppression (NMS), rất cần thiết cho việc xử lý hậu kỳ phát hiện chính xác và hiệu quả. |
batch | int | 1 | Chỉ định kích thước suy luận hàng loạt của mô hình xuất hoặc số lượng ảnh tối đa mà mô hình xuất sẽ xử lý đồng thời ở chế độ predict. |
data | str | None | Đường dẫn đến file YAML của dataset, rất cần thiết cho việc lượng tử hóa; tác vụ phân loại thay vào đó sẽ 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ụ của model. |
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 tỷ lệ/số lượng [train, val, test]. Danh sách hai phần tử để test đầy đủ, trong khi 0 bỏ qua phần đó. |
device | str | None | Chỉ định thiết bị để xuất: GPU (device=0), DLA cho NVIDIA Jetson (device=dla:0 hoặc device=dla:1). |
Vui lòng đảm bảo sử dụng GPU có hỗ trợ CUDA khi xuất sang TensorRT.
TensorRT 11.0 không hỗ trợ DLA; hãy sử dụng TensorRT 10.x cho device=dla:0 hoặc device=dla:1, hoặc xuất engine GPU TensorRT 11.0.
Để biết thêm chi tiết về quá trình xuất, hãy truy cập trang tài liệu của Ultralytics về việc xuất model.
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 sẽ thực hiện lượng tử hóa hậu huấn luyện (PTQ). TensorRT sử dụng quá trình hiệu chuẩn cho PTQ, đo lường phân phối các giá trị kích hoạt trong mỗi tensor kích hoạt 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 mỗi tensor. Mỗi tensor kích hoạt là ứng cử viên cho việc lượng tử hóa đều có một tỷ lệ liên kết được suy ra bởi quá trình hiệu chuẩn.
TensorRT 11 đã loại bỏ lượng tử hóa ẩn và giao diện 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 rõ ràng NVIDIA ModelOpt, chèn các node Q/DQ vào đồ thị ONNX trước khi xây dựng engine định kiểu mạnh, và FP16 được áp dụng với chuyển đổi hỗn hợp độ chính xác AutoCast của ModelOpt. Các tham số quantize=8, quantize=16 và data hoạt động theo cùng một cách; ModelOpt được cài đặt tự động trong lần sử dụng đầu tiên. Trên TensorRT 7-10, bộ hiệu chuẩn cũ được mô tả bên dưới được sử dụng thay thế.
Khi xử lý các mạng được lượng tử hóa ngầm định, TensorRT sử dụng INT8 một cách cơ hội để tối ưu hóa thời gian thực thi lớp. Nếu một lớp chạy nhanh hơn trong INT8 và đã gán các quy mô lượng tử hóa trên đầu vào và đầu ra dữ liệu của nó, thì một kernel với độ chính xác INT8 được gán cho lớp đó, nếu không thì TensorRT chọn độ chính xác là FP32 hoặc FP16 cho kernel dựa trên kết quả mang lại thời gian thực thi nhanh hơn cho lớp đó.
Việc đảm bảo cùng một thiết bị sẽ sử dụng trọng số model TensorRT để triển khai được sử dụng để xuất với độ chính xác INT8 là rất quan trọng, vì các kết quả hiệu chuẩn 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 một model Ultralytics YOLO sẽ ảnh hưởng lớn đến hiệu năng của model được xuất. Chúng cũng cần được lựa chọn dựa trên tài nguyên thiết bị có sẵn, tuy nhiên các tham số mặc định nên hoạt động đối với hầu hết các Ampere (hoặc mới hơn) GPU rời NVIDIA. Thuật toán hiệu chuẩn được sử dụng là "MINMAX_CALIBRATION" cho việc xuất GPU, trong khi việc 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 có sẵn trong Hướng dẫn dành cho nhà phát triển TensorRT. Các thử nghiệm của Ultralytics thấy rằng "MINMAX_CALIBRATION" là lựa chọn tốt nhất cho việc xuất GPU và thuật toán được chọn tự động 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 việc cấp phát bộ nhớ thiết bị trong khi chuyển đổi trọng số model.-
Điều chỉnh giá trị
workspacetheo nhu cầu hiệu chuẩn và tài nguyên sẵn có của bạn. Mặc dùworkspacelớn hơn có thể làm tăng thời gian hiệu chuẩn, nó cho phép TensorRT khám phá phạm vi chiến lược tối ưu hóa rộng hơn, có khả năng nâng cao hiệu năng và accuracy của model. Ngược lại,workspacenhỏ hơn có thể giảm thời gian hiệu chuẩn nhưng có thể hạn chế các chiến lược tối ưu hóa, ảnh hưởng đến chất lượng của model được lượng tử hóa. -
Mặc định là
workspace=None, điều này sẽ cho phép TensorRT tự động cấp phát bộ nhớ, khi cấu hình thủ công, giá trị này có thể cần phải tăng lên nếu hiệu chuẩn gặp sự cố (thoát mà không có cảnh báo). -
TensorRT sẽ báo cáo
UNSUPPORTED_STATEtrong quá trình xuất nếu giá trị choworkspacelớn hơn bộ nhớ khả dụng cho thiết bị, điều này có nghĩa là giá trị choworkspacenên được hạ xuống hoặc đặt thànhNone. -
Nếu
workspaceđược đặt thành giá trị tối đa và quá trình hiệu chuẩn thất bại/gặp sự cố, hãy cân nhắc sử dụngNoneđể cấp phát tự động hoặc bằng cách giảm các giá trị choimgszvàbatchđể giảm yêu cầu về bộ nhớ. -
Hãy nhớ rằng hiệu chuẩn cho INT8 là đặc thù cho từng thiết bị, việc mượn một GPU "cao cấp" để hiệu chuẩn có thể dẫn đến hiệu suất kém khi suy luận được chạy trên một thiết bị khác.
-
-
batch: Kích thước batch tối đa sẽ được sử dụng cho suy luận. Trong quá trình suy luận, các batch nhỏ hơn có thể được sử dụng, nhưng suy luận sẽ không chấp nhận các batch lớn hơn những gì đã được chỉ định.
Sử dụng các batch nhỏ có thể dẫn đến việc điều chỉnh tỷ lệ không chính xác trong quá trình hiệu chuẩn INT8. Điều này là do quá trình điều chỉnh dựa trên dữ liệu mà nó nhìn thấy. Các batch nhỏ có thể không nắm bắt được toàn bộ dải giá trị, dẫn đến các vấn đề với quá trình hiệu chuẩn cuối cùng. Sử dụng một batch size lớn hơn giúp đảm bảo kết quả hiệu chuẩn mang tính đại diện hơn.
Thực nghiệm của NVIDIA đã dẫn họ đến khuyến nghị sử dụng ít nhất 500 ảnh hiệu chuẩn đại diện cho dữ liệu cho model của bạn, với 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 khắt khe, và bạn sẽ cần thử nghiệm những gì cần thiết để hoạt động tốt cho tập dữ liệu của mình. Vì dữ liệu hiệu chuẩn là bắt buộc đối với hiệu chuẩn INT8 với TensorRT, hãy chắc chắn sử dụng tham số data khi quantize=8 cho TensorRT và sử dụng data="my_dataset.yaml", sẽ sử dụng các ảnh từ validation để hiệu chuẩn. Khi không có giá trị nào được truyền cho data khi xuất sang TensorRT với lượng tử hóa INT8, mặc định sẽ là sử dụng một trong các tập dữ liệu ví dụ "nhỏ" dựa trên tác vụ của model 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, điều này sẽ được bật mặc định khi xuất với
quantize=8ngay cả khi không được thiết lập rõ ràng. Xem export arguments để biết thêm thông tin. - Đặt kích thước batch tối đa là 8 cho model được xuất và hiệu chuẩn INT8.
- Phân bổ 4 GiB bộ nhớ thay vì phân bổ toàn bộ thiết bị cho quá trình chuyển đổi.
- Sử dụng COCO dataset để hiệu chuẩn, cụ thể là các ảnh được sử dụng cho validation (tổng cộng 5.000 ảnh).
Bộ nhớ đệm hiệu chuẩn (Calibration Cache)
TensorRT sẽ tạo ra một .cache hiệu chuẩn có thể được tái sử dụng để tăng tốc độ xuất các trọng số model trong tương lai sử dụng cùng một dữ liệu, nhưng điều này có thể dẫn đến hiệu chuẩn kém khi dữ liệu khác biệt lớn hoặc nếu giá trị batch bị thay đổi đáng kể. Trong những trường hợp này, .cache hiện có nên được đổi tên và chuyển sang thư mục khác hoặc xóa hoàn toàn.
Ưu điểm của việc 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 4x (trên đĩa hoặc trong bộ nhớ), dẫn đến thời gian tải xuống nhanh hơn, yêu cầu lưu trữ thấp hơn và giảm dấu chân bộ nhớ khi triển khai model.
-
Tiêu thụ điện năng thấp hơn: Các thao tác độ chính xác giảm cho các model YOLO được xuất INT8 có thể tiêu thụ ít năng lượng hơn so với các model FP32, đặc biệt đối với các thiết bị chạy bằng pin.
-
Cải thiện tốc độ suy luận: TensorRT tối ưu hóa model cho phần cứng mục tiêu, có khả năng dẫn đến tốc độ suy luận nhanh hơn trên GPU, thiết bị nhúng và bộ tăng tốc.
Lưu ý về tốc độ suy luận
Các lệnh gọi suy luận đầu tiên với một model được xuất sang TensorRT INT8 có thể có thời gian tiền xử lý, suy luận và/hoặc hậu xử lý 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 là khi imgsz không giống với những gì đã được chỉ định trong quá trình xuất (export imgsz được đặt làm cấu hình "tối ưu" của TensorRT).
Hạn chế của việc sử dụng YOLO với TensorRT INT8#
-
Sự sụt giảm các chỉ số đánh giá: 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 được sử dụng để đánh giá hiệu năng của model có khả năng kém hơn một chút. Các lớp Sigmoid được giữ ở độ chính xác cao hơn để bảo toàn việc hiệu chuẩn điểm số, nhưng INT8 vẫn có thể dịch chuyển các giá trị độ tin cậy, vì vậy hãy chọn ngưỡng hoạt động từ đường cong F1 của chính model INT8. Xem phần Kết quả hiệu năng để so sánh sự khác biệt trongmAP50vàmAP50-95khi xuất với INT8 trên một mẫu nhỏ của các thiết bị khác nhau. -
Tăng thời gian phát triển: Việc tìm kiếm các cài đặt "tối ưu" cho hiệu chuẩn INT8 cho tập dữ liệu và thiết bị có thể tốn một lượng thử nghiệm đáng kể.
-
Sự phụ thuộc vào phần cứng: Hiệu chuẩn và đạt được hiệu suất có thể phụ thuộc rất nhiều vào phần cứng và trọng số model ít có khả năng chuyển đổi hơn.
Hiệu suất xuất Ultralytics YOLO TensorRT#
NVIDIA A100#
Đã kiểm tra 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 với các mô hình này được huấn luyện trên COCO, bao gồm 80 lớp đượ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) cho mỗi thử nghiệm sử dụng trọng số được huấn luyện sẵn yolov8n.engine
| Precision | Kiểm tra Eval | mean (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | kích thước (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Dự đoán (Predict) | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Dự đoán (Predict) | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Dự đoán (Predict) | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
GPU cho người tiêu dùng#
Đã kiểm tra 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) cho mỗi thử nghiệm sử dụng trọng số được huấn luyện sẵn yolov8n.engine
| Precision | Kiểm tra Eval | mean (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | kích thước (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Dự đoán (Predict) | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Dự đoán (Predict) | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Dự đoán (Predict) | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Thiết bị nhúng#
Đã kiểm tra 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) cho mỗi thử nghiệm sử dụng trọng số được huấn luyện sẵn yolov8n.engine
| Precision | Kiểm tra Eval | mean (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | kích thước (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Dự đoán (Predict) | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Dự đoán (Predict) | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Dự đoán (Predict) | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Xem hướng dẫn bắt đầu nhanh của chúng tôi trên 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 bắt đầu nhanh của chúng tôi trên NVIDIA DGX Spark với Ultralytics YOLO để tìm hiểu thêm về thiết lập và cấu hình.
Phương pháp đánh giá#
Mở rộng các phần bên dưới để biết thông tin về cách các model này được xuất và kiểm tra.
Cấu hình xuất
Xem export mode để biết chi tiết liên quan đến các tham số cấu hình xuất.
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 dự đoán (Predict loop)
Xem predict mode để 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 xác thực (Validation configuration)
Xem chế độ val để tìm hiểu thêm về các tham số cấu hình xác thực.
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 đã xuất#
Sau khi xuất thành công các model Ultralytics YOLO26 của bạn sang định dạng TensorRT, bây giờ bạn đã sẵn sàng để triển khai chúng. Để có hướng dẫn chuyên sâu về việc triển khai các model TensorRT của bạn trong nhiều môi trường khác nhau, hãy xem các tài nguyên sau:
-
Deploy Ultralytics with a Triton Server: Hướng dẫn của chúng tôi về cách sử dụng NVIDIA Triton Inference (trước đây là TensorRT Inference) Server dành riêng cho việc sử dụng với các model Ultralytics YOLO.
-
Deploying Deep Neural Networks with NVIDIA TensorRT: Bài viết này giải thích cách sử dụng NVIDIA TensorRT để triển khai các mạng neural sâu trên các nền tảng triển khai dựa trên GPU một cách hiệu quả.
-
End-to-End AI for NVIDIA-Based PCs: NVIDIA TensorRT Deployment: Bài viết blog này giải thích việc sử dụng NVIDIA TensorRT để tối ưu hóa và triển khai các AI model trên các PC chạy bằng NVIDIA.
-
GitHub Repository for NVIDIA TensorRT:: Đây là kho lưu trữ GitHub chính thức 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 trở nên hiệu quả và phù hợp hơn cho 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 xem tài liệu chính thức của TensorRT.
Nếu bạn tò mò 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 một lựa chọn phong phú các tài nguyên và thông tin chi tiết hữu ích.
Câu hỏi thường gặp#
Để chuyển đổi các model Ultralytics YOLO26 của bạn sang định dạng TensorRT nhằm mục đích suy luận trên GPU NVIDIA đã được tối ưu hóa, hãy làm theo các bước sau:
-
Cài đặt gói cần thiết:
pip install ultralytics -
Xuất mô hình 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 YOLO26 Installation guide và export documentation.
-
Việc sử dụng TensorRT để tối ưu hóa các mô hình 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 lớp của mô hình và sử dụng hiệu chỉnh độ chính xác (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 linh hoạt, giảm chi phí vận hành và cải thiện việc sử dụng bộ nhớ GPU.
- Hợp nhất lớp (Layer Fusion): Kết hợp nhiều lớp thành các hoạt động đơn lẻ, giảm độ phức tạp tính toán.
- Tự động tinh chỉnh nhân (Kernel Auto-Tuning): Tự động chọn các nhân GPU được tối ưu hóa cho từng lớp mô hình, đảm bảo hiệu suất tối đa.
Để tìm hiểu thêm, hãy khám phá tài liệu chính thức về TensorRT từ 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 mô hình YOLO26 bằng TensorRT với lượng tử hóa INT8. Quá trình này bao gồm lượng tử hóa sau đào tạo (PTQ) và hiệu chuẩn:
-
Xuất 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 xuất TensorRT với lượng tử hóa INT8.
-
Việc triển khai các mô hình YOLO26 TensorRT trên NVIDIA Triton Inference Server có thể được thực hiện bằng cách sử dụng các tài nguyên sau:
- Deploy Ultralytics YOLO26 with Triton Server: Hướng dẫn từng bước về thiết lập và sử dụng Triton Inference Server.
- Deploying Deep Neural Networks with NVIDIA TensorRT: Hướng dẫn của NVIDIA về cách triển khai các model deep learning với TensorRT cho các tùy chọn và cấu hình triển khai chi tiết.
Những hướng dẫn này sẽ giúp bạn tích hợp các mô hình YOLO26 một cách hiệu quả trong nhiều môi trường triển khai khác nhau.
Những cải thiện về hiệu suất với TensorRT có thể khác nhau tùy thuộc vào phần cứng được sử dụng. Dưới đây là một số điểm chuẩn điển hình:
-
NVIDIA A100:
- Suy luận FP32: ~0.52 ms / ảnh
- Suy luận FP16: ~0.34 ms / ảnh
- Suy luận INT8: ~0.28 ms / ảnh
- Giảm nhẹ mAP với độ chính xác INT8, nhưng cải thiện đáng kể về tốc độ.
-
GPU phổ thông (ví dụ: RTX 3080):
- Suy luận FP32: ~1.06 ms / ảnh
- Suy luận FP16: ~0.62 ms / ảnh
- Suy luận INT8: ~0.52 ms / ảnh
Các tiêu chuẩn hiệu năng chi tiết cho các cấu hình phần cứng khác nhau có thể được tìm thấy trong performance section.
Để có thêm thông tin chi tiết toàn diện về hiệu năng TensorRT, hãy tham khảo tài liệu của Ultralytics và các báo cáo phân tích hiệu năng của chúng tôi.
-