本章主要介绍一个通用计算框架主要包含哪几个模块,以及这些模块的设计要点,建议大家阅读本章前,了解一下Protocol Buffer 以及 FlatBuffer 的概念及基本用法。
首先,我们先分析一下,计算框架的作用到底是什么?在笔者看来,计算框架,是连接算法与芯片的桥梁。下图是笔者画的一个简易架构图,方便大家理解计算框架的层次结构,在后续章节中,我们会深入讨论各个层次的设计思想与实现方法。
算法,或者说模型里,包含了一个个算子,所谓算子,其实就是函数,比如Conv、Batchnorm、Relu等,这些函数的公式是确定的,给定输入,输出结果也是确定的(这里我们暂不考虑dropout这类带随机性质的算子),我们可以理解为,只要存储了这些公式所需参数的文件,无论是txt、xml、json,还是pb、fb,都可以叫做模型文件。
分析完模型,我们大概就知道,计算框架的作用之一,便是解析出模型的参数,解析出参数后,就可以根据算法既定的顺序,执行模型里的函数