diff --git a/chapter_model_deployment/model_converter_and_optimizer.md b/chapter_model_deployment/model_converter_and_optimizer.md index b0a5399..19cb181 100644 --- a/chapter_model_deployment/model_converter_and_optimizer.md +++ b/chapter_model_deployment/model_converter_and_optimizer.md @@ -42,7 +42,7 @@ $$\pmb{Y_{bn}}=\gamma\frac{\pmb{X_{bn}}-\mu_{\mathcal{B}}}{\sqrt{{\sigma_{\mathc 同样,这里不需要理解Batchnorm中的所有参数的含义,只需要了解式 :eqref:`ch08-equ-bn_equation`是$\pmb{Y_{bn}}$关于$\pmb{X_{bn}}$的,其他符号均表示常量。 -如 :numref:`ch08-fig-conv_bn_fusion`,当Convlution算子的输出作为Batchnorm输入时,最终Batchnorm算子的计算公式也就是要求$\pmb{Y_{bn}}$关于$\pmb{X_{conv}}$的计算公式,我们将$\pmb{Y_{conv}}$代入到$\pmb{X_{bn}}$,然后将常数项合并提取后,可以得到公式 :eqref:`equ:conv-bn-equation-3`。 +如 :numref:`ch08-fig-conv_bn_fusion`,当Convlution算子的输出作为Batchnorm输入时,最终Batchnorm算子的计算公式也就是要求$\pmb{Y_{bn}}$关于$\pmb{X_{conv}}$的计算公式,我们将$\pmb{Y_{conv}}$代入到$\pmb{X_{bn}}$,然后将常数项合并提取后,可以得到公式 :eqref:`ch08-equ-conv_bn_equation_3`。 $$\pmb{Y_{bn}}=\pmb{A}*\pmb{X_{conv}}+\pmb{B}$$ :eqlabel:`ch08-equ-conv_bn_equation_3` diff --git a/chapter_model_deployment/model_inference.md b/chapter_model_deployment/model_inference.md index cd066db..eb120d8 100644 --- a/chapter_model_deployment/model_inference.md +++ b/chapter_model_deployment/model_inference.md @@ -167,6 +167,6 @@ Winograd算法的整个计算过程在逻辑上可以分为4步,如 :numref:`c :width:`500px` :label:`ch08-fig-winograd` -针对任意的输出大小,要使用\textit{\textbf{F}}(2$\times$2,3$\times$3)的Winograd算法,需要将输出切分成2$\times$2的块,找到对应的输入,按照上述的四个步骤,就可以求出对应的输出值。当然,Winograd算法并不局限于求解\textit{\textbf{F}}(2$\times$2,3$\times$3),针对任意的\textit{\textbf{F}}($m$$\times$$m$,$r$$\times$$r$),都可以找到适当的常量矩阵\textit{\textbf{A}}、\textit{\textbf{B}}、\textit{\textbf{G}},通过间接计算的方式减少乘法次数。但是随着$m$、$r$的增大,输入、输出涉及的加法以及常量权重的乘法次数都在增加,那么乘法次数带来的计算量下降会被加法和常量乘法所抵消。因此,在实际使用场景中,还需要根据Winograd的实际收益来选择。 +针对任意的输出大小,要使用$\textit{\textbf{F}}(2\times2,3\times3)$的Winograd算法,需要将输出切分成$2\times2$的块,找到对应的输入,按照上述的四个步骤,就可以求出对应的输出值。当然,Winograd算法并不局限于求解$\textit{\textbf{F}}(2\times2,3\times3)$,针对任意的$\textit{\textbf{F}}(m\times m,r\times r)$,都可以找到适当的常量矩阵$\textit{\textbf{A}}$、$\textit{\textbf{B}}$、$\textit{\textbf{G}}$,通过间接计算的方式减少乘法次数。但是随着$m$、$r$的增大,输入、输出涉及的加法以及常量权重的乘法次数都在增加,那么乘法次数带来的计算量下降会被加法和常量乘法所抵消。因此,在实际使用场景中,还需要根据Winograd的实际收益来选择。 本小节主要介绍了模型推理时的数据处理和性能优化手段。选择合适的数据处理方法,可以更好地提取输入特征,处理输出结果。并行计算以及算子级别的硬件指令与算法优化可以最大限度的发挥硬件的算力。除此之后,内存的占用及访问速率也是影响推理性能的重要因素,因此推理时需要设计合理的内存复用策略,内存复用的策略已经在编译器后端章节已经做了阐述。