专栏算法工具链模型转化优化-乘积实现方式优化

模型转化优化-乘积实现方式优化

已解决
ArthurThomas2022-12-02
40
1
用户您好,请详细描述您所遇到的问题。
1.硬件获取渠道:
2.当前系统镜像版本:x3j3_lnx_db_20220407
3.当前天工开物版本:ai_toolchain_centos_7_xj3: v2.2.3a
4.问题定位:模型转化优化-乘积实现方式优化
5.开发的demo/案例:
6.需要提供的解决方案:
搭建了一个深度学习模型,这个模型中间的部分需要求解两个Featuremap的不同行像素位置之间的点乘,如图所示
算法示意图算法示意图

实现方法尝试

实现方法1

早期的实现方法如下所示
实现方法1实现方法1
即将一个Featuremap重复,另一个Featuremap拼接,使两个很大的Tensors进行相乘。猜测太大的Mul使得推理变得很慢,且内存相关的操作使得后续的模型不能继续,从而使得整个模型变成两个子图,最终使得模型推理1次在core为2的情况下花费2.2s!

实现方法2

目前的实现方法如下所示
实现方法2实现方法2
即多次调用Mul算子,在较小的Tensor上进行计算和内存存取
此方法使得模型从两个子图变为1个,使得模型推理1次在core为2的情况变成80ms(仅BPU),有了不小提升。
但是此时发现一个问题,每个Mul算子乘积和存取的时间花费5.2ms左右,多个Mul算子占了整个推理时间的大部分,如下图所示
部分算子推理耗时部分算子推理耗时
且如果Mul算子的耗时线性,则为了最终20Hz实时运行,得裁剪Mul次数,只能在小范围或者低精度上求解点积,最终会影响模型性能

想请问对于乘积实现方式优化,在模型设计和模型转化环节有没有优化之处

算法工具链
评论1
0/1000
  • 颜值即正义
    Lv.2

    您好,经分析,这块内容在XJ3上暂时没有办法进行优化,抱歉啦

    2022-12-05
    0
    0