tensorrt
1.算子融合
水平融合,垂直融合,删除冗余
计算图优化的目标是对计算图进行等价的组合变换,使得减少算子的读写操作提供效率。模型中有很多层,在部署模型推理时,每一层的运算操作都是由GPU完成的,但实际上是GPU通过启动不同的CUDA(Compute unified device architecture)核心来完成计算的,CUDA核心计算张量的速度是很快的,但是往往大量的时间是浪费在CUDA核心的启动和对每一层输入/输出张量的读写操作上面,这造成了内存带宽的瓶颈和GPU资源的浪费。TensorRT通过对层间的横向或纵向合并(合并后的结构称为CBR,意指 convolution, bias, and ReLU layers are fused to form a single layer),使得层的数量大大减少。横向合并可以把卷积、偏置和激活层合并成一个CBR结构,只占用一个CUDA核心。纵向合并可以把结构相同,但是权值不同的层合并成一个更宽的层,也只占用一个CUDA核心。合并之后的计算图(图4右侧)的层次更少了,占用的CUDA核心数也少了,因此整个模型结构会更小,更快,更高效。
2.数据排布优化
在TensorFlow框架的输入格式NHWC,而pytorch是NCHW。这些格式是框架抽象出来的矩阵格式,实际在内存中的存储都是按照1维的形式存储。这就涉及物理存储和逻辑存储之间的映射关系,如何更好的布局数据能带来存储数据的访问是一个优化方向;另外在硬件层面,有些硬件在某种存储下有最佳的性能,通常可以根据硬件的读写特点进行优化。
3.量化(低精度优化)
FP16/BF16/INT8/FP8/INT4
低精度的Tensor Core可以加速计算,量化的weight可以减少内存的访问,从而提性能
4.组batch(动态batch)
模型的输入只有单个batch的时候,单个batch的计算量并不能充分的利用CUDA核心的计算资源,有相当一部分的核心在闲置等待中;当输入有多个batch的时候,由于GP

最低0.47元/天 解锁文章
1222

被折叠的 条评论
为什么被折叠?



