模型推理过程中,有人实现将BatchNormal融合到卷积计算中么?

输入图像尺寸是300*300,当时在训练之前,用随机初始化模型并测试推理耗时;然后训练后用真是的的权重文件测试了推理耗时,两次相差了10多毫秒,真实权重文件会慢,是使用CPU测试的。

有人分析过具体原因么?


更新:初步觉着是BN的原因,已经更改题目了。

顶一下,看了下Profile的结果,应该就是BN的锅了,但应该怎么把BN融合到卷积中去呢?

很多推理框架都会融合conv,bn,relu吧

你的意思是他们是自动合并的?需要我们设置一下么?

我对比了随机初始化跟真实权重时Profile的结果,发现BatchNorm类操作的耗时前者比后者少很多?看样子是还没有合并,不然Profile结果中也不会出现BN这个操作的耗时了,你觉着呢?

这个东西你可以自己合并一下啊,在inference的时候,BatchNorm就是一个线性操作,可以合并到卷积的权重和bias上去,你写一个不带BN层的模型,将原来的模型卷积的权重部分乘以一个系数加一个bias赋值给新模型就行了。合并以后会加快速度的。

嗯,已经实现了,把BN里面的eps设置对后,精度完全一致。

其实,感觉相同的工作可以自动完成,比如调用get_backend_symbol函数,使用一些Backend来完成Op的合并,但我还没有测试。关于Backend只有Blog里面提到了,但貌似没有相关Tutorial?

好的吧,可以不用手动合操作,Backend优化后,效果还是比较明显的

如果是用MKLDNN,BN可以作为Conv的post op。或者用TVM

你的意思是我们还可以调整MKLDNN的Op融合规则么?:blush:

我现在的理解是调用get_backend_symbol自动进行优化

可以看一下tvm的模型加速

好的,谢谢

您好,请问您知道想要做elementwise的指数或者幂运算,可以使用postop吗?如果不能的话,您知道可以用什么来做吗?谢谢