YOLO11 模型的 TensorRT 导出
在高性能环境中部署计算机视觉模型可能需要一种能够最大限度地提高速度和效率的格式。当您在 NVIDIA GPU 上部署模型时,尤其如此。
通过使用 TensorRT 导出格式,您可以增强您的 Ultralytics YOLO11 模型,以便在 NVIDIA 硬件上进行快速高效的推理。本指南将为您提供易于遵循的转换过程步骤,并帮助您在 深度学习 项目中充分利用 NVIDIA 的先进技术。
TensorRT
由 NVIDIA 开发的 TensorRT 是一款专为高速深度学习推理而设计的高级软件开发工具包 (SDK)。它非常适合目标检测等实时应用。
此工具包优化了NVIDIA GPU的深度学习模型,从而实现了更快、更高效的运算。 TensorRT模型经过TensorRT优化,其中包括层融合、精度校准(INT8和FP16)、动态张量内存管理和内核自动调整等技术。 将深度学习模型转换为TensorRT格式使开发人员可以充分发挥NVIDIA GPU的潜力。
TensorRT 以其与各种模型格式的兼容性而闻名,包括 TensorFlow、PyTorch 和 ONNX,为开发者提供了一个灵活的解决方案,用于集成和优化来自不同框架的模型。这种多功能性使得跨各种硬件和软件环境的高效 模型部署 成为可能。
TensorRT 模型的主要特性
TensorRT 模型提供了一系列关键特性,这些特性有助于它们在高速深度学习推理中的效率和有效性:
-
精度校准:TensorRT 支持精度校准,允许针对特定的精度要求对模型进行微调。这包括支持降低精度的格式,如 INT8 和 FP16,这可以进一步提高推理速度,同时保持可接受的精度水平。
-
层融合:TensorRT 优化过程包括层融合,其中神经网络的多个层被组合成一个单一的操作。这通过最小化内存访问和计算来减少计算开销并提高推理速度。
-
动态 Tensor 内存管理: TensorRT 在推理期间有效地管理 tensor 内存使用,从而减少内存开销并优化内存分配。这可以更有效地利用 GPU 内存。
-
自动内核调整: TensorRT 应用自动内核调整,为模型的每一层选择最优化的 GPU 内核。这种自适应方法确保模型充分利用 GPU 的计算能力。
TensorRT 中的部署选项
在查看将 YOLO11 模型导出为 TensorRT 格式的代码之前,让我们先了解 TensorRT 模型通常在哪些场景中使用。
TensorRT 提供了多种部署选项,每个选项在易于集成、性能优化和灵活性之间实现了不同的平衡:
- 在 TensorFlow 中部署: 此方法将 TensorRT 集成到 TensorFlow 中,允许优化的模型在熟悉的 TensorFlow 环境中运行。对于混合使用支持和不支持层的模型,此方法非常有用,因为 TF-TRT 可以有效地处理这些层。
-
独立 TensorRT 运行时 API:提供精细控制,非常适合对性能要求严苛的应用程序。它更复杂,但允许自定义实现不受支持的算子。
-
NVIDIA Triton Inference Server: 一种支持来自各种框架的模型的选项。它特别适用于云或边缘推理,并提供诸如并发模型执行和模型分析之类的功能。
将 YOLO11 模型导出到 TensorRT
通过将 YOLO11 模型转换为 TensorRT 格式,您可以提高执行效率并优化性能。
安装
要安装所需的软件包,请运行:
安装
# Install the required package for YOLO11
pip install ultralytics
有关安装过程的详细说明和最佳实践,请查看我们的YOLO11安装指南。在为YOLO11安装所需软件包时,如果遇到任何困难,请查阅我们的常见问题指南,获取解决方案和技巧。
用法
在深入了解使用说明之前,请务必查看 Ultralytics 提供的 YOLO11 模型系列。这将帮助您为您的项目需求选择最合适的模型。
用法
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo11n.engine'
# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")
# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format
yolo export model=yolo11n.pt format=engine # creates 'yolo11n.engine''
# Run inference with the exported model
yolo predict model=yolo11n.engine source='https://ultralytics.com/images/bus.jpg'
导出参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
format |
str |
'engine' |
导出模型的目标格式,定义与各种部署环境的兼容性。 |
imgsz |
int 或 tuple |
640 |
模型输入的所需图像大小。 可以是正方形图像的整数或元组 (height, width) 用于指定特定维度。 |
half |
bool |
False |
启用 FP16(半精度)量化,从而减小模型大小并可能加快受支持硬件上的推理速度。 |
int8 |
bool |
False |
激活 INT8 量化,进一步压缩模型并以最小的精度损失加快推理速度,主要用于边缘设备。 |
dynamic |
bool |
False |
允许动态输入大小,从而增强了处理不同图像尺寸的灵活性。 |
simplify |
bool |
True |
使用以下方式简化模型图 onnxslim ,从而可能提高性能和兼容性。 |
workspace |
float 或 None |
None |
设置 TensorRT 优化的最大工作区大小(以 GiB 为单位),以平衡内存使用和性能;使用 None 用于 TensorRT 自动分配,最高可达设备最大值。 |
nms |
bool |
False |
添加非极大值抑制 (NMS),这对于准确高效的检测后处理至关重要。 |
batch |
int |
1 |
指定导出模型批处理推理大小或导出模型将并发处理的最大图像数量,在 predict 模式下。 |
data |
str |
'coco8.yaml' |
路径指向 数据集 配置文件(默认: coco8.yaml ),这对于量化至关重要。 |
fraction |
float |
1.0 |
指定用于 INT8 量化校准的数据集比例。允许在完整数据集的子集上进行校准,这对于实验或资源有限时非常有用。如果未在使用 INT8 启用时指定,则将使用完整数据集。 |
device |
str |
None |
指定导出设备:GPU (device=0 ),以及用于 NVIDIA Jetson 的 DLA(device=dla:0 或 device=dla:1 )。 |
提示
请确保在导出到 TensorRT 时使用支持 CUDA 的 GPU。
有关导出过程的更多详细信息,请访问Ultralytics 文档页面上的导出。
使用 INT8 量化导出 TensorRT
使用具有 INT8 精度的 TensorRT 导出 Ultralytics YOLO 模型会执行训练后量化 (PTQ)。TensorRT 将校准用于 PTQ,校准会测量每个激活 tensor 内的激活分布,因为 YOLO 模型会对有代表性的输入数据执行推理,然后使用该分布来估计每个 tensor 的比例值。每个激活 tensor 都是量化的候选对象,具有通过校准过程推导出的相关比例。
当处理隐式量化网络时,TensorRT会伺机使用INT8来优化层执行时间。如果某一层在INT8中运行速度更快,并且已在其数据输入和输出上分配了量化比例,则会将具有INT8精度的内核分配给该层,否则,TensorRT会根据哪种精度能使该层执行速度更快,选择FP32或FP16精度用于该内核。
提示
至关重要的是,要确保用于部署 TensorRT 模型权重的同一设备也用于导出 INT8 精度,因为校准结果可能因设备而异。
配置 INT8 导出
使用时提供的参数 导出 适用于 Ultralytics YOLO 模型的 极大地 会影响导出模型的性能。它们还需要根据可用的设备资源进行选择,但是默认参数 应该 适用于大多数 Ampere (或更新版本) NVIDIA 独立 GPU。所使用的校准算法是 "MINMAX_CALIBRATION"
您可以阅读更多关于可用选项的详细信息 在 TensorRT 开发者指南中。Ultralytics 测试发现 "MINMAX_CALIBRATION"
是最佳选择,并且导出已固定为使用此算法。
-
workspace
:控制转换模型权重时设备内存分配的大小(以 GiB 为单位)。-
调整
workspace
根据您的校准需求和资源可用性而定的值。虽然较大的workspace
可能会增加校准时间,但它允许 TensorRT 探索更广泛的优化策略,从而可能提高模型性能,并且 准确性。相反,较小的workspace
可以减少校准时间,但也可能限制优化策略,从而影响量化模型的质量。 -
默认为
workspace=None
,这将允许 TensorRT 自动分配内存。如果手动配置,当校准崩溃(无警告退出)时,可能需要增加此值。 -
TensorRT 将报告
UNSUPPORTED_STATE
如果在导出过程中,workspace
大于设备可用的内存,这意味着workspace
应该降低或设置为None
. -
可视化参数:
workspace
被设置为最大值且校准失败/崩溃,请考虑使用None
用于自动分配或通过减少以下的值imgsz
和batch
以减少内存需求。 -
请记住 INT8 的校准特定于每个设备,借用“高端”GPU 进行校准可能会导致在另一设备上运行推理时性能不佳。
-
-
batch
:用于推理的最大批次大小。在推理过程中可以使用较小的批次,但推理不会接受大于指定大小的批次。
注意
在校准期间,两倍的 batch
将使用提供的尺寸。使用小批量可能导致校准期间的不准确缩放。这是因为该过程会根据其看到的数据进行调整。小批量可能无法捕获值的完整范围,从而导致最终校准出现问题,因此 batch
尺寸会自动加倍。如果没有提供尺寸,则 批次大小 已指定 batch=1
,校准将在以下时间运行 batch=1 * 2
以减少校准缩放误差。
NVIDIA 的实验表明,他们建议使用至少 500 张校准图像,这些图像代表您模型的数据,并使用 INT8 量化校准。这是一个指导原则,而不是 困难 要求,并且 您需要通过实验来确定什么最适合您的数据集。 由于 TensorRT 的 INT8 校准需要校准数据,请务必使用 data
在以下情况下使用的参数 int8=True
用于 TensorRT,并使用 data="my_dataset.yaml"
,它将使用来自 验证 进行校准。当没有为 data
通过导出到 TensorRT 并进行 INT8 量化,默认将使用以下其中一种 基于模型任务的“小型”示例数据集 而不是抛出错误。
示例
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
int8=True,
data="coco.yaml", # (4)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml # creates 'yolov8n.engine''
# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
校准缓存
TensorRT 将生成一个校准 .cache
可以使用相同的数据重复使用,以加速未来模型权重的导出,但是当数据差异很大或者如果 batch
值发生了巨大变化。在这些情况下,现有的 .cache
应重命名并移动到不同的目录或完全删除。
将 YOLO 与 TensorRT INT8 结合使用的优势
-
减少模型大小: 从 FP32 到 INT8 的量化可以将模型大小减少 4 倍(在磁盘上或在内存中),从而缩短下载时间、降低存储要求并减少部署模型时的内存占用。
-
更低的功耗: 与 FP32 模型相比,用于 INT8 导出的 YOLO 模型的降精度操作可以消耗更少的功率,尤其适用于电池供电设备。
-
提高的推理速度: TensorRT 优化了目标硬件的模型,从而可能在 GPU、嵌入式设备和加速器上实现更快的推理速度。
关于推理速度的说明
使用导出到 TensorRT INT8 的模型进行的前几次推理调用,预计会比平常花费更长的预处理、推理和/或后处理时间。当更改以下内容时,也可能发生这种情况 imgsz
在推理过程中,尤其是在 imgsz
与导出期间指定的不同(导出 imgsz
被设置为 TensorRT “最佳”配置文件)。
将 YOLO 与 TensorRT INT8 结合使用的缺点
-
评估指标下降: 使用较低的精度意味着
mAP
,Precision
,Recall
或任何 用于评估模型性能的其他指标 的表现可能会稍差。请参阅 性能结果部分 为了比较两者之间的差异,mAP50
和mAP50-95
在各种设备的小样本上使用INT8导出时。 -
增加开发时间: 为数据集和设备找到 INT8 校准的“最佳”设置可能需要大量的测试。
-
硬件依赖性: 校准和性能提升可能高度依赖于硬件,并且模型权重不太容易转移。
Ultralytics YOLO TensorRT 导出性能
NVIDIA A100
性能
已在 Ubuntu 22.04.3 LTS 上测试。 python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
有关使用这些在 COCO 上训练的模型的示例,请参阅检测文档,其中包括 80 个预训练类别。
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
有关使用这些在 COCO 上训练的模型的示例,请参阅分割文档,其中包括 80 个预训练类别。
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n-seg.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(M) |
mAPval 50-95(M) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.62 | 0.61 | 0.68 | 8 | 640 | ||||
FP32 | COCOval | 0.63 | 0.52 | 0.36 | 0.49 | 0.31 | 1 | 640 | |
FP16 | 预测 | 0.40 | 0.39 | 0.44 | 8 | 640 | ||||
FP16 | COCOval | 0.43 | 0.52 | 0.36 | 0.49 | 0.30 | 1 | 640 | |
INT8 | 预测 | 0.34 | 0.33 | 0.37 | 8 | 640 | ||||
INT8 | COCOval | 0.36 | 0.46 | 0.32 | 0.43 | 0.27 | 1 | 640 |
请参阅分类文档,其中包含使用这些在ImageNet上训练的模型的使用示例,其中包括 1000 个预训练类别。
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n-cls.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
top-1 | top-5 | batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.26 | 0.25 | 0.28 | 8 | 640 | ||
FP32 | ImageNetval | 0.26 | 0.35 | 0.61 | 1 | 640 | |
FP16 | 预测 | 0.18 | 0.17 | 0.19 | 8 | 640 | ||
FP16 | ImageNetval | 0.18 | 0.35 | 0.61 | 1 | 640 | |
INT8 | 预测 | 0.16 | 0.15 | 0.57 | 8 | 640 | ||
INT8 | ImageNetval | 0.15 | 0.32 | 0.59 | 1 | 640 |
请参阅姿势估计文档,了解在 COCO 上训练的这些模型的使用示例,其中包括 1 个预训练的类别“person”。
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n-pose.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(P) |
mAPval 50-95(P) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.54 | 0.53 | 0.58 | 8 | 640 | ||||
FP32 | COCOval | 0.55 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
FP16 | 预测 | 0.37 | 0.35 | 0.41 | 8 | 640 | ||||
FP16 | COCOval | 0.36 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
INT8 | 预测 | 0.29 | 0.28 | 0.33 | 8 | 640 | ||||
INT8 | COCOval | 0.30 | 0.90 | 0.68 | 0.78 | 0.47 | 1 | 640 |
请参阅定向检测文档,其中包含使用这些在DOTAv1上训练的模型的使用示例,其中包括 15 个预训练类别。
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n-obb.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.52 | 0.51 | 0.59 | 8 | 640 | ||
FP32 | DOTAv1val | 0.76 | 0.50 | 0.36 | 1 | 640 | |
FP16 | 预测 | 0.34 | 0.33 | 0.42 | 8 | 640 | ||
FP16 | DOTAv1val | 0.59 | 0.50 | 0.36 | 1 | 640 | |
INT8 | 预测 | 0.29 | 0.28 | 0.33 | 8 | 640 | ||
INT8 | DOTAv1val | 0.32 | 0.45 | 0.32 | 1 | 640 |
消费级 GPU
检测性能 (COCO)
已在 Windows 10.0.19045 上测试。 python 3.10.9
, ultralytics==8.2.4
, tensorrt==10.0.0b6
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
已在 Windows 10.0.22631 上测试。 python 3.11.9
, ultralytics==8.2.4
, tensorrt==10.0.1
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 1.76 | 1.69 | 1.87 | 8 | 640 | ||
FP32 | COCOval | 1.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 0.86 | 0.75 | 1.00 | 8 | 640 | ||
FP16 | COCOval | 1.43 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.80 | 0.75 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 1.35 | 0.47 | 0.33 | 1 | 640 |
已使用 Pop!_OS 22.04 LTS 进行测试, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 2.84 | 2.84 | 2.85 | 8 | 640 | ||
FP32 | COCOval | 2.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 1.09 | 1.09 | 1.10 | 8 | 640 | ||
FP16 | COCOval | 1.20 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.75 | 0.74 | 0.75 | 8 | 640 | ||
INT8 | COCOval | 0.76 | 0.47 | 0.33 | 1 | 640 |
嵌入式设备
检测性能 (COCO)
已使用 JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS 进行测试, python 3.10.12
, ultralytics==8.2.16
, tensorrt==10.0.1
注意
显示的推理时间适用于 mean
, min
(最快),以及 max
(最慢),用于使用预训练权重进行的每次测试 yolov8n.engine
精确度 | 评估测试 | 平均值 (ms) |
最小值 | 最大值 (毫秒) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
信息
请参阅我们的Ultralytics YOLO NVIDIA Jetson 快速入门指南,以了解有关设置和配置的更多信息。
评估方法
展开以下部分,了解这些模型是如何导出和测试的。
导出配置
有关导出配置参数的详细信息,请参阅导出模式。
from ultralytics import YOLO
model = YOLO("yolov8n.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, half=True)
# 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, int8=True, data="coco8.yaml"
)
Predict 循环
有关更多信息,请参阅预测模式。
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.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",
)
验证配置
参见 val
模式 要了解有关验证配置参数的更多信息。
from ultralytics import YOLO
model = YOLO("yolov8n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)
部署导出的 YOLO11 TensorRT 模型
在成功将您的 Ultralytics YOLO11 模型导出为 TensorRT 格式后,您现在可以部署它们了。有关在各种设置中部署 TensorRT 模型的深入说明,请查看以下资源:
-
使用Triton服务器部署Ultralytics: 我们的指南介绍了如何使用NVIDIA的Triton Inference(原TensorRT Inference)服务器,专门用于Ultralytics YOLO模型。
-
使用NVIDIA TensorRT部署深度神经网络: 本文介绍了如何使用NVIDIA TensorRT在基于GPU的部署平台上高效地部署深度神经网络。
-
基于NVIDIA的PC的端到端AI:NVIDIA TensorRT部署: 这篇博客文章介绍了使用NVIDIA TensorRT来优化和部署基于NVIDIA的PC上的AI模型。
-
NVIDIA TensorRT 的 GitHub 代码仓库::这是包含 NVIDIA TensorRT 的源代码和文档的官方 GitHub 代码仓库。
总结
在本指南中,我们重点介绍了将 Ultralytics YOLO11 模型转换为 NVIDIA 的 TensorRT 模型格式。此转换步骤对于提高 YOLO11 模型的效率和速度至关重要,使其更有效并适用于各种部署环境。
有关使用详情的更多信息,请查阅TensorRT官方文档。
如果您对其他 Ultralytics YOLO11 集成感兴趣,我们的集成指南页面提供了广泛的信息资源和见解。
常见问题
如何将 YOLO11 模型转换为 TensorRT 格式?
要将您的 Ultralytics YOLO11 模型转换为 TensorRT 格式以进行优化的 NVIDIA GPU 推理,请按照以下步骤操作:
-
安装所需软件包:
pip install ultralytics
-
导出您的 YOLO11 模型:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="engine") # creates 'yolo11n.engine' # Run inference model = YOLO("yolo11n.engine") results = model("https://ultralytics.com/images/bus.jpg")
更多详情,请访问YOLO11 安装指南和导出文档。
使用 TensorRT 部署 YOLO11 模型有哪些好处?
使用 TensorRT 优化 YOLO11 模型具有以下几个优点:
- 更快的推理速度: TensorRT 优化模型层并使用精度校准(INT8 和 FP16)来加速推理,而不会显着牺牲准确性。
- 内存效率: TensorRT 动态管理 tensor 内存,减少开销并提高 GPU 内存利用率。
- 层融合:将多个层合并为单个操作,从而降低计算复杂度。
- Kernel 自动调优:自动为每个模型层选择优化的 GPU kernel,确保最佳性能。
要了解更多信息,请浏览 NVIDIA 官方 TensorRT 文档 和我们的 深入 TensorRT 概述。
我可以在TensorRT中使用INT8量化来处理YOLO11模型吗?
是的,您可以使用带有 INT8 量化的 TensorRT 导出 YOLO11 模型。此过程涉及训练后量化 (PTQ) 和校准:
-
导出为 INT8:
from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
-
运行推理:
from ultralytics import YOLO model = YOLO("yolov8n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
有关更多详细信息,请参阅使用 INT8 量化导出 TensorRT 部分。
如何在 NVIDIA Triton 推理服务器上部署 YOLO11 TensorRT 模型?
可以使用以下资源在 NVIDIA Triton 推理服务器上部署 YOLO11 TensorRT 模型:
- 使用Triton服务器部署Ultralytics YOLOv8: 关于设置和使用Triton Inference Server的分步指南。
- NVIDIA Triton Inference Server 文档:用于详细部署选项和配置的官方 NVIDIA 文档。
这些指南将帮助您在各种部署环境中高效地集成 YOLOv8 模型。
导出到 TensorRT 的 YOLOv8 模型观察到的性能提升是什么?
使用 TensorRT 带来的性能提升会因所用硬件而异。以下是一些典型的基准测试:
-
NVIDIA A100:
- FP32 推理:约 0.52 毫秒 / 图像
- FP16 推理:约 0.34 毫秒 / 图像
- INT8 推理:约 0.28 毫秒 / 图像
- INT8 精度下的 mAP 略有降低,但速度显着提高。
-
消费级 GPU(例如,RTX 3080):
- FP32 推理:约 1.06 毫秒 / 图像
- FP16 推理:约 0.62 毫秒 / 图像
- INT8 推理:约 0.52 毫秒 / 图像
不同硬件配置的详细性能基准测试可以在性能部分找到。
有关 TensorRT 性能的更全面见解,请参阅 Ultralytics 文档和我们的性能分析报告。