1 TensorRT 8.2 EA版本支持爱因斯坦求和算子Einsum

NVIDIA在2021年10月6日发布的TensorRT新版本 8.2 Early Access版本终于开始支持爱因斯坦求和算子Einsum,这个消息真是为模型工业化部署的同学省了不少的时间。

TensorRT中具体可支持的Onnx算子可参考:https://github.com/onnx/onnx-tensorrt/blob/master/docs/operators.md

TensorRT – 喜大普奔,TensorRT8.2 EA起开始支持Einsum爱因斯坦求和算子-StubbornHuang Blog

但是目前Einsum也是支持大部分等式,暂不支持省略号和对角线操作。

目前我已经使用TensorRT 8.2 EA版本对einsum算子转换进行了测试,真的是可以用了!

1.1 Tensor 8.2 EA支持Einsum算子的意义

在TensorRT 8.2 Early Access发布之前,如果深度学习模型中包含Einsum操作,比如pytorch中的torch.einsum或者Tensorflow中的tf.einsum的操作,那么可以成功转换成onnx模型,但是使用TensorRT的trtexec工具将onnx模型转换成TensorRT模型时,就会出现找不到Plugin:Einsum的操作,需要我们自定义插件去支持Einsum算子,

目前在Github上也有人开源自己写的Einsum插件:https://github.com/xn1997/TensorRT-EinsumPlugin/,但是这个插件目前只支持nctkv,kvw->nctw的算子操作,其他的需要自己去实现。

还有的方式是将这种Einsum算子在python层面直接改写成Pytorch或者Tensorflow的常规算子操作,具体可参考https://www.stubbornhuang.com/1741/或者 https://stubbornhuang.blog.csdn.net/article/details/120654252

现在NVIDIA官方开始支持Einsum算子操作,为深度学习模型的工业化部署节省了太多的时间。虽然省略号和对角线操作暂不支持,但是在深度学习模型中大部分使用的是矩阵乘积或者batch乘积的功能,影响还是比较小的。