目前已实现基于稀疏卷积的centerpoint
部署,精度不丢失,在3080ti
下,nuscenes
数据集 fp32
一帧耗时32ms
左右,比pytorch
推理速度快3倍!
centerpoint
推理网络分3部分:
1.backbone
前面部分用tensorRT
实现定义算子,包含5个TensorRT
算子
voxel
信息voxel
计算均值scatter
转为[N,C,H,W]
形式该自定义算子部分调用TensorRT API搭建网络,导出用于TensoRT推理的pfe.trt
文件
2.backbone 2D
卷积 ,该部分经过pytorch-->onnx-->Trt
的的形式转换出TensoRT
的rpn.trt
推理文件,方便后续做int8的感知训练量化
c++/cuda
实现fp32
下 rpn
部分耗时11.5ms
左右,后处理部分耗时1ms
多点,rpn
部分调用TensoRT
的2D
卷积,耗时固定的,接下来主要针对自定义算子的前处理+pfe
+ 后处理速度进行优化
耗时优化记录如下:
pfe 3d conv:216ms
malloc、free
太耗时,改为手动分配显存,合并内存分配,并保持内存对齐pfe 3d conv:200ms
pfe 3d conv 120ms
pfe 3d conv 48ms
8*8
个数,同时解决M,N不能整除BM,BN的边缘问题,但结果有部分数据异常,需进一步排查 pfe 3d conv 45ms
pfe 3d conv:45ms
20230308
共享内存存在bank冲突,将矩阵A在共享内存中按列缓存,解决共享内存将结果写入全局变量的bank冲突问题,同时使用向量化float4增大全局数据读写的带宽利用率pfe 3d conv:24ms
pfe 3d conv:22.8ms
pfe 3d conv:21.8ms
pfe 3d conv:20.6ms
pfe 3d conv:20.3ms
add_bias_kernel
核函数改为二维grid和二维block,同时使用float4读写数据pfe 3d conv:19.9ms
下一步:
orin
芯片上测试基于稀疏卷积centerpoint
耗时fp16
的TensorRT
算子,预估fp16 x86
下的耗时可以到20ms
内nms
耗时1ms
多,耗时过长,将head
部分都统计改为cuda
实现
上一篇:VirtualBox的克隆与复制
下一篇:C++——继承