“全栈”开源的VTA会给AI芯片产业带来什么?
TVM团队刚刚公开了开源项目VTA:Versatile Tensor Accelerator[1]。陈天奇博士的知乎文章称其为“VTA: 开源深度学习芯片栈”[2]。结合TVM,这是一个从软件到硬件完全开源的项目,是目前看到最完整的开源尝试。那么,它会对AI芯片产业产生什么样的影响呢?
•••
背景
在AI领域,软件开源非常普遍。而在去年,Nvidia甚至开源了它在实际产品中使用的硬件加速器NVDLA(从Nvidia开源深度学习加速器说起)。但像VTA项目这样的软硬件“全栈”开源的应该还是第一次。从目前公开的内容来说,这次开源准备的也比较充分,代码,文档,教程和Blog一应俱全。陈天奇博士还第一时间在知乎上发表了一篇文章,介绍了他们的想法[2]。下图即为这个“芯片栈”。
应该说,TVM团队一直在尝试针对不同硬件架构对DNN进行优化,已经做了很多工作(我之前也简单讨论过,Deep Learning的IR“之争”)。这次他们终于把“触角”伸到了硬件层面,似乎也是情理之中。如[2]中所说“首先,VTA是一个完全开源的深度学习加速器。但是VTA不光包含了加速器设计本身,完整的驱动,tvm编译的整合和直接从tvm前端python编译部署深度学习模型的完整开源工具链。” 这次VTA开源的内容和资料还是挺多的,我简单过了一下他们的技术文档[3]。下面先简单讨论一下技术方面的特点。
•••
技术特点
做一个“全栈”方案最重要的目的当然是软硬件联合优化。这也是VTA的最大特点。放映到硬件设计上,就是“软件友好的硬件架构”。
这个硬件架构图,可以说很好的反映了上述特点。我看到的第一感觉就是,“这怕是软件工程师画的吧”。
VTA有两个层次的指令集,粗粒度的指令(CISC)有4个,LOAD,GEMM,ALU,STORE,分别对应上图中的4个主要的硬件模块。其中GEMM实现矩阵乘法,实现CONV;而ALU则主要执行Element-wise ALU, 实现activation,normalization,pooling等操作。GEMM和ALU实现功能是通过细粒度的微代码(Micro-op)实现。微代码的控制流比较简单,不使用条件跳转之类功能。具体内容大家可以参考[3]。LOAD模块也支持2D DMA的访存模式。取指模块根据CPU的配置从DRAM中读取指令,简单译码后分发到各自的队列等待执行。在VTA软硬件设计中最重要的一个点就是“显式的控制流依赖”。如[2]中提到,“VTA里面最让我喜欢的设计是显式的控制流依赖操作。利用这些控制流依赖我们可以直接在软件层面实现动态的流水线,达到掩盖内存开销的目的。”这一点在硬件和软件工具的设计中都有体现,就不展开讨论了。
目前版的VTA硬件只有FPGA的实现,而且并非是RTL代码,而是Xilinx的HLS C代码。HLS C代码需要使用Xilinx的HLS(高层次综合)工具转换为硬件设计。HLS的具体的效果还有待观察。实例使用的FPGA平台是“a low-power PYNQ board which incorporates an ARM Cortex A9 dual core CPU clocked at 667MHz and an Artix-7 based FPGA fabric”,成本很低。当然,相应的,性能也不高。实例中实现了16x16的MAC,能够运行在100MHz,峰值的处理能力是51GOPS/s。从下图的roofline结果来看,C1到C11都是ResNet-18 inference中的卷积层conv2d运算,经过访存和运算调度的优化后接近roof。考虑到FPGA硬件的限制,这个结果还是不错的。
VTA对应的软件工具基于TVM框架。由于之前已经做了很多优化和编译器相关的工作,这部分性能应该做的不错。其中一个比较值得关注的是它的JIT runtime功能。目前实例有一个比较完整的部署流程(如下图)和参考教程,大家可以自己上手试一试。
总得来说,单纯看VTA的硬件,目前还是一个比较简单的设计,只支持Inference,还没有考虑稀疏性,低精度,数据压缩,以及对一些其它的硬件设计技巧的支持(从ISCA论文看AI硬件加速的新技巧)。它的最大特点还是在硬件架构设计中更多的考虑了软件设计,或者说是更多的在软件视角考虑硬件设计。其基本出发点如[2]中所说,“我相信未来的深度加速器也会往“更加聪明的软件,更加笨的硬件”,和更多软硬件协同方向发展。”
•••
影响
AI芯片落地的难点更多的在于软件,这是大家的共识。Nvidia和Google的领先,也应该归功于其软件上的实力。目前的AI芯片Startup中,已经有了第一代芯片的公司都在极大力度的扩充软件团队,也从侧面说明了软件的重要性。
如前面所分析,VTA的开源只是个起点,其硬件设计被看成一个“模板”(“VTA can serve as a template deep learning accelerator design”)更为恰当[1]。当然,从目前的完成度(代码,文档,Tutorials)来说,这个起点也并不低。更重要的是,TVM/VTA构成了一个完整的软硬件部署的实例(稍有遗憾的是硬件没有RTL代码)。
目前说TVM/VTA能够对于AI芯片产业带来多大影响还为时尚早。不过我认为,他们提出的以下两个目标应该是可以达成的。
Provide an open deep learning system stack for hardware, compilers, and systems researchers alike to incorporate optimizations and co-design techniques.
Lower the barrier of entry for machine learning practitioners to experiment with novel network architectures, operators and data representations that require specialized hardware support.
NVDLA推出的时候所提目标是降低inference实现的门槛。但NVDLA的软件工具并未开源,项目更新频率和社区的活跃度不高,都让这个目标打了折扣。而相比之下,虽然VTA的硬件和NVDLA(和其它商用加速器)相比还不成熟,但我们有理由期待它的发展更能充分发挥开源项目的优势。在Framework生态中,TVM的特色是结合底层硬件的优化。增加一个硬件加速器对于它肯定是有巨大帮助的。下一步就看能不能把社区搞好,让更多的人参与到软硬件优化过程当中了。
接下来的问题是,如果TVM/VTA能够健康快速的成长,或者出现更多的“全栈开源”,会带来什么连锁反应呢?
第一,现在开源已经成了竞争手段。对于Nvidia,Google来说,虽然目前分别占据硬件和软件的绝对领导地位,但潜在的威胁不少,而他们两者之间的碰撞也可能越来越明显(最近MLPerf一些话题的争论也可以看出来)。为了巩固在产业链的地位,它们会不会也做更多的开源呢?比如,Nvidia更“完整”的开源NVDLA,而Google开源“老版本”的TPU硬件?其它巨头是否会加入硬件开源呢?
第二,对于目前正在做AI芯片又急需软件能力的初创公司来说,TVM/VTA的可以作为软件开发的一个参考。这就有可能出现后来者和领先公司拉近差距的情况,导致更复杂的竞争态势。而如果有更多的开源硬件项目出现,AI芯片设计的门槛会进一步降低,将意味着商业芯片的竞争会更加激烈。大家必须拿出真正差异化的东西才可能生存。
第三,对于学术界来说,VTA提供了一个可以同时玩儿软件和硬件的平台,有可能促进更多创新的出现。由于AI领域是学术界和产业界结合最紧密的地方,这个方向的影响也不能小觑。
当然,上述讨论只是些假想。毕竟产业还在发展初期,机会很多,变数也很多。
参考:
1.Thierry Moreau(VTA architect), Tianqi Chen(TVM stack), Ziheng Jiang†(graph compilation), Luis Vega(cloud deployment)“VTA: An Open, Customizable Deep Learning Acceleration Stack”,https://tvm.ai/2018/07/12/vta-release-announcement.html.
2. 陈天奇,“VTA: 开源深度学习芯片栈”,https://zhuanlan.zhihu.com/p/39635145
3. Thierry Moreau, Tianqi Chen, Ziheng Jiang, Luis Ceze, Carlos Guestrin, Arvind Krishnamurthy, “VTA: An Open Hardware-Software Stack for Deep Learning”, https://arxiv.org/abs/1807.04188
- END-
题图来自网络,版权归原作者所有
本文为个人兴趣之作,仅代表本人观点,与就职单位无关