NVIDIA在2021年10月6日发布的TensorRT新版本 8.2 Early Access版本终于开始支持爱因斯坦求和算子Einsum,这个消息真是为模型工业化部署的同学省了不少的时间。
TensorRT中具体可支持的Onnx算子可参考:https://github.com/onnx/onnx-tensorrt/blob/master/docs/operators.md,
但是目前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乘积的功能,影响还是比较小的。
如果有兴趣,可以访问我的个站:https://www.stubbornhuang.com/,更多干货!



