▌三、应用和架构创新是发展人工智能芯片的必由之路 我们说,应用确实很难,但是现在顾不了那么多,我们做芯片的人一定要先想到架构是什么,因此架构创新很重要。从感知、传输到中间的处理,一直到后面的传输和执行,这是发展过程中大概躲避不了的基本架构。 感知通过传感器,执行通过执行器,中间的传输有很复杂的网络,不管你处理多复杂的问题,大概的基本逻辑都在这,关键是中间这一块,所谓智慧处理的根本架构是什么?我们不知道,因为我们不知道人是怎么想问题的,所以我们只能用今天计算机的方式来想,大概是什么样的结构。有系统软件,有处理器,有存储,我们只能这样积极地模仿它而已。 不可避免地,我们要碰到这样一个基本定义,多输入多输出的系统,高度复杂、灵活的互联结构,多任务且高度并行化的运行系统,多处理单元系统,并行分布式存储,并行分布式软件,分布式处理与集中控制系统等等。 通过一个平时处理事情的简单流程来看看,我们是否真的能够按照自己能够接受的逻辑来思考一下整个流程? 当我们看到一个人,先看他长得什么样子,然后查查我的记忆,看我到底认不认识他。如果我没见过他,我要去认识一下,交换一下名片,先问下“您是什么单位的”,然后握握手,交换一下名片,然后就算是认识了,加深一下印象,再回到最开始。 在这个过程当中,大量的内容需要计算,计算无处不在。所以我觉得计算本身是我们架构创新的基本前提。为什么 GPU 在今天能够大行其道?就是因为它有很好的计算量,别人赶不上它。 但是,由于计算量如此丰富,我们又不知道人脑是怎样完成计算的,我们有的只有现在的芯片和软件,因此我们只好通过我们熟知的方式来构建一个所谓的能够具备智慧处理能力的芯片。这就一定会包含两个部分:智能软件和智能硬件。 智能软件应该包含这样几个方面的内容:自己学习的能力;形成知识和经验的能力;持续改进和优化的能力;再生和组织的能力;思维逻辑推理的能力;以及作出正确判断和决策的能力。 这些都不是芯片做的事情,而是软件做的事情,所以软件的作用在所谓的智慧芯片中起的作用一点也不比芯片差。 相反,芯片更多的是提供高性能计算平台,多任务并行计算能力,足够的带宽和吞吐量,极高的能量效率,灵活高效的存储,寻址功能,以及实时动态的功能变换能力。 我们经常说,实现智能的核心其实是软件,不是芯片,芯片不过是支撑智能的技术而已。因此,我们要改变下思路:做芯片的人,特别是做 AI 芯片的人,要把软件放在足够高的位置,因为它才是真正实现人工智能的根本点。 在这种情况下,我们希望硬件能够跟着软件不断变化,所以这里提出了“软件定义芯片”的概念,也就是 Software defines Chip(SdC)。芯片如果不能被软件定义,那你是做不好的。 我们早在 10 年前就提出了这个概念,但是阳春白雪,和者盖寡,知道的人并不多。但去年有一个很有趣的现象,DARPA 在电子振兴计划(ERI)中提出了三个支柱:材料、架构、设计,用于支撑美国 2025 - 2030 年之间的国家电子设计能力。这其中每一个方向都设置了一个课题,其中一个课题在架构中提出了软件定义硬件的概念,也就是 Software defines Hardware。 我摘录了中间的一段话:所谓要建立运行时可以实时重新配置的硬件和软件,他们具备像 ASIC 一样的性能,而没有牺牲数据密集型计算的可编程性。 那什么叫 runtime(实时运行时)呢?它可以让你的硬件结构可以跟着软件在变化的时候是 300~1000 纳秒,也就是硬件跟着软件变化,硬件功能和架构随软件变化而变化,这是一个重要特点。我只能笑一笑说,这个工作我们 10 年前已经完成了,远远走在了美国同行前面。 大家可能觉得 FPGA 早就可以这样做了,但我认为 FPGA 不行,为什么呢?我这里要指出 FPGA 的十大缺陷,希望使用 FPGA 的人不要在意:
我只列出了 10 个缺陷,从这些缺陷里大家可以看到,你可以用 FPGA 做一个简单的验证系统,但用 FPGA 做一个实用系统,对不起,恐怕很难。 所以我们说 FPGA 无法承担 SdC 的重任,想要做到软件定义芯片非常困难。 那什么样的系统可以完成我们所说的 SdC 呢? 我们应该从最理想的计算硬件架构上去考虑。上图左边给出了一个软件,右边是一个与其拓扑结构完全一致的硬件结构。当然,我们没有考虑硬件本身的开销,这样的计算效率一定是最高的,我想这一点不用怀疑。 可惜的是,软件可以无穷大,硬件总是有边界的。因此我们只好把软件分成若干块,一块一块地搬过去,比如第一个模块搬过去,运行完后,赶快改变它,然后执行第二个模块,然后按照它的任务依赖性把第三个、第四个、第五个模块.....依次搬过去,直到完成。 显然,这样一个逻辑发展就要求我们的硬件结构和它的功能必须是动态的,随时可以改变,这就是软件定义芯片的基本概念。 问题是怎样才能很快去实现它呢?这是工作难点,我想我们在过去的 10 年当中,就是为了解决这个问题。 这样的一种计算架构,实际上是专用集成电路当中非常经典的一种架构:数据通道+控制单元。 我们可以看到,控制单元根据软件的要求,将划分后的任务逐块地送到数据通道中去执行,同时数据通道根据要求来配置计算单元并完成执行。道理很简单,问题是要创建完全可重构的数据通道和完全可编程的控制单元,如果能够做到这两点,那这就是软件可变化的。 这个与经典计算架构是有差别的,我把经典计算模式与我们现在的可重构计算模式做了一个比较。大家可以看到,传统架构是冯诺依曼等效架构,它是刚性的;而可重构计算是柔性的,它是一个函数化的应用结构。 经典计算模式当中,它是应用适应计算,而我们恰好倒过来,计算架构适应应用。经典模式当中,一个任务有一个处理软件,而在我们新架构当中,一个任务有多个等效处理软件。 在经典架构的处理过程当中,软件不变,而在现在的架构当中,硬件和软件都在动态地、选择性地改变。经典架构采取的是高度复用的方式,原因是需要降低成本,而我们这边采用的是冗余应用。 这样一种创新是不是改变了传统的计算模式,比如冯诺依曼体系结构?很遗憾,告诉大家,我们还是在冯诺依曼体系结构当中,没有改变,但是它却有很大不同。 要改变冯诺依曼体系结构不是闹着玩的事情,有人说,“我已经改变了这个模式,我做出了非冯计算结构”,我基本会跟他说,“你没弄明白什么叫非冯结构”。 我们利用这样一个结构,也就是软件定义芯片、可重构硬件这样一种结构,来实现 AI 芯片的时候,我发现它有独特的优势,我可以把硬件按照 AI 算法来不停地变换,以达到最佳计算效率。 从 AI 的应用着手,定义我们所要采用的深度神经网络,然后再决定硬件功能,这样的一种结构,我们认为是最佳的一种方式。当然,最开始我们并不知道这一点,我们只是在无意当中尝试了这里面的基本计算单元。 上图左边有一个阵列,每个方框里面都有
PE,基础计算单元的架构是什么?我们这里面分成两种,一种叫通用的,一种叫超级的,这两种方式代表了不同的计算内容,包括卷积计算、全连接计算、池化等等。我们可以通过定义的方式,把每个
PE 的功能随时进行定义,来完成我们需要的网络运算。 不仅如此,我们还可以把一个阵列上众多的 PE 通过定义方式不断改变,来适应不同层面的计算内容。通过这种方式,也可以大大提升我们系统能效。 在过去的两三年中,我们做了这样几款芯片:Thinker
- Ⅰ ,Thinker - Ⅱ,Thinker - S。Thinker - Ⅰ 在去年的国际会议上获得了大奖,在今年的 ISCC 上我们对
Thinker - Ⅱ 做了相应的介绍,Thinker - S 被 MIT Technology Review 报道了。 Thinker - Ⅱ 在做人脸识别的时候,只需要 6 ms,而且功耗极低;Thinker - S 在用于语音应用的时候,只需要 0.3 mW 的功耗,在 MIT Technology Review 的介绍当中,一颗 3A 的电池可以用一年的时间。 ▌四、总结 最后总结一下。虽然我们做了 AI 芯片,但是从我内心来说,我从来不承认我是做 AI 芯片的。上图是 Gartner 的 Hyper Cycle,我把跟 AI 相关的内容都用红线标了出来。可以看到,AI 基本还在第一个峰波上,也就是说,它还处在第一轮的发展过程当中。AI 现在太热了,甚至我们的媒体在推波助澜的过程当中起了一些不太好的作用,我认为现在 AI 是过热的。 最后我想提几个问题。 因为还不存在适应所有应用的通用算法,所以应用领域的确定成为 AI 芯片发展的一个重要前提,但非常遗憾,AI 的杀手级应用到目前为止还没有出现。因此,AI 的发展还有很长的路要走。 但这不是主要的,最重要的问题是,能否出现像通用 CPU 那样独立存在的通用 AI 处理器?如果存在,它的架构会是什么样子?如果不存在,那我们今天以满足特定应用为主要目标的 AI 芯片恐怕就只能做 IP 核了,早晚有一天会被人家吸收到 SoC 当中去,那 AI 芯片公司将何去何从? 最后,两到三年内,我们一定会碰到一个低潮,这是不可避免的,今天的一部分,甚至是大部分的创业者将成为这场技术变革当中的先烈,但我很钦佩大家。 毫无疑问,这将是 AI 芯片发展过程中,最令人钦佩也最令人动容的伟大事件。 |