来源:EETOP
自从1971年费德里科•法金(Federico Faggin)用直尺和彩色铅笔绘制出了首款商用微处理器英特尔4004后,芯片设计取得了长足进步。现在的设计师可以选择很多软件工具来规划和测试新的集成电路。然而,随着芯片越来越复杂,部分芯片包含了数千亿个晶体管,设计师必须解决的问题也日益复杂。现有的工具并非总能解决这些问题。
现代芯片工程是一个迭代过程,包括从系统规范到封装的9个阶段。每个阶段又包含多个子阶段,根据问题的规模及其约束条件,每个子阶段可能需要数周甚至数月的时间才能完成。许多设计问题有10100到101000种解决可能性,但其中可行的非常少,这无异于大海捞针。今天的自动化工具通常无法解决这种规模的实际问题,这意味着需要人工介入,从而导致这一过程的繁琐和耗时程度超出了芯片制造商的期望。
毫不意外的是,人们对利用机器学习加速芯片设计的兴趣与日俱增。然而,我们的英特尔人工智能(AI)实验室团队发现,仅靠机器学习算法往往不足以解决问题,特别是在需要满足多个约束条件的情况下。
事实上,我们最近在尝试开发一种基于人工智能的解决方案来应对一个名为“布图规划”(floorplanning)的棘手设计任务(稍后将详细介绍),但最后发现,基于非人工智能方法(如经典搜索)的工具更成功。这表明,行业不应过早放弃传统技术。我们现在认为,将两者优势结合起来的混合方法(尽管目前研究尚少)可能是最富有成效的发展道路。原因如下。
芯片设计最主要的瓶颈之一在物理设计阶段,此时架构已经确定,逻辑和电路设计也已完成。物理设计涉及对芯片布局和连接性的几何优化。第一步是将芯片划分为高级的功能模块,例如CPU核心、存储模块等。这些大的分区随后被进一步细分为更小的部分,即宏单元和标准单元。一个典型的片上系统(SoC)大约有100个高级模块,这些模块由数百到数千个宏单元以及数千到数十万个标准单元组成。
接下来是布图规划,在这个阶段,需要按照特定设计目标来排列功能模块,例如高性能、低功耗和成本效益。这些目标通常通过将线长(连接电路元件的纳米导线总长度)和空白区域(未被电路占用的芯片总面积)降到最小来实现。这些布图规划问题属于数学规划中的组合优化类别。如果玩过俄罗斯方块,那么你就解决过非常简单的组合优化问题。
芯片布图规划就像“加强版”的俄罗斯方块。首先,可能的解决方案的数量是一个天文数字。一个典型的片上系统布图规划中,要排列120个高级模块,大约有10250种可能的排列方式,而宇宙中的恒星总数大概也仅为1024。宏单元和标准单元的可能排列方式则还要多好几个数量级。
在目标单一的情况下,比如将功能模块塞进最小的硅片面积里,商业布图规划工具可以在短短几分钟内解决这种规模的问题。然而,涉及多个目标和约束条件时,比如特定模块的位置规则、模块形状的限制,或者必须要将某些模块放置在一起时,这些工具往往难以应付。因此,人类设计师需要频繁依靠试验和自身的创造力,这会导致生产进度延长数小时甚至数天。而这仅仅是一个子阶段的工作。
虽然过去十年机器学习取得了巨大成功,但它对芯片设计的影响仍然相对有限。英伟达等公司已经开始训练大语言模型(支持Copilot和ChatGPT等服务的人工智能形式),用于编写硬件设计程序的脚本和分析漏洞。然而,这些编程任务与解决布图规划等复杂的优化问题相去甚远。
乍一看,将transformer模型(大语言模型的基础)应用于物理设计问题好像也很有吸引力。理论上,我们可以训练transformer模型来逐步预测芯片上每个模块的物理坐标,就像人工智能聊天机器人逐步预测句子中的单词那样,从而创建一个基于人工智能的布图规划工具。然而,如果试图教模型安排模块位置使其不重叠,我们很快就会遇到问题。虽然这个概念对人类而言简单易懂,对计算机来说却并非易事,需要耗费大量的训练数据和时间。其他设计约束中也存在同样的困难,例如将模块放置在一起或靠近某个边缘的要求。
因此,我们采取了不同的方法。我们的首要任务是选择一种有效的数据结构来表示布图规划中的模块位置。最终,我们选择了一种称为B*-树的结构。在这种结构中,每个模块都用二叉树上的一个节点来表示。布图规划左下角的模块是树的根节点。右侧的模块是一个分支;上方的模块是另一个分支。每个新节点继续使用这种模式。因此,随着二叉树的生长,它会逐步向右和向上扩展,从而涵盖整个布局。
B*-树结构的一个显著优势是它能确保布局无重叠,因为模块的位置是相对的而非绝对的,例如“在另一个模块的上方”,而不是“在这个位置”。因此,基于人工智能的布图规划工具无需预测每个模块的确切坐标,而是可以根据模块的尺寸以及其相邻模块的坐标和尺寸轻松计算出位置。这样一来,就不会发生重叠问题。
确定了数据结构后,接下来我们利用包含数百万个最优布图规划方案的数据集训练了几种机器学习模型,具体包括图神经网络、扩散模型和基于transformer的模型。这些模型学习了预测在已放置模块的上方或右侧应该放置哪个模块才能生成面积和线长最优的布局。但是,我们很快发现,这种循序渐进的方法并不可行。我们将布图规划问题扩展到大约100个模块的规模,并在“无重叠”规则以外增加了其他硬性约束,包括要求某些模块必须放置在边缘等预定的位置,或将共用同一电压源的模块分为一组。结果,我们的人工智能模型在追求次优解上浪费了大量时间。
我们推测,问题在于模型无法回溯:模块是按顺序放置的,因此模型无法修正早期不合理的放置。我们可以通过强化学习代理等技术来跨越这一障碍,但要训练出一个好的模型,这种代理需要进行大量探索,实践起来非常困难。在走入死胡同后,我们决定放弃逐块决策的方法,尝试一种新的策略。
解决大规模组合优化问题的一种常见方法是模拟退火(SA)。这项技术最早提出于1983年,受到了冶金学的启发,其中,退火是指将金属加热至高温后再缓慢冷却的过程。受控的能量减少能使原子有序排列,相较于快速冷却,可使材料更坚固且更柔韧。同样,模拟退火可逐步找到优化问题的最佳解决方案,无需繁琐地检查每种可能性。
其工作原理如下。算法从一个随机解决方案开始,就我们的情况而言,这个随机解决方案是一个随机布图规划,用B*-树表示。然后,我们让算法再次随机采取以下3种操作之一:交换两个模块、将一个模块从一个位置移动到另一个位置,或调整一个模块的宽高比(保持面积不变)。我们会根据总面积和线长的加权平均值来评估生成的布图规划的质量。这个数值代表了操作的“成本”。
如果新生成的布图规划更好,也就是说,它降低了成本,我们便接受它。如果更差,我们一开始也会接受它,因为某些“糟糕”的决策可能会引导出更优的方向。不过,随着时间的推移和算法不断随机调整模块,我们接受增加成本操作的频率逐渐降低。正如金属加工那样,我们希望逐步完成转变。就像金属快速冷却会导致原子陷入无序排列一样,过早限制算法的探索会让它困在次优解(局部最小值)中。通过在早期给予算法足够的余地来规避这些陷阱,我们可以引导它找到我们真正想要的解决方案,即全局最小值(或它的充分近似值)。
在解决布图规划问题时,我们使用模拟退火取得的结果比使用任何机器学习模型都更成功。模拟退火算法对模块放置顺序没有限制,因此它可以随时修改任意模块,基本上能够纠正早期的错误。没有了约束条件,我们发现它能在几分钟内解决包含数百个模块的复杂布图规划问题。相比之下,使用商业工具的芯片设计师可能需要数小时才能解决同样的难题。
当然,现实中的设计问题存在约束条件。因此,我们给模拟退火算法增加了一些与机器学习模型相同的约束条件,包括对某些模块位置的限制以及模块分组要求。最初,我们尝试通过在我们的成本函数中加入布图规划违反硬性约束的次数来应对这些约束。这样一来,当算法随机调整模块,导致违反约束的次数增加时,我们就更可能拒绝这些操作,从而引导模型避开它们。
可惜的是,这一策略适得其反。将约束条件纳入成本函数意味着算法需要在满足约束与优化面积和线长之间找到平衡。然而,硬性约束本质上是不可妥协的。当我们增加约束变量的权重以强调其刚性时,算法在优化方面的表现很差。模型并没有努力修复违规,产生全局最小值(最优布图规划),而是反复产生模型无法逃脱的局部最小值(次优布局)。
于是我们回到规划设计阶段,设计了一种新的模拟退火方法,称之为“约束感知模拟退火”(CA-SA)。这种变体采用了两个算法模块。第一个是SA模块,专注于优化面积和线长这一模拟退火最擅长的任务。第二个模块会随机选择一个约束违规并修复它。这个修复模块很少启动(大约每执行一万次操作才启动一次),但一旦启动,无论对面积和线长有什么样的影响,其决策总是能够被接受。因此,我们可以引导CA-SA算法找到满足硬性约束的解决方案,而不阻碍该算法。
使用这种方法,我们开发了一款开源布图规划工具,能够同时运行多个CA-SA迭代。我们称之为“并行约束感知模拟退火”(Parsac)。人类设计师可以从Parsac的解决方案中选择最佳方案。我们根据含有多达300个模块的主流布图规划基准测试了Parsac,它轻松超越了其他已发布的方法,包括其他基于SA的算法和机器学习模型。
不过,这些既定基准已有20多年的历史,无法反映现代的片上系统设计。其主要缺点是缺乏硬性约束。为了解Parsac在更现实的设计中的表现,我们在这些基准问题中加入了自己定义的约束条件,包括模块放置和分组要求。让我们高兴的是,Parsac在15分钟内成功解决了商业规模(约100个模块)的高级布局问题,成为了同类中最快的布图规划工具。
我们现在正在开发另一种基于几何搜索的非人工智能方法,用于处理含有不规则形状模块的布图规划问题,进一步深入到现实场景中。不规则布局过于复杂,无法用B*-树表示,因此我们回到了依次放置模块的办法。初步结果表明,这种新方法甚至可能比Parsac更快,但由于无法回溯,所得解决方案可能不是最优方案。
与此同时,我们也在努力调整Parsac以适应宏单元布局,该布局比块级布局的细粒度更高,这意味着元件规模从数百个扩展到数千个,同时仍要遵守约束。单靠CA-SA可能太慢,无法高效解决如此大规模和高复杂度的问题,而这正是机器学习能发挥作用的地方。
例如,给定一个SA生成的布图规划,我们可以训练人工智能模型来预测哪些操作可以改善布局的质量。然后,我们可以利用这个模型来指导CA-SA算法的决策。算法不再仅仅采取随机或“简单”的操作(同时遵守约束),而是以一定的概率接受模型的“智能”操作。通过与高复杂度模型配合,我们推测Parsac可以大幅减少寻找最优解决方案所需的操作次数,大大缩短运行时间。然而,允许某些随机操作仍然至关重要,因为它能使算法全面地探索问题,否则它可能会陷入次优解的陷阱,就像我们之前失败的和高复杂度布图规划工具一样。
除布图规划外,这种方法或类似方法也可能对解决其他复杂的组合优化问题有帮助。在芯片设计中,这类问题包括核心的互连路由优化和布尔电路最小化,其中的挑战是用最少的门和输入来构建执行功能的电路。
使用Parsac的经验也启发我们创建了布图规划样本开放数据集,我们期望这些数据集能够成为该领域的新基准。随着研究人员想要验证新的芯片设计工具,对这类现代基准的需求也愈加迫切。例如,近期有项研究根据老旧基准或专有布局对新型机器学习算法的性能提出了要求,引发了对这些要求合法性的质疑。
我们已经发布了FloorSet-Lite和FloorSet-Prime两个数据集,目前可以在GitHub上找到。每个数据集包含100万个布局,用于训练机器学习模型,并提供了100个优化了面积和线长的测试布局。在设计这些布局时,我们力图全面覆盖现代片上系统布图规划的广泛性和复杂性。它们包含的模块数量从20个到120个不等,并且包括实际的设计约束条件。
这两个数据集的复杂性不同。FloorSet-Lite使用了矩形模块,反映了模块通常被配置为简单形状的早期设计阶段。FloorSet-Prime则使用了不规则模块,在设计过程的后期更常见。在这个阶段,模块内的宏单元、标准单元和其他组件的布局已优化,形成了不规则的模块形状。
虽然这些数据集是人工创建的,但我们特别注意加入了商业芯片的特征。为此,我们创建了布图规划属性的详细统计分布,如模块尺寸和约束类型。然后我们从这些分布中抽样,以生成合成布图规划,模拟真实的芯片布局。
这些稳健的开放数据集可以显著推动机器学习在芯片设计中的应用。然而,我们不太可能用完全依赖和人工智能的解决方案来解决布图规划这类复杂的优化问题。深度学习模型之所以能够在对象识别和语言生成等任务中占优势,是因为它们特别擅长捕捉训练数据中的统计规律,并将这些模式与所需的输出关联起来。但这种方法不太适用于硬性组合优化问题,它们需要模式识别以外的技术来解决。
相反,我们预计混合算法将成为最终的赢家。通过学习识别最有前景的解决方案类型以便进行探索,人工智能模型可智能地引导Parsac等搜索代理,从而提高其效率。芯片设计师可以更快地解决问题,推动制造更复杂、更节能的芯片,甚至可以将多个设计阶段合并为一个单一的优化问题,或同时进行多个设计。人工智能可能无法完全独立地设计芯片,甚至不能解决单一设计阶段的所有问题,但结合其他创新方法后,它将改变该领域的游戏规则。
文章来源于悦智网,作者Somdeb、Uday 等
特别声明:以上内容仅代表作者本人的观点或立场,不代表Hehson财经头条的观点或立场。如因作品内容、版权或其他问题需要与Hehson财经头条联系的,请于上述内容发布后的30天内进行。
下一篇:昨起,这一费用上调!