AI芯片设计与开发概览
专栏:科技资讯
发布日期:2018-12-10
阅读量:5455
0. 引言 AI发展及其意义: 学术界和产业界对于人工智能的研究由来已久,但直到近期的2006年,伴随着CNN、GPU加速和海量数据,人工智能才伴随着机器学习(Machine Learning)/深度学习(Deep Learning)的分支再次起飞,这一次,飞到现实应用。谷歌AlphaGo打败人类最高棋手使得人工智能引起普通民众的注意。 深度学习为现实世界普遍存在复杂非线性问题提供了一种通用框架——不是写程序,而是通过框架和大量的数据经过高性能计算进行求解(训练和预测)。深度学习更加接近人类智能,并且有人类智能无可比拟的一些优越性,这为从现实世界已有的大量数据中挖掘价值提供了有效的手段。 本文: - 分析人工智能在具体实现上的3个特点 - 探讨AI芯片设计和开发的6个挑战,以及相应的产业界方案、发展趋势。 1. AI实现的特点 1.1 AI属于典型的计算密集型应用 AI以密集运算为主,典型的是向量点积,基本单元是乘累加(MAC),动辄在TFLOPS量级;且对于数据带宽要求高,相应的运算延时要求主要在应用级,不像CPU一样敏感。 典型的通用处理器以ALU为中心,构建外围控制、中断和异常处理电路;为了高性能处理单元能够填满流水和快速运转构建乱序和预测、cache等机制,为了对于事件快速响应。然而运算能力不强,并且整个芯片运算所占的面积比重也很少。 高性能运算的一个极端情况是全硬件并行实现,对于10点的点积运算运用多个MAC并行计算;所以计算速度快但是面积消耗也很大。 1.2 AI要求芯片具有灵活性 AI算法以CNN、RNN等为主干,分支众多;同样的算法体制,其具体参数(层数、宽度等)也不一样;AI算法本身在不断的演进;AI算法优化的一个方向是稀疏矩阵处理、低运算精度实现高精度类似的性能。 然而,芯片设计的投入高、周期长、风险高;要让芯片开发能够应对算法多样化和快速演进的挑战,需要一款芯片能够应对不同类型的应用需求,这对于芯片的灵活性提出挑战。 1.3 AI芯片设计跨越算法和软硬件 鉴于上面的两个挑战,AI芯片设计从算法开始,经历架构设计、逻辑设计和验证、物理设计和验证。对于芯片开发和应用方法,乃至处理器架构和编程提出了挑战。 2. AI芯片开发挑战、现状和趋势 2.1 基于算法框架实现算法和芯片设计的接口 AI芯片的涉及到算法、软件、硬件三个专业方向,为了有效的分工和协作、实现相互之间的可移植性,界面的划分和定义很重要。 应用层面见到的无非是训练和测试数据,模型选择和基本参数,理想情况下解决方案可以自动有效完成训练和预测,正如当今没有体系结构和编程语言基础的的用户可以快速掌握和使用office软件。而下层实现当今深度学习的主流算法,并且具有一定的可配置性和可调试性。这部分在业界有多个算法框架,典型的如谷歌的TensorFlow、亚马逊的cafee等,也有在这些框架之上构建的封装更好的平台如Keras。 框架的相互交互和底层实现多种多样,平台不同实现方案也不同。一个有益的工作是定义中间层格式(IR),IR的一个重要基础是核心算子。这里有ONNX、NNVM等。 2.2 AI芯片架构 前文提到,AI芯片密集型运算和可编程性的要求,普通处理器不能够有效应对,需要大规模并行计算。 FPGA和GPU相对于普通的CPU和DSP更加折中实现并行性和可编程性。然而,FPGA核心是LUT,实现相同功能所需的器件面积远大于ASIC,同时运行频率受限。GPU是传统技术中最适合可编程并行运算的,但是GPU本质上是为了图像处理构建,架构与通用并行计算仍然有不少的距离;虽然GPGPU针对通用计算做了一些优化,但是仍然有不少的差距。 通用可编程并行计算最适合的是流处理器和可重构处理器。早些年在寻求突破传统处理瓶颈的时代不少学术和产业界项目做过尝试,但是当时对于高性能计算的要求并不普遍、不迫切所以没有有效的发展。随着AI对于计算的需求,这些技术正如深入学习算法走上算法舞台一样,走向架构设计舞台。 具体来说,很多原本只是探索的技术会走上AI架构设计的舞台,传统的程序优化技术会普遍应用的架构设计。如深度流水、并行计算、数据局部性原理相关的局部存储、延时隐藏、循环展开等。后面会有专门的文章介绍。 2.3 层次化实现和验证 AI芯片的大规模和并行特点,导致AI芯片的设计复杂并且有很大难度:展平式寻优策略在计算机算法上是NP问题,芯片设计每个流程的运行时间也很长,因而短时间找到最优方案并实现极具挑战,所以需要使用分治策略分层实现,以寻求现实的次优解。 分层体现在系统设计的处理单元(processing elements)-簇(cluster)-子系统-SoC芯片;体现在结构设计关注关键参数-逻辑设计关注微架构和周期一级-后端设计关注具体频率sign-off,不同的阶段有不同的关注点,通过上层设计明确关键参数,逐步往下渐进明细。相应的验证也是如此,通常架构设计明确主要参数和主体运算周期,逻辑设计除了关注具体时序,很多的是保证与算法设计bit对准来验证行为,而后端验证主要关注微架构的时序是否能够实现。 这方面主要是开发流程的规划和整合,不同的IP供应商会提供C++/SystemC模型供架构设计仿真,仿真平台有纯SystemC,也有Synopsys PA(集成了不少常用模型和系统构建调试机制) 2.4 算法和软硬件协同设计 传统芯片顶层设计中软硬件划分是一个重要主题。而AI芯片设计还需要关注算法,比如:卷积核的运算需求,数据存储和传输需求;卷积核的运算协作和数据交互需求等。以及引言部分提到的利用低精度运算实现类似高精度运算的算法精度,利用矩阵稀疏性简化运算同时保证算法性能等。这些优化本质上源于算法,但是需要芯片设计配合,但其在架构及优化对整个芯片PPA的优化立竿见影。对于熟悉传统芯片设计流程的芯片团队式巨大的挑战。 这里主要是算法优化方案在算法和模型层面,涉及到C/Python/SystemC。 2.5 应用开发工具链 AI芯片的大规模和并行特点,导致AI芯片的开发也极具挑战。以编译器为例,运算单元或者cluster内部涉及到并行编译和调度;整个算法在芯片上的实现也是很难展平开发,更多的是运算单元或者cluster为单位,根据数据流特征进行划分和映射,以及相应的通信和存储配备设计进行分治处理。 本质上当今的算法描述语言C/Python只描述算法的逻辑功能,不具备时空信息,不具备存储和传输信息,所以很多算法是先经过同时熟悉芯片架构和算法的工程师的规划,再通过工具链预定的指令指示工具链处理。这方面通用意义上有StreamC/KernalC,产业界NVIDIA的CUDA针对其GPU比较成功,谷歌针对TensorFlow的XLA,华盛顿大学针对GPU的TVM。更为普遍的使用LLVM的开放型构建自己的工具链。但目前工具链的自动化和性能与实际要求差别较大,很多大规模案例会有工具链和手工优化结合,方案供应商多以SDK形式提供,不同的应用提供不同的SDK,且SDK的版本不断更新。 大规模并行计算的调试和跟踪也是一个挑战,传统意义上的单步调试需要协调不同处理器核心之前的状态;而跟踪除了核间协调还需要dump大量的实时运行数据,这需要占用大量的片上带宽和芯片接口资源,还涉及到数据压缩和可视化。这方面比较典型的是UltraSoC。 2.6 产业格局 算法设计、芯片设计、应用设计、系统方案供应商、应用方案供应商、具体企业和个人用户是AI潮流的相关者。但是由于产业尚在迅速发展,尚未成熟,尚不能形成明确的的专业分工。并且一体化设计和应用也是不同方案差异化竞争力的体现,是构建技术壁垒的一种重要途径。 在这种环境下,AI的从业者大体可以分为供应商、用户、供应商和用户三种。前者主要是传统的芯片设计公司如英特尔、华为和新兴独角兽公司。后者主要是大的互联网公司,他们是AI的企业用户主体,由于业务体量的需求开始逐步构建自己的AI芯片方案,如谷歌、BAT等。中间的是中小用户,需要并认可AI的价值,但尚不具备构建AI芯片和全栈方案的资金和技术实力,需要依附专门的AI公司,或者在互联网公司的云端方案构建自己的方案。 笔者接触到的行业前后两类的公司差别很大,传统的芯片设计公司具有很强的IC设计开发能力,但是不能够很好地理解AI应用,因而设计的芯片针对性欠缺;同时由于过多的传统芯片设计包袱,不能够果断地拥抱新的芯片设计架构和方法学。互联网公司的芯片设计团队芯片设计能力略有欠缺,但是可以很好的理解应用,拥抱新的架构和方法学;另外,由于目前AI尚不能明确分工的特点,互联网公司的芯片设计和应用可以有效协作,填补设计流程上不能自动化的挑战,尽早实现AI芯片的价值,即使设计可能不是很优秀。所以,哪一派最终能够胜出尚不明了。 上一页:物联网和区块链:卓有成效的组合?
下一页:人脸识别的流程及主要技术
说点什么
发表
最新评论
|
点击开启品牌新篇章