在工业应用中,边缘端的部署通常需要发布到不同的硬件,在自己的电脑上生成的模型,往往会因为与其他设备的显卡型号不同架构不同的问题,导致其他设备无法部署主机上导出的engine模型或者trt模型。因此,8.6版本的tensorRT发布了一项新的可能,可以支持基于不同显卡设备之间的兼容。
TensorRT官方文档-第六章
打开英伟达开发文档的第六部分第二节Hardware Compatibility,默认情况下,TensorRT引擎只与构建它们的设备类型兼容。通过构建时配置,可以构建与其他类型设备兼容的引擎。目前,硬件兼容性仅支持Ampere及以后的设备架构,不支持NVIDIA DRIVE OS或JetPack。
这里需要说明的是,这个兼容特性并不是兼容所有的英伟达显卡设备,而是兼容基于Ampere架构及以后的架构的显卡,笔者案例中的情况是使用3060显卡的主机导出的模型,想发布到1660显卡的设备上,由于3060显卡已是基于Ampere架构的显卡,但是1660显卡是基于turing架构的,因此这个设备兼容性并不支持,只能通过在1660显卡的主机上重新导出engine或者trt模型再调用。
#include <NvInfer.h>
// 创建一个IBuilderConfig对象
nvinfer1::IBuilderConfig* config = builder->createBuilderConfig();
// 设置硬件兼容性级别为kAMPERE_PLUS
config->setHardwareCompatibilityLevel(nvinfer1::HardwareCompatibilityLevel::kAMPERE_PLUS);