OURS谭章熹:开源RISC-V指令架构与AI芯片 CCF-GAIR 2018

2019-03-13 19:39

  雷锋网按:2018 全球人工智能与机器人峰会(CCF-GAIR)在深圳召开,峰会由中国计算机学会(CCF)主办,雷锋网、香港中文大学(深圳)承办,得到了宝安区政府的大力指导,是国内人工智能和机器人学术界、工业界及投资界三大领域的顶级交流盛会,旨在打造国内人工智能领域最具实力的跨界交流合作平台。在7月1日,峰会的AI芯片专场上,AI芯片领域的专家和业内人士们齐聚一堂,对AI芯片的未来展开了深入的探讨。

  其中,OURS创始人兼CEO谭章熹在会上做了《开源RISC-V指令架构与AI芯片》的发言,他指出,RISC-V作为软硬件接口的指令架构,对AI芯片提供了非常重要的基础。OURS作为RISC-V非常直接的参与者,将很快推出开源AI芯片。这家位于美国硅谷的AI芯片初创公司未来或将成为AI芯片领域极大的变量。以下是谭章熹在CCF-GAIR 2018上的演讲全文,雷锋网在不改变原意的基础上进行了编辑:

  AI芯片是最近非常热的话题,AI芯片并不能说是非常新的课题。在历史发展来讲,至少发展了三代。接下来我们回顾AI芯片发展的三大历史阶段。

  ·第一,1950-1960年代,Rosenblatt最早发现神经元Perceptron,他发明这个东西以后做了一个模拟计算的计算机,这是第一代模拟计算机Mark 1 Perceptron,可调电位器模拟可编程参数。XOR很难实现,一段时间后变得不太流行。

  ·第二,1980年代末到1990年代初,算法发现关于Back Propagation,对模型进行训练,那时候很多人做语等方面的AI研究,网络模型基本是2-3层。由于出现Back Propagation,所以出现了很大的计算量需求(用于模型训练),当时的计算机并不是非常强大。那时候很多人说自己做计算机用于加速AI训练。当时主流AI是Symbolic AI,同时使用Lisp/Prolog编程。网络大小是2-3层左右,比较有代表性的是1985年推出的Connection Machine,每一代有不同的改进。主要应用是做训练的,包括Symbolic AI。

  ·第三,2010年开始的深度学习,网络大概是3至3层以上,摩尔定律遇到瓶颈,难以通过工艺实现性能的提升。大家突然对定制化AI芯片有了非常大的兴趣。代表计算机还不太清晰,这里省略五六十家AI创业公司。

  随着三代AI芯片发展下来,每一代的发展都能学到一些东西,这是我个人总结出来的几点:

  ·第一,AI的计算很重要,但不要忽视缓存、内存系统架构,你需要有足够的容量。容量大了以后,必须对动态内存进行缓存。如何设计片上内存,用分布式设计的效率并不是很高,就像我们盖房子似的,内存架构设计有很多,并不是只适用于一种软件算法。

  ·第二,软件非常重要,没有软件就没有AI芯片。芯片先完成,但不停的更新软件算法。99%的工作是软件、开发工具SDK,我们在不断的做训练。软件随着算法发展的速度,每6个月会出现新算法。当你做芯片时,要考虑到硬件是否适用未来6个月的算法,这一点非常重要。这么多年下来,大家对算法的实现通常情况是用手工方式,效率非常高,高于自动生成的100倍,大概是两个数量级的效率。坏处是手工做,对算法的要求非常高。现在你看到Tensorflow,就是为了提高编程效率, 但其核心实现相当复杂。

  ·第三, ALU的性能通常描述是多少TOPS,例如每秒可以做多少乘法。实际AI芯片是随着数据的存储和数据流动,ALU单元能够变成百分百能工作的时候并不高,memory的存储也是同样的道理,只有小部分缓存是活动的。很多时候说如何提高ALU设计利用率和缓存架构问题。

  ·第四,第三代AI芯片出现,摩尔定律基本走到尽头,我们遇到物理极限,新工艺越来越昂贵。相反Amdahl定律,(它谈到的是串行和并行关系):虽然很多部分可以做并行化,但总是有很大一部分的程序还是串行执行的,通常串行部分之星效率决定了系统性能。虽然现在摩尔定律失效了,Amdahl定律依然存在。

  现代AI芯片架构,通常会选用CPU中央处理器+AI加速器的方式,通常移动方案我们会选用ARM处理器,服务器用得最多的是Intel。接口是通用的,随着CPU的定义,AXI是ARM的接口标准,PCle是英特尔本身控制的。

  案例:Google TPU,这是第二代TPU,把这个东西挂PCle上,作为加速器的方式存在。很多人认为Google靠着围棋TPU战胜人类是一个巨大的创新。从计算机系统架构角度来讲,这个想法并不是Google最先提出的。1992年时,西门子发明Machine Synapse-1,这是可以花钱买到的机器。它的架构和现在Google看到的架构非常像,挂在企业处理器上。就AI芯片来讲,对于计算机结构来说没有什么是新的。

  90年代,随着语音应用的出现,出现很多神经计算机、加速器,没有获得成功。现在我们用得比较多的是GPU,回顾历史,90年代专用neurocomputer是做Back Propergation,出现了很多专有计算机。1996年,英特尔推出MMX扩展指令集,这个拓展指令集当时放在CPU里,完全跟CPU集成起来,主要用于做视频编解码。由于当时英特尔使用的工艺,其微处理器工艺远远好于其他公司,当它发明MMX后,MMX本身有一定的并行计算能力,可以用于这个训练。加上良好的工艺和处理器技术,可以解决很多神经网络训练问题。随着英特尔CPU出现,人们发现很多语音算法可全部跑在英特尔处理器上,(完全不需要专门设计的神经网络计算机),这导致了当时专用的nerocomputer没有获得成功。

  GPU是比较有意思的东西,开始的发展在NeuroComputer之后,当时用于图形、3D游戏,把算法固化, 有一定浮点计算能力。2001-2005年,随着图形的发展,出现了可编制Shader。新语言是CG,每一个像素点可以进行编程,非常简单的编程以及非常简单的计算。当时有人问这个东西(pixel shader)是否可以用于通用计算,答案是可以的,但有很多限制。2006年NVidia随着Geforce8800的推出,发明了CUDA可编程框架,这是最早的GPGPU的原形。当然,除了CUDA,也出现了其他一些的GPGPU编程环境,如opencl。到现在为止,真正用于做神经网络训练、适用新算法的,在服务器端是GPU,没有更新的东西出现。

  总结,我们看到90年代GPU的成功,主要由于编程框架对AI芯片是非常重要的。NVidia因为做了CUDA,所以有了GPGPU。用一般编程来做,不需要用Machine的模型。所以软件架构对AI来说是非常重要的模型。

  提到软件,我们要提到一件事,软件和硬件的接口,这是我们现在所说的指令集、指令架构例如MMX,它也是指令架构。现在的就指令架构有几个问题:为什么英特尔不能在手机、平板处理成功?现在有99%平板手机是ARM市场基本是V7和V8架构为基准;为什么ARM不能在服务器上成功?因为英特尔99%的服务器、笔记本用的是AMD64指令架构(其中超95%由英特尔生产);为什么IBM到现在为止还在销售非常老旧的大型机?美国报税系统也是大型机。IBM360是一款经典的大型机,是现在拥有最古老的指令架构,将近50年历史。当年阿波罗登月用的就是IBM360,现在还在使用。

  为什么有这些情况出现,是由于指令架构是软硬件非常重要的接口,如果我们要做AI芯片,指令集是避免不了的事情。

  SoC系统架构:这是NVidia Tegra SoC,首先有应用程序处理器,里面用的是ARM、图形处理器,像NVidia CUDA,我们还有无线电DSP、音频DSPs、安全处理器、电源管理处理器等。这里有很多处理器,每个处理器都在使用自己的指令架构,每个指令架构从软件角度来讲都过于庞大。由当你做SoC,很多CPU、GPU都是从IP的方式买来的,每个IP都有自己的专用平台指令集。有时候不同的厂商会开发不同的指令架构。一个商业SoC下来,里面可能有数十个指令架构,不同的指令架构有不同的软件系统。

  这是一个非常复杂的事情,看AI芯片也涉及指令架构问题。我们回顾一款经典AI芯片,这是Berkeley的芯片,当时的想法是Cray是世界上一个向量计算机,用向量处理器、标量处理器、CPU,当时之所以这么做的原因是我们知道超算是非常干净的编程模型。这是我们最后做出来的45兆、720兆,大概16.75mm^2的处理器。我们用到32-bit MIPS CPU核。我们考虑CPU核有争论,是购买还是自己做?那时候MIPS有R3000,它有协处理器接口,当时没有软核,也没有逻辑综合。所以我们决定自己做,这不光是实际客观原因,也包括技术原因。我们用到向量处理器,它对Cache的影响非常大,处理器的接口效率非常低。商业处理器,所谓的Glue Logic非常庞大,从面积、功耗来讲都不是非常有效率。非常重要的一点是我们没有完整的系统模拟器,当我们做经典AI芯片时,这个芯片是为了语音做的,里面遇到现在我们遇到的所有问题。现在我们做AI芯片时,同时可以问这个问题,相信这些问题是存在的。这里的目的是想给大家一个概念,为什么CPU和指令架构非常重要,不光是AI加速器,处理器本身也是非常重要的。

  2000年左右有以Linux为代表的开源软件,开源软件和开源标准获得非常大的成功。网络界出现Ethernet、Many、TCP/IP,有很多开源实现,也有私有实现。现在操作系统有开源的标准,如Posix系统,Linux、FreeBSD、Windows也是遵循它。编译器是SQL,开源实现MySQL和PostgresSQL,私有实现Oracle和M/S DB2。图形标准是OpenGL,开源实现Mesa3D,私有实现M/S DirectX。我们有指令集,同时有私有化实现。图形也是同样的道理,既然指令这么重要,可我们却没有开源指令标准。因为这个东西非常有用,所以还是出现非常多私有化实现,包括X86、ARM、IBM360。RISC-V Fit i n这个Table,是个开源标准,也有一些开源的实现。

  我们真正需要很多指令集吗?而且每个都靠花钱才能拿到的,这些指令必须是私有控制的吗?为什么不能有一个通用的且开放的免费指令集系统。RISC-V的诞生就是为了回答这几个问题。

  RISC-V的起源,在2010年左右,也可以说我们是和第三波AI同时起源的。当时我们为新项目选架构,我们看了所有可选的指令架构,例如MIPS、SPARC和X86。Berkeley,当时主要考虑的是X86和ARM比较多,但都有很多问题。我们知道ARM现在从V7到V8,现在发明到V8.1,加了很多指令,有很多指令的拓展。这是ARM的指令架构,V8设计之初本来目的是有一个干净的指令架构,可是实际在每一版本的迭代过程中都会ARM都会增加很多新功能,它会变成一个“胖子”,而且是越来越胖。据说现在做到V9。

  RISC-V起源故事:当时我们看了X86和ARM,X86是不太可能,IP问题,实现复杂度太高。我上大学时,教授说等你毕业时,英特尔会加上两三千条指令。现在看来确实如此。当时ARM几乎不可能,也没有推出64位处理器,同时具有很多IP法律问题,复杂度也不低。虽然它号称是Advance RISC Machine,但实际上是个复杂的CISC machine。所以我们开发了新的,也就是大家所知道的RISC-V指令架构。四年后(2014年时)发布第一个公开标准,我们在Berkeley做了很多流片,从第一天诞生起,它是为了加速器的研究所设计的。第一天就是为了支持加速器和AI。正确读法应该是RISC-Five,而不是RISC-V。这在Berkeley发展了5代,第1代最早,在80年代初。SOAR(RISC-3)是大家不太熟悉的,SPUR(RISC-4)有很多大佬是这里毕业的。2011年是RISC-V。

  RISC-V有什么不同?首先,它非常简单和非常干净的设计。用户指令和特殊指令分开,它是模块化的,可以做自己定制化的模块和扩展,有足够的指令空间做定制化。它是稳定的架构,当我们定了RISC-V本身的基准指令后,不会再有变化。要想增加新的指令,可以通过扩展子集实现,而不是加强新版本,这对稳定性来讲非常重要。

  为了维护RISC-V的标准,我们成立了RISC-V基金会。现在也有中国企业在其中,目前这个基金会里大概有150家公司。所有的大公司,除了英特尔和ARM以外 (直接竞争手段),其他都在里面。

  总结,RISC-V作为软硬件接口的指令架构,对AI芯片提供了非常重要的基础,它有非常好的标准指令子集,有编译器、Linux支持,它没有任何法律的问题。这样的灵活性使得自由修改AI扩展是非常容易的事情。OURS是一个创业公司,我们的目的是使用RISC-V让所有企业以最低的门槛使用AI+RISC-V芯片。我们是RISC-V非常直接的参与者,有多次RISC-V芯片流片的经历,我们很快会推出基于RISC-V的开源AI芯片。算法很重要,软件很重要,对特殊领域的支持,比如Domain-Specific Knowledge才是AI芯片的根本。返回搜狐,查看更多