|CPU推理性能提高数十倍,旷视天元计算图、MatMul优化深度解读( 二 )
本文插图
紧接这一过程 , 天元将运行 OptPass ParamRedistributePass , 该 OptPass 会将上述 Batch Norm 转化而来的 Elemwise 中的 scale 融合到 convolution 的权重中 , 具体实现原理如下:
本文插图
本文插图
最后天元将运行 OptPass FuseConvBiasNonlinPass , 该 OptPass 会将计算图中的 Convolution+Elemwise 转化为天元内部实现的 ConvBias Op 中 , 同时 , 它还会设置 ConvBias Op 中 NonelineaMode 参数 。
如此便完成了从 Convolution+Batch Norm+Relu 到 ConvBias 的转换 , 整体转换过程如下图:
本文插图
实验验证图优化之后的性能
在推理之前 , 如果要对完成训练的模型进行图优化 , 则需要在模型 dump 的期间进行 , 当然 , 也可以在 SDK 运行模型之前进行 。 下面是在模型 dump 时进行图优化的代码:
本文插图
上面的 optimize_for_inference=True 将在 dump 模型时候针对 inference 进行优化 ,enable_fuse_conv_bias_nonlinearity=True 将在模型中进行 Op Fuse 的优化 , 此外天元还支持其他的优化参数 , 具体可见天元的文档 。
下表展示的 , 是在实验过程中对模型进行图优化前、后 , 模型运行性能的测试对比 。
本文插图
可以看出图优化对模型性能的提升效果显著 , 具体提升比例由模型自身决定 。
MatMul 优化
如前文所述 , MatMul 作为卷积运算的基础算子 , 会频繁地被 Im2col、Winograd 以及 FullyConnect 使用 。 因此在天元中 , MatMul 既被封装为单独的 Op , 也可以作为单独的 algo 供卷积的实现使用 。
此外 , 由于 MatMul 也是计算最为密集的算子 , 因此天元对它进行了极致的优化 。
优化
MatMul 是线性代数中的矩阵乘 , 假设矩阵 A 大小为 M*K , 矩阵 B 大小为 K*N , 则得到矩阵 C 大小为 M*N , 其中 C 的每个元素的计算公式如下:
本文插图
可以发现 , 在 MatMul 的计算中乘法和加法的计算量为 2*M*N*K (计算 C 中每个元素时 , 加法和乘法计算量分别为 K , C 的总元素个数为 M*N) , 访存量为 2*M*N*K (计算每个 C 中元素需要 2*K 访存)+ 2*M*N(整个 C 矩阵读一次和写一次) 。 由于计算量固定(排除 Strassen) , 所以只能优化访存 , 使得乘法和加法运算达到处理器的极限性能 , 从而实现 MatMul 的最佳性能 。
MatMul 分块
关于减少 MatMul 计算时的访存量 , 最有效的方法是对 MatMul 的计算进行分块 , 并将分块之后的数据保存在 CPU 的 Cache 中 。
如下图所示 , 将 A 按照 mr 进行行分块 , 将 B 按照 nr 进行列分块 , 计算时将需要用到的分块保存在 CPU 的各级 Cache 中 , 从而极大的减少了内存的读写 。
本文插图
进一步细化上面的分块计算过程如下图所示 , A 中的一个行块都要重复地和 B 中的每一个列块进行小分块的 MatMul , 写入到 C 的小块中 , 为了使得分块尽量的大 (如上所述 , 能够减少内存访存量) , Cache miss 率尽量低 , 因此需要根据 CPU 的 Cache 结构特点(速度:L1D>L2>L3 , 容量 L1D
推荐阅读
- 5G|挑手机为何要注重性能优势?iQOO 5全方位体验给答案
- iQOO手机|iQOO 5使用体验,性能铁三角出众,沉浸式游戏体验太赞了
- iQOO手机|超强性能带来极致游戏体验,iQOO 5带你轻松上分
- 英特尔|拒绝做小白!一文看懂英特尔CPU的命名规则
- 5G|还在纠结开学买什么手机?这几部性能旗舰入手不亏
- iQOO手机|能打又能拍的性能小钢炮,iQOO5 评测 | 钛极客
- 趣投稿|核显性能超越 GTX 1050Ti,英特尔 11 代酷睿跑分曝光
- 笔记本|荣耀MagicBook Pro锐龙版满血性能 重新定义轻薄本
- 对讲机|摩托罗拉MagOne系列产品两款数字对讲机防护性能版本升级!
- 芯片|三维集成数据存储与计算 超高性能异构AI芯片熠熠生辉