Jeff Dean:机器学习在硬件设计中的潜力!
为什么芯片设计要花这么长时间?芯片设计周期能否加快?芯片可以在几天或几周内设计出来吗?这是一个非常雄心勃勃的目标。近十年来,机器学习的发展离不开系统和硬件的发展,现在机器学习正在推动系统和硬件的变革。
Google 在这一领域处于领先地位。第 58 届 DAC 大会上,谷歌 AI 负责人分享了 Jeff Dean 《机器学习在硬件设计中的潜力》。他介绍了神经网络发展的黄金十年、机器学习如何影响硬件设计以及如何通过机器学习解决硬件设计中的难题,并展望了硬件设计的发展方向。
他的演讲重点是Google如何利用机器学习来优化芯片设计流程,主要包括三个阶段:架构搜索和RTL综合、验证和布局布线(placement androuting)。在架构搜索阶段,Google提出了FAST架构的设计来自动优化硬件加速器。在验证阶段,他们认为使用深度表示学习可以提高验证效率。在布局布线阶段,他们主要使用强化学习技术进行优化。
演讲内容如下:
1
神经网络的黄金十年
让计算机像人类一样智能一直是人工智能研究人员的梦想。机器学习是正在取得长足进步的人工智能研究的一个子集。现在人们普遍认为,对计算机进行编程使其变得足够“聪明”以观察世界并理解其含义比直接将大量知识手工编码到人工智能系统中更容易。
神经网络技术是非常重要的机器学习技术。神经网络这个术语出现在 20 世纪 80 年代左右,是计算机科学术语中一个相当古老的概念。尽管它在当时并没有产生太大的影响,但一些人相信这是正确的抽象。
在研究生院时,我写了一篇关于神经网络并行训练的论文,我认为如果可以使用 64 个处理器而不是仅一个处理器来训练神经网络,那就太棒了。然而,事实证明我们需要大约一百万倍的计算能力才能真正完成它的工作。
2009年左右,神经网络技术逐渐流行起来,因为我们开始拥有足够的计算能力,使其能够有效地解决现实世界的问题和其他我们不知道如何解决的问题。 2010 年代至今是机器学习取得重大进展的十年。
是什么导致了神经网络技术的革命?我们现在所做的很多工作与 20 世纪 80 年代的通用算法基本相同,但是我们有越来越多的新模型、新优化方法等,因此它们工作得更好,并且我们有更多的计算能力来配合更多的训练这些模型基于更多数据,使我们能够使用更大的模型来更好地解决问题。
在探讨设计自动化的各个方面之前,让我们先看一些现实世界的示例。首先是语音识别。在使用深度学习方法之前,语音识别很难实现实际应用。但后来机器学习和神经网络技术的运用大大降低了单词识别的错误率。
几年后,我们将错误率降低到5%左右,使语音识别更加实用。现在,在未连接到互联网的设备中,我们可以实现仅 4% 左右的错误率。此类模型部署在人们的手机中,帮助人们随时随地识别自己的语音。
计算机视觉方面也取得了巨大进展。 2012 年左右,Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 在 ImageNet 比赛中首次使用 AlexNet。失误率显着降低,当年他们获得了冠军。
在次年的ImageNet竞赛中,几乎所有参赛者都使用了深度学习方法,研究人员进一步抛弃了传统方法。其中,何恺明等微软研究人员在2015年就提出ResNet可以进一步降低错误率。
当时斯坦福大学的研究生 Andrej Karpathy 正在帮助举办 ImageNet 竞赛,他想知道如果手动完成这项艰巨的识别任务,错误率会是多少。有数千个类别的 40 个狗品种,您必须能够看着照片并说:“哦,那是罗威纳犬,而不是罗威纳犬或其他品种。”经过一百个小时的训练,他将错误率降低到了 5%。
这是一项非常艰巨的任务。将计算机识别错误率从2011年的26%降低到2017年的2%是一件很棒的事情,计算机以前不能识别的东西现在可以识别了。自然语言处理、机器翻译和语言理解领域也正在上演类似的故事。
此外,开源框架确实让全世界很多人都能够使用机器学习技术,TensorFlow就是其中之一。
2015 年 11 月左右,我们开放了 TensorFlow 和工具供 Google 内部使用。 TensorFlow 对世界产生了重大影响,下载量约为 5000 万次,当然还有许多其他框架出现,例如 JAX、PyTorch 等。
世界各地的人们正在将机器学习用于各种令人惊奇的目的,例如医疗保健、机器人、自动驾驶等,所有这些都通过使用机器学习方法来了解周围的世界来推进他们的领域。 。
2
机器学习正在改变计算机的设计方式
机器学习研究社区的许多成功都来自于使用更多的计算能力和更大的模型。更多的计算能力促进机器学习研究重要成果的产生。深度学习的发展正在改变计算机的结构。现在我们想围绕机器学习计算类型构建专用计算机。
近年来,我们在 Google 做了很多类似的工作,其中 TPU(张量处理单元)是我们构建专为神经网络和机器学习模型设计的定制处理器的一种方式。
TPU v1 是我们第一个旨在推理的产品,当您拥有经过训练的模型并且您只想从已在生产中使用的模型中获得预测时,它非常有用,它已经在神经机器中使用翻译搜索, AlphaGo-竞赛和其他应用程序。
后来我们也做了一系列的处理器。 TPU v2 旨在连接在一起形成称为 Pod 的强大配置,因此其中的 256 个加速器芯片通过高速连接紧密连接。 TPU v3增加了水冷单元。
TPU v4 Pod不仅可以达到ExaFLOP级别的计算能力,还可以让我们在更大的模型训练中达到SOTA的效果,尝试做更多的事情。
以ResNet-50模型为例,在8块P100 GPU上训练ResNet-50需要29个小时。然而,在 2021 年 6 月的 MLPerf 比赛中,TPU v4 pod 仅用了 14 秒就完成了训练。但我们的目标不仅仅是在 14 秒内训练 ResNet,而是利用这种强大的计算能力来训练其他更高级的模型。
可以看到,从前29小时到后14秒,模型的训练率提升了7500倍。我认为机器学习快速迭代非常重要,以便研究人员可以尝试不同的想法。
基于机器学习的计算方法变得越来越重要,计算机正在向更适应机器学习计算方法的方向发展。但深度学习有可能影响计算机的设计方式吗?我认为答案是肯定的。
3
机器学习缩短芯片设计周期
目前芯片设计周期非常长,需要数十人甚至数百人的专业团队花费数年的努力。构思、完成设计和成功生产之间的时间差距非常长。但如果将来只需要几个人几周的时间就能设计出一款芯片呢?这是一个非常理想的愿景,也是今天研发人员的目标。
如上图所示,芯片设计分为四个阶段:架构探索→RTL综合→验证→布局布线。设计完成后,生产过程中需要进行布局布线(Placement & Routing)。有没有更快、更高质量的布局布线方法?验证是一个非常耗时的步骤。能否用更少的测试覆盖更多的测试项目?有什么方法可以自动化架构探索和 RTL 综合吗?目前,芯片架构的探索仅限于少数重要应用,但我们最终会扩大视野。
布局和布线
首先,关于布局和布线,Google于2020年4月发表了论文Chip Placement with Deep Reinforcement Learning,并于2021年6月在Nature中发表了A graphplacement method for fast芯片设计。
我们知道强化学习的一般原理:机器做出某些决策,然后接收奖励信号,理解这些决策的结果,然后相应地调整下一个决策。
因此,强化学习非常适合棋盘游戏,比如国际象棋、围棋等。象棋比赛有明确的输赢结果。当机器下棋时,总共有 50 到 100 步棋。机器可以根据最终的输赢结果来评估自己和对手整套棋步的有效性,从而不断调整自己的走法。提高你的国际象棋棋艺。
那么ASIC芯片布局的任务也可以由强化学习代理来完成吗?
这个问题有三个难点。首先,芯片布局比Go复杂得多。 Go 中有 10^{360} 种可能的情况,但芯片布局有 10^{9000} 种可能。
其二,围棋只有“赢”一个目标,但筹码布局却有多个目标。必须权衡芯片面积、时序、拥塞和设计规则等问题,才能找到最佳解决方案。
第三,使用真实奖励函数来评估效果的成本非常高。代理商实施特定的芯片布局计划后,必须评估该计划是否良好。如果使用EDA工具,每次迭代都会花费很多小时,我们希望将每次迭代所需的时间减少到50微秒或50毫秒。
使用强化学习进行芯片布局的步骤如下:首先从空基开始,使用分布式PPO算法(常见的强化学习算法)进行设计,然后完成每个节点的布局放置,最后进行评估。
评估步骤使用代理奖励函数,与真实奖励函数具有类似的效果,但成本要低得多。对该布局方案的评估可以在一秒或半秒内完成,然后指出可以优化的区域。
构建奖励函数需要结合几种不同的目标函数,例如线路长度、拥堵度和密度,并分别为这些目标函数设置权重。
如上图所示,布局优化采用混合方法。强化学习代理一次放置一个宏,然后通过力驱动的方法放置标准单元。
上图来自前面提到的 Nature 论文,展示了有关芯片架构的更多细节。
上图显示了 TPU 设计模块的布局和布线结果。白色区域是宏,绿色区域是标准单元簇。
图片左侧是人类专家完成的设计,从中我们可以看到一些图案。人类专家倾向于将宏放置在边缘,将标准单元放置在中间。人类专家需要6至8周才能完成此布局,线路长度为57.07米。图像右侧是智能代理(ML placer)完成的设置。耗时24小时,线路长度55.42米。违反设计规则的情况比人类专家略多,但几乎可以忽略不计。
可以看出,智能体并不像人类专家那样追求直线布局。为了优化布局,代理更喜欢弧形布局。我们也希望培训代理商能够有效地创造出一些优秀的布局。
为了实现这个目标,我们首先使用强化学习算法来优化特定芯片设计模块的设计,这需要经过数万次迭代;然后我们重复前面的步骤并在几个不同的设计模块上进行预训练。一组布局规则最终允许算法在面对以前从未见过的新设计块时提供布局解决方案。
预训练的指南有助于在推理过程中减少迭代并执行“空图像设置”。我们实际上还没有新的算法来优化这个特定的设计,尽管我们当然可以进行数百次迭代以获得更好的结果。
上图展示了不同方法的布局成本。蓝线代表在没有预训练的情况下从头开始训练策略的布局成本。绿线表示使用预训练算法对新设计模块的设计进行优化。 X 轴代表训练时间。可以看到,蓝线是训练了20多个小时后的。布局成本可以大幅降低,但实现融合仍需要一段时间。绿线只需要很少的训练时间即可实现较低的布局成本并快速收敛。
最让我兴奋的是红圈部分。调整你的锻炼前策略可以在短时间内达到相当好的布局。这种实现就是我所说的一两秒内完成芯片设计的设计。
上图更详细地展示了不同的设计。 y 轴表示线路长度成本(越低越好)。绿色代表使用商业工具的线路长度成本。可以看到,从浅蓝色(零布局)→蓝色(2小时微调)→深蓝色(12小时微调),线长成本变得越来越低。深蓝色一直比黄色线长更实惠,因为最佳布局是通过12小时的微调从其他设计中学到的。
上图中,左右两侧分别展示了从头开始训练的策略以及对预训练策略进行微调后的芯片布局过程。每个小方块代表宏的中心,空白部分代表为标准单元保留的位置。正如您所看到的,在右侧,宏从一开始就放置在边缘上,中间留了一大块空白。在左边,需要多次迭代才能形成这样的模式。
我们使用强化学习工具对 TPU v5 芯片的 37 个设计模块进行布局和布线。其中,26个设计块的设计和布线质量逊于人类专家,7个设计块的质量与人类专家相当,4个设计块的质量不如人类专家。我们现在已经将这种强化学习工具融入到芯片设计过程中。
总的来说,使用机器学习进行芯片布局和布线的好处包括:可以快速生成多个布局方案;即使上游设计发生重大变化,也能快速重新布局;它大大减少了开发新 ASIC 芯片所需的时间。和能量。
验证
下一步是芯片设计的验证阶段。我们希望用更少的测试覆盖更多的测试项目。验证是阻碍芯片设计速度的主要瓶颈。据估计,芯片设计过程中80%的工作量是在验证,而设计本身只占20%。因此,验证技术的任何改进都会产生重大影响。
Google 在 NeurIPS(神经信息处理系统会议)2021 上发表论文《Learning Semantic Representations to Verify Hardware Designs》,我们能否利用机器学习在更短的时间内生成覆盖更广泛状态空间的测试用例?
验证阶段的根本问题是可访问性。目前的芯片设计能否让系统达到所需要的状态?这个想法是根据当前的芯片设计生成连续的表示,以预测系统中不同状态的可用性。
我们可以通过RTL抽象出一张图像的芯片设计,然后利用基于图的神经网络来了解图像的特征,从而了解其对应芯片设计的特征,进而确定测试覆盖率和测试用例,它为我们提供了良好设计的抽象表示。
当然,如何将这种方法应用到实际的芯片设计中将是另一个重要课题。使用 RTL 生成图表示后,我们在图的神经网络中使用一种称为 Design2Vec 的技术来执行深度表示学习,以帮助我们进行预测。
目前芯片的验证过程需要大量的人力,比如查找错误、查找测试覆盖率的漏洞、分析和解决错误等,还需要几个流程周期,如上图所示。我们希望上述步骤能够自动化,自动生成新的测试用例来解决重要问题。
后来我们发现这个问题可以转化为监督学习问题。如果您之前完成了一系列测试并且知道这些测试覆盖了哪些测试点,则可以将这些数据用作监督学习中的训练数据。
然后,当出现新的测试点时,假设进行新的测试,我们需要预测这次测试是否能够覆盖新的测试点。我们希望通过结合之前的训练数据和芯片设计本身来实现这一预测。
我们有两个Baseline,其中之一可以看到测试点和轮胎点的数据。这是一个黑盒测试。
除了处理上述数据之外,Design2Vec 还可以处理设计本身、设计好的图结构等。如果你用一半的测试点作为训练数据,并设置几个不同大小的训练集,然后预测其他测试点,即使对于相对较少的覆盖点,您也会获得出色的结果。概括得很好。另一方面,基线方法不能很好地概括。
但是使用图形神经网络来学习设计、覆盖率和测试属性的方法实际上比 NeurIPS 文章中的所有其他基线都要好。
例如,我们经常遇到许多难以生成测试的覆盖点。工程师发现,使用两种不同的设计(RISC-V 设计和 TPU 设计)来生成这些特定覆盖点的测试也很困难,因此我们转而使用贝叶斯优化器来尝试生成测试。
上图右侧一栏是贝叶斯优化器覆盖的不同测试点和覆盖点所需的模拟器调用次数。中间一列是使用 Design2Vec 所需的模拟器调用次数。正如您所看到的,Design2Vec 生成的测试比贝叶斯优化器更少,无法覆盖这些具有挑战性的覆盖点。所以 Design2Vec 很棒,它更快,可以专注于覆盖范围,并且节省了运行计算模拟器的成本(这本身就很昂贵)。
验证是芯片设计在理论和实践中面临的长期挑战。我们相信深度表示学习可以显着提高验证效率和质量,并实现设计的泛化。
虽然设计发生了一些变化,但这个新设计的版本可以使用在许多以前的设计上训练过的系统来提高验证效率。就像布局布线阶段一样,经过训练的算法可以预测不同测试的覆盖点,即使面对新设计也能给出良好的结果。
架构探索和 RTL 综合
芯片设计的另一个耗时的方面是准确了解您想要构建的设计。此时你需要做一些架构探索,然后进行RTL综合。目前,具有不同专业知识的人们,例如计算机架构师和其他芯片设计师,花费大量时间构建他们真正想要的设计,然后验证、布局和布线,那么我们可以学习自动进行架构探索和综合吗?
现在我们研究的是如何针对已知问题进行架构探索。如果我们有一个机器学习模型,并且想要设计一个定制芯片来运行该模型,那么这个过程可以自动化,并得出一个非常擅长运行该特定模型的出色设计。
关于这项工作,我们在 arXiv 《A Full-stack Accelerator Search Technique for Vision Applications》 上发表了一篇文章,其中研究了许多不同的计算机视觉模型。论文的另一个高级版本被ASPLOS会议接受《A Full-stack Search Technique for Domain Optimized Deep Learning Accelerators》。
这里要解决的问题是:在设计机器学习加速器时,需要考虑什么样的机器学习模型要在哪个加速器上运行,而这个领域变化非常快。
上图中的红线指的是引入的不同计算机视觉模型以及通过这些新模型实现的ImageNet识别精度的提高。
但问题是,如果你想在 2016 年尝试设计一个机器学习加速器,那么你需要花两年的时间来设计一个三年后就会过时的芯片。 2016年你做出的决定都会影响计算,要保证2018-2021年的高效运营确实很难。例如,2016年推出了Inception-v3模型,但此后计算机视觉模型在四个方面发生了重大改进。
因此,如果我们可以缩短设计周期,也许可以使用单个工作负载加速器。如果我们能够实现其中许多流程的自动化,也许我们可以拥有一个积极的反馈循环,使机器学习加速器更快地推向市场,使它们更适合我们今天想要运行的模型,而不是五年后。
4
通过机器学习探索设计空间
我们实际上可以使用机器学习来探索设计空间。影响加速器性能的两个因素是设计中内置的硬件数据通道以及如何通过编译器而不是更高级别的软件将工作负载映射到该数据通道。通常,设计空间探索实际上只考虑编译器当前优化的数据路径,而不是共同设计的编译器在优化和优化数据路径时可能会做什么。
因此,我们可以同时优化数据路径、调度和一些编译器决策,并创建一个搜索空间来探索您想要做出的协同设计决策。这是一种覆盖计算和内存瓶颈的自动搜索技术,探索不同操作之间的数据通道映射和融合。通常,您将能够混合使用并避免在内存传输上的每个内存加载上执行多个操作。
基本上,我们可以在机器学习加速器中做出的设计决策创建一种更高级别的元搜索空间,以便可以在一维或二维中探索乘法脉动阵列。案例大小,以及不同的缓存大小等等。
如前所述,考虑与硬件设计共同设计编译器优化也很重要,因为如果默认编译器不更改,您就无法真正从处理器底层设计单元的更改中受益。在实践中,没有必要评估特定设计的所有效果和效果。
让我们看一下通过这种方式产生的一系列结果,并将这些结果与 TPUv3 芯片的基线(上面的蓝线)进行比较。这实际上是一个假设的 TPUv3 芯片,模拟器已停止运行。我们已将其缩小到小于 10 纳米的工艺。我们还将研究 TPUv3 的软件工具,并共同探索设计空间中的编译器优化。
红色和蓝色条代表的内容是一致的,但是一些探索的编译器优化不一定反映在蓝色条中,而这里的绿色条代表适应单个计算机视觉模型的假设。设计。 EfficientNet-B0...B7 代表相关但不同规模的计算机视觉模型。与蓝色条基线相比,Perf/TDP(绿色条)的改进约为 3 至 6 倍。
那么除了EfficientNet-B0...B7之外,其他模型的情况如何呢?前面提到的 ASPLOS 论文中提出了更广泛的模型集,尤其是 BERT-seq 128 和 BERT-seq 1024 等非计算机视觉 NLP 模型。
事实上,定制芯片不仅仅适合单个机器学习模型,但使其适用于一组机器学习模型。您可能不想将加速器芯片仅用于一项任务,而是希望通过您关注的任务来覆盖整个课程。
上图中的黄色条代表为五种不同模型设计的定制芯片,我们想要一个芯片可以同时运行这五种模型(红色箭头所指),然后我们可以看到性能。能达到什么程度。好消息是,正如您所看到的,黄线(单负载)的性能并不比绿线(多负载)低很多。因此,您实际上可以获得非常适合这五种模型的加速器设计,就好像您已经针对其中一种模型进行了优化一样。它可能不是最好的,但已经相当不错了。
此外,如果您关注性能而不是 Perf/TDP,结果实际上会有所改善。那么结果如何取决于您所关注的内容,绝对性能还是每瓦性能?在Perf//TDP指标下,性能结果甚至比非Perf/TDP指标下的1.8至6.4倍提高了2.6至8.8倍。
因此,我们能够针对特定工作负载进行定制和优化,而不是构建更通用的设备。我相信这将带来重大改进。如果我们能够缩短设计周期,我们将能够以更加自动化的方式解决定制芯片的更多问题。
现在的挑战之一是,如果你看看为新问题构建新设计的固定成本,就会发现它们太高了,无法广泛用于解决多个问题。但如果我们能够大幅降低这些固定成本,应用将会越来越广泛。
5
总结
我相信机器学习将在计算机芯片的设计过程中提供很多帮助。
如果机器学习正确地应用在正确的地方,在学习方法和机器学习计算的支持下,芯片设计周期是否可以缩短,只需要几个人在几周甚至几天内完成?我们可以利用强化学习来自动化与设计周期相关的流程,我认为这是一个很好的发展方向。
目前,人们通过一组或多组实验进行测试,并根据结果来决定后续研发的方向。如果这个实验过程能够实现自动化,并且能够达到满足实验正常运行的各项指标,我们完全能够实现设计周期的自动化,这也是缩短芯片设计周期的一个重要方面。
这些是本次演讲的一些参考文献和相关文章,主要涉及机器学习在芯片设计和计算机系统优化中的应用。
机器学习正在很大程度上改变人们对计算的思考方式。我们想要的是一个能够从数据和现实世界中学习的系统,它的计算方法与传统的手工编码系统完全不同,这意味着我们需要采取新的方法来创建我们想要的那种计算设备和系统。芯片。同时,机器学习也对芯片类型和芯片设计方法产生了影响。
我认为机器学习应该被认为是加速定制芯片设计过程的一个非常重要的工具。那么,芯片设计周期能否缩短到几天或几周呢?这是可能的,我们都应该为之努力。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。