目前,市场上的芯片主要包括指令集架构和数据流架构两种实现方式。指令集架构主要包括X86架构、ARM架构、精简指令集运算RISC-V开源架构,以及SIMD架构。总体来说,四者都属于传统的通用指令集架构。传统的指令集架构采用冯诺依曼计算方式,通过指令执行次序控制计算顺序,并通过分离数据搬运与数据计算提供计算通用性。与上述四者不同,数据流架构采用了数据流引擎的计算架构,它的显著特点就是能够大幅提高芯片利用率。如鲲云的CAISA(Custom AI Streaming Accelerator Architecture)就采用了定制化的数据流架构。那么,究竟什么是数据流架构呢?它又是怎么实现性能的极大提升呢?
数据流架构是一种计算机体系结构,直接与传统的冯·诺依曼架构或控制流体系结构进行对比,数据流架构没有概念上的指令计数器。它使用粗粒度表示(Coarse-grained Representation)来提高数据的并行度,并允许编译器同时调度多个顺序循环和功能,以实现更高的吞吐量和更低的延迟。
下图显示了数据流流水线的概念图。在这个概念图中,指令集架构首先执行函数A,完成之后再执行函数B,依次类推直至执行完所有程序。在定制数据流架构的情形下,编译器可以安排每个函数在数据可用时立即执行。
在此示例中,指令集架构(图A)等待时间和间隔为8个时钟周期。使用数据流架构,该间隔可减少到仅三个时钟周期(图B)。
目前,数据流架构已在专用硬件中成功应用,例如数字信号处理、网络路由、图形处理、遥感检测、以及数据库处理等。同时,在当今的许多软件体系结构中(包括数据库引擎设计和并行计算框架),它也占据着非常重要的地位。1994年,帝国理工学院教授、英国皇家工程院院士、鲲云科技联合创始人和首席科学家Wayne Luk陆永青院士率先将数据流架构定制化并运用到AI领域。
首先,现在大部分的 GPU、CPU 都是基于指令集的架构,应用层可以通过软件和编辑器去将语言最终转化为机器的语言,即二进制的码,从而执行指令和操作,并保证对不同应用的兼容性。
相较于指令集,数据流的核心就是使每个时钟周期都能进行有效计算。数据不停流入计算单元并完成计算,得到输出后,最终数据将会被存储到内存中或流入下一个流水线操作。
简而言之,数据流架构可以为特定应用场景提供更高的芯片利用率;而指令集架构虽然能提供更高的通用性,但其芯片利用率相对较低。两种架构产生差异的原因在于:
- 数据流架构完全依靠数据流转的方式来控制计算,从而消除了由于指令控制和数据搬运而产生的数据开销;
- 指令集架构通过指令控制来处理不同场景下的运算,提高了对不同计算需求的通用性支持。
数据流架构要实现性能的极大提升,需要解决两个问题,一是如何在复杂计算架构下保持较高的计算效率,二是如何保证定制架构的通用性,即如何支持不同的深度学习算法。
为此, 鲲云研发了RainBuilder与CAISA架构配合,通过动态配置使其能通用支持各种AI算法,提升了通用性。该编译器能进行算法模型结构的解析,并把模型导入数据流架构,从而提高数据流架构的计算效率来完成深度学习网络的计算。
RainBuilder的优势包括:
- 是一种端到端(End-to-End)的编译工具
- 最大化 AI 性能,充分利用数据流架构下的计算单元
- 使用硬件流水线架构完成数据的计算与控制
RainBuilder由RbCompiler、RbRuntime和RbDriver三部分构成。RainBuilder的原理如下图所示:
------
RainBuilder Compiler(下文称为RbCompiler或Compiler)可以将用户在TensorFlow、Caffe、ONNX、PyTorch等深度学习框架下开发的算法模型进行全自动的编译优化,并提取数据流中间表达式(Streaming Graph IR,SG IR)。模型编译过程中自动进行数据量化、节点融合、软硬件分割等操作。Compiler通过鲲云研发的图优化算法将已有开发框架中的指令集计算图重构为数据流图。转化过程中涉及大量针对数据流架构的模型压缩和量化技术,从软件层面进一步提升计算效率。
------
RainBuilder Runtime为CAISA加速引擎的软件运行时,负责将SG IR进行加载并使用CAISA加速引擎对深度学习网络进行运行加速,该部分组件以C/C++ API接口的形式开放给用户进行二次开发和部署使用。RbRuntime作为RainBuilder的后端,配合RbCompiler使用,用于加载并运行RbCompiler编译生成的模型文件,即上文提到的SG IR,SG IR包含了模型的所有节点,并能根据节点创建对应的SG OP,同时还能按照拓扑顺序将SG OP部署在相应的设备上执行计算,返回模型的计算结果。Runtime提供深度学习算法的应用接口,用户可根据使用习惯调用python或C/C++的API完成算法的部署。Runtime设计了工作线程和计算线程精细化调度框架,同时针对x86、ARM平台实现了算子的深度适配和优化,从而保证目标算法可以充分发挥CAISA架构计算效率的优势。
------
RainBuilder Driver是底层CAISA架构的相关驱动模块,对应用开发者透明,驱动CAISA硬件架构,实现硬件模块的计算调度和硬件模型分析。
RainBuilder的推出简化了算法从开发到芯片级部署的流程。用户不需要了解底层计算架构,也不需要改变开发习惯,就可以实现算法在数据流架构上的高效部署。
鲲云科技聚焦于基于数据流架构的定制AI计算引擎,凭借自1991年近三十年技术积累,2019年4月,鲲云科技发布全球首个AI数据流架构CAISA 2.0架构,其芯片利用率(Chip Utilization Ratio,CUR )最高可达98%,并且支持大多数主流卷积神经网络(CNN),是世界上首个针对人工智能的数据流架构。基于自主研发的CAISA数据流架构,鲲云的“星空”、“雨人”加速卡已在航空、航天、电力、安防、教育、智能制造、智慧城市等领域落地。
References
1. Veen, Arthur H.(Dec 1986). "Dataflow Machine Architecture". ACM Computing Surveys.18 (4): 365–396. doi:10.1145/27633.28055. Retrieved 5 March 2019.
2. "HX300Family of NPUs and Programmable Ethernet Switches to the Fiber AccessMarket", EN-Genius, June 18 2008.
3. ManchesterDataflow Research Project, Research Reports: Abstracts, September 1997
4.https://www.xilinx.com/html_docs/xilinx2017_4/sdaccel_doc/obx1504034310502.html