英伟达卷向EDA,用大模型助力芯片设计
摘要
ChipNeMo 旨在探索大型语言模型(LLM)在工业芯片设计中的应用。我们没有直接部署现成的商业或开源 LLM,而是采用了以下领域适应技术:定制标记符号化器(custom tokenizers)、领域适应性持续预训练(domain-adaptive continued pretraining)、使用特定领域指令的渗透微调(SFT)以及领域适应性检索模型(supervised fine-tuning (SFT) with domain-specific instructions, and domain-adapted retrieval models)。我们在三个选定的芯片设计 LLM 应用中对这些方法进行了评估:工程助理聊天机器人、EDA 脚本生成以及错误总结和分析。我们的结果表明,与通用基础模型相比,这些领域适应技术在三个评估应用中都能显著提高 LLM 性能。在一系列设计任务中,模型大小最多可缩小 5 倍,性能却相差无几甚至更好。我们的研究结果还表明,目前的结果与理想结果之间仍有改进空间。我们相信,未来对适应领域的 LLM 方法的进一步研究将有助于缩小这一差距。
引言
过去几十年来,电子设计自动化(EDA)算法和工具极大地提高了芯片设计的生产率。再加上摩尔定律带来的晶体管密度的指数级增长,EDA 使得拥有数十亿晶体管的功能丰富的复杂 SoC 设计得以开发。最近,研究人员一直在探索如何将人工智能应用于 EDA 算法和芯片设计流程,以进一步提高芯片设计生产率 。然而,许多涉及与自然语言或编程语言接口的耗时芯片设计任务仍未实现自动化。商业(ChatGPT、Bard 等)和开源(Vicuna、LLaMA2 等)大语言模型(LLM)的最新进展为帮助实现这些语言相关芯片设计任务的自动化提供了前所未有的机会。事实上,早期的学术研究已经探索了 LLM 在生成 RTL(可在小型设计模块中执行简单任务)以及为 EDA 工具生成脚本方面的应用。
我们认为,LLM 有助于提高芯片设计的生产率,它使用生成式人工智能来自动完成许多与语言相关的芯片设计任务,如代码生成、通过自然语言界面回答工程问题、分析和报告生成以及错误分流。在本研究中,我们将重点关注这三个特定的 LLM 应用:为 GPU ASIC 和架构设计工程师设计的工程助理聊天机器人,它能理解内部硬件设计,并能解释复杂的设计主题;为两个基于 Python 和 Tcl 的特定领域工具生成 EDA 脚本,用于 VLSI 时序分析任务的英文指定;作为内部错误和问题跟踪系统一部分的错误汇总和分析。
图1:ChipNeMo 训练流程
尽管在海量互联网数据上训练的通用 LLM 在不同领域的生成式人工智能任务中表现出非凡的能力(如 Bubeck 等人证明的那样),但 BloombergGPT 和 BioMedLLM 等最新研究表明,特定领域的 LLM 模型在特定领域的任务上可以超越通用模型。在硬件设计领域,的研究表明,在额外的 Verilog 数据基础上进行微调的开源 LLM(CodeGen )可以超越最先进的 OpenAI 模型。以这种方式定制 LLM 还可以避免通过 API 向第三方 LLM 发送专有芯片设计数据所带来的安全风险。然而,为每个领域从头开始训练特定领域模型的成本过高,因为这通常需要数百万个 GPU 训练小时。为了经济高效地训练特定领域模型,我们建议结合以下技术:基础模型的领域适应性预训练(DAPT:Domain-Adaptive Pre Training)与领域适应性标记符号化器(domain adapted tokenizers)、使用通用和领域特定指令进行模型对齐,以及使用训练好的领域适应性检索模型进行检索增强生成(RAG:retrieval-augmented generation)。
如图 1 所示,我们的方法是从基本的基础模型开始,然后应用 DAPT 和监督微调 (SFT:Supervised Fine-Tuning)。DAPT 也称为使用域内数据进行持续预训练,在生物医学和计算机科学出版物、新闻和评论等领域已被证明是有效的。在我们的案例中,我们从一系列专有硬件相关代码(如软件、RTL、验证测试平台等)和自然语言数据集(如硬件规格、文档等)中构建了特定领域的预训练数据集。我们对原始数据集进行清理和预处理,然后利用特定领域的数据继续训练基础模型。我们将生成的模型称为 ChipNeMo 基础模型。DAPT 只需要预训练中使用的一小部分标记,而且成本更低,只需要几千个 GPU 小时。正如第五部分所述,我们发现在我们的使用案例中,这种方法比 LoRA 等参数高效训练(PEFT:Parameter Efficient Training )技术更有效。
LLM 标记化器(tokenizers)将文本转换成标记序列,用于 LLM 训练。针对特定领域的标记化器可以针对特定领域的术语(如 RTL 中常见的关键词)定制规则和模式,从而提高标记化效率。对于 DAPT,我们不能从头开始重新训练一个新的特定领域标记化器,因为这会使基础模型失效。我们没有将 ChipNeMo 限制在基础模型使用的预先训练好的通用标记符上,而是将预先训练好的标记符调整到我们的芯片设计数据集上,只为特定领域的术语添加新的标记符。
ChipNeMo 基础模型是完成模型,需要监督微调(SFT)才能适应聊天等任务。我们使用大量公开的多轮聊天通用指令数据集和少量特定领域指令数据集,对 ChipNeMo 基础模型执行 SFT,从而生成 ChipNeMo 聊天模型。我们发现,使用通用聊天指令数据集进行 SFT 足以使 ChipNeMo 基础模型与芯片设计领域的查询相一致。我们还添加了少量特定任务的 SFT 指令数据,从而进一步提高了对齐度。我们基于用作基础模型的 LLaMA2 模型的变体,训练了多个 ChipNeMo 基础模型和聊天模型。
为了提高工程助理聊天机器人应用的性能,我们还利用了检索增强生成(RAG)技术。RAG 是一种开放式方法,可为 LLM 提供精确的用户查询上下文。它从数据存储中检索相关的领域知识,以增强用户查询时的响应生成。这种方法在根据特定问题的上下文建立模型方面有显著改进。最重要的是,我们观察到,当使用领域数据对预训练的检索模型进行微调时,检索命中率有了显著提高。这进一步提高了模型的质量。
我们重点介绍以下与将 LLM 适应于芯片设计领域相关的贡献和发现:
-
我们在三个用例中展示了适应领域的 LLM 的有效性:工程助理聊天机器人、EDA 工具脚本生成以及错误总结和分析。根据专家评估,工程助理聊天机器人的响应在 10 分制中达到了 7.4 分,EDA 脚本生成的正确率超过了 50%,总结和任务识别任务的专家评估评级在 7 分制中达到了 4 到 5 分。
-
在针对特定领域的 AutoEval 多选基准和针对应用的人工评估中,经过领域适配的 ChipNeMo 模型的性能大大优于所有普通 LLM。
-
对于模型有可能根据提示上下文生成文本的任务(例如,使用 RAG 命中的聊天、摘要、使用提供的文档生成代码),领域适应缩小了最先进的 LLaMA2 70B 模型与更小的 13B 模型之间的差距(少量的增量训练成本可使参数减少多达 5 倍,从而降低推理成本)。
-
定制的标记符号化器最多可减少 3.3% 的 DAPT 标记符号数量,而不会影响应用的有效性。
-
在工程助理聊天机器人、EDA 脚本生成以及错误总结和分析中,额外 1.1K 个特定领域指令上的 SFT 显著提高了应用能力,在 10 分制中最高提高了 0.33 分,正确率提高了 18%,在 7 分制中最高提高了 0.79 分。
-
利用特定领域的数据对我们的 ChipNeMo 检索模型进行微调后,检索器的命中率比预先训练的最先进检索器提高了 30%,从而提高了 RAG 响应的整体质量。
本文的组织结构如下。第二节介绍了我们的数据集和用于领域知识验证的自动评估基准。第三节概述了所使用的领域适配和训练方法,包括适配标记符、DAPT、SFT 和 RAG。第四节提供了每个应用和实验设置的详细信息。第五节介绍了实验结果,包括每个应用的人类评估。第六节讨论了 ChipNeMo 的局限性和未来工作。第七部分介绍了相关的 LLM 方法和其他针对芯片设计 LLM 的工作。最后,完整的结果以及其他模型训练细节和应用用例生成的文本示例在附录中进行了说明。
数据集
A. DAPT 数据集
在领域自适应预训练 (DAPT) 期间,我们从英伟达专有的芯片设计特定数据源和公开可用的数据集中组合出一个数据集。
芯片设计数据集: 我们的内部数据集由与芯片设计相关的各种文本源组成,涵盖设计、验证、基础架构和内部文档。表 I 列出了过滤后收集到的数据的细目,以及使用 LLaMA2 标记符号生成器生成的相应标记符号数量。我们通过收集所有相关的内部数据来构建数据集,然后根据文件名扩展名按文件类型进行过滤,并区分机器生成的内容和人工编写的内容。虽然我们对三个特定的使用案例进行了评估,但我们并没有特别将数据集限制在已知与这些使用案例相关的来源上,因为我们相信,纳入额外的领域知识会提高性能。经过收集、清理和过滤后,内部数据训练语料库共有 231 亿个词条。有关数据收集过程的更多详情,请参阅附录 A。
公共数据集: 我们利用各种来源的公开数据样本来增强芯片设计的特定数据,这是开发基础性大型语言模型的常见做法。我们的方法是重用其他语言模型的公共训练数据,但规定这些数据必须是可公开访问的,并与开源兼容。这些数据集与 LLaMA2 中使用的预训练数据具有很高的相关性,目的是在 DAPT 过程中保留常识和自然语言能力。ChipNeMo 使用的公共数据集可分为两类:自然语言和代码。在自然语言部分,我们使用维基百科数据,因为它的数据质量很高,广受好评。对于代码,我们利用 GitHub 数据,重点关注我们内部数据芯片设计数据集中也存在的编程语言,如 C++、Python 和 Verilog。为确保整个数据集能代表训练前的分布情况,我们进行了一次子采样操作,结果是训练标记总数的约 9.2% 从这些公共数据集中采样,平衡了自然语言和代码的代表性。
数据混合(Data Blend): 我们收集的领域数据中有很大一部分是来自不同来源的未注明代码。为了提高模型对特定领域知识的理解能力,我们对代码数据进行了下采样,同时对自然语言数据(特别是设计文档)进行了上采样,训练时间跨度为 2 到 4 次。我们还增加了我们认为与下游应用更相关的数据表示,如人工编写的 EDA 工具脚本。此外,我们还纳入了 1 个时程的公开领域数据。用于训练的标记分布详情如表 I 所示。
表 I:按来源分列的数据。使用原始 LLaMA2 令牌生成器测量的令牌数量
B. SFT 指令数据
在监督微调(SFT)过程中,我们使用了可用于商业用途的通用聊天 SFT 指令数据集。该数据集主要由以下公开可用的结构化数据集组成:OASST 、FLAN 、P3 ,以及少量广泛领域的专有数据集,其中包括各种主题,如头脑风暴、开放式问题解答、改写、总结等。值得注意的是,我们在此讨论的 SFT 指令数据侧重于一般自然语言任务,不包含任何与芯片设计下游用例相关的信息或任务。该数据集总共包含 128,000 个训练样本。
此外,我们还精心收集了一个特定领域的指令数据集,用于将模型与下游用例进行比对。这些示例由主题专家精心制作,格式为单轮问答。表 II 显示了我们的特定领域指令数据集的数量。值得注意的是,与大量的生成式聊天指令数据相比,特定领域指令数据集中的训练样本总数很少。
表 II:域 SFT 数据细分
C.自动评估
为了快速、定量地评估各种模型的准确性,我们为每个用例建立了多选问答格式的评估标准,其设计与 MMLU 等既定基准密切相关。在制定这些多选题的过程中,与领域专家的合作至关重要。我们的目标是确保每个问题至少包含一个复杂的答案选项,从而对领域专业知识有限的个人提出挑战。此外,我们还特别注意防止问题无意中受到特定领域 SFT 数据的污染。除了每个使用案例的基准外,我们还为一般电路设计知识创建了一个额外的基准,涵盖模拟和数字设计主题。评估基准的多选题数量如表 III 所示。
表 III:特定领域的评估基准
在报告上述基准的结果时,我们取五次不同运行的平均结果,以减少测试过程中的差异和噪音影响。每次迭代都使用一组 5 次拍摄的示例,并在每次运行中引入变化。
除了这些特定领域的评估基准外,我们还采用了常用的公开 LLM 学术基准。此外,我们还通过评估 Python 的 HumanEval [23] 和 Verilog 的 VerilogEval ,来衡量模型的代码生成能力。
ChipNeMo 领域适应方法
ChipNeMo 实现了多种领域适应技术,使 LLM 适应芯片设计领域。这些技术包括针对芯片设计数据的定制标记器、使用大量领域数据语料库的领域自适应预训练、使用特定领域任务的监督式微调,以及使用微调检索模型的检索增强生成。我们将在本节中说明每种技术的细节。
A. 标记符
在调整预训练的标记化器时,主要目标是提高特定领域数据的标记化效率,保持一般数据集的效率和语言模型性能,并尽量减少重新训练/微调的工作量。为此,我们开发了一种四步方法:
-
步骤 1:使用特定领域的数据从头开始训练标记符。
-
步骤 2:从新的标记化器的词汇中,识别出通用标记化器中不存在且在通用数据集中很少发现的标记。
-
步骤 3:使用步骤 2 中新识别的标记扩展通用标记符。
-
步骤 4:利用通用标记符初始化新标记符的嵌入。
具体到步骤 4,当遇到一个新标记时,就会使用预训练的通用标记器对其进行标记。新标记符的嵌入是通过对通用标记符生成的标记符的嵌入求平均值来确定的[24],输出层权重初始化为零。
步骤 2 有选择性地引入通用数据集中不常出现的新标记,有助于保持预训练 LLM 在通用数据集上的性能。步骤 4 通过在通用标记化器的指导下初始化新标记的嵌入,减少了重新训练/调整 LLM 所需的工作量。
B. 领域自适应预训练
在我们的研究中,我们将 DAPT 应用于预训练的基础模型 LLaMA2 7B/13B。每个 DAPT 模型都使用相应的预训练基础模型的权重进行初始化。我们将 DAPT 模型命名为 ChipNeMo。我们采用第 III-A 节中描述的标记符号增强技术,并相应地初始化嵌入权重。我们采用标准的自回归语言建模目标,对特定领域的数据进行进一步的预训练。所有模型训练过程均采用英伟达 NeMo 框架,并结合了张量并行(tensor parallelism)和闪存关注( flash attention)等技术以提高效率。
我们的模型采用类似配置的一致训练方法。我们采用了 5 - 10-6 的小学习率(small learning rate),并使用亚当优化器(Adam optimizer)进行训练,而不使用学习率调度器(learning rate schedulers)。全局批量大小设置为 256,上下文窗口为 4096 个标记,因此有效批量大小为 100 万个标记。详细的训练超参数见附录 B。训练步数设定为 23,200 步,大约相当于 1 个混合数据历时。
图 2:ChipNeMo 的平滑训练损耗(Smoothed Training Loss)与令牌器增强(Tokenizer Augmentation)
图 2 展示了 ChipNeMo 在指定超参数下的训练损失。我们确实观察到了训练损失中的尖峰。与文献中的假设不同,我们假设在我们的方案中,这些尖峰可以归因于 "坏数据",因为这些不规则现象似乎总是出现在同一模型的类似训练步骤中,甚至出现在不同大小的模型中。我们选择不解决这个问题,因为这些异常情况似乎并没有明显阻碍后续的训练步骤(验证损失没有明显下降),这可能是由于我们采用了较低的学习率。
C. 监督微调
在 DAPT 之后,我们使用监督微调(SFT)进行模型对齐。我们对所有模型都采用了与 DAPT 相同的超参数训练配置,只是将全局批量规模缩小为 128。所有 SFT 数据都按照下面的聊天模板结构化:
...
我们采用自回归优化目标,实施一种策略,掩盖来自系统和用户提示的令牌相关损失[5]。这种方法可确保在反向传播过程中,我们只关注答案令牌的优化。
我们将包含约 1.1k 个样本的领域 SFT 数据集与包含 128k 个样本的更广泛的一般聊天 SFT 数据集结合起来。然后,在对数据进行随机洗牌后,我们进行了单次微调。我们对特定领域的 SFT 数据集进行了不止一次的增强实验。然而,当遇到领域内的问题时,模型很快就出现了过度拟合的迹象,经常重复领域 SFT 数据集中无关的答案。
此外,我们还使用普通聊天数据集进行了额外的 SFT,排除了任何特定领域的 SFT 数据。为清楚起见,我们将所有 ChipNeMo 模型命名如下:
1) ChipNeMo-Chat: Models fine-tuned with both domain and general chat data;
2) ChipNeMo-Chat (noDSFT): Models fine-tuned with general chat data exclusively.
我们还在聊天对齐模型(如 LLaMA2-Chat 模型)上直接试用了 DAPT。我们发现,DAPT 明显降低了模型的对齐度,使得生成的模型在下游任务中毫无用处。
D. 检索-增强生成
众所周知,LLM 可以生成不准确的文本,即所谓的幻觉(hallucination)。尽管对这一现象还不完全了解,但我们仍然必须减少幻觉,因为在工程助理聊天机器人中,幻觉尤其容易产生问题,因为准确性是至关重要的。我们的建议是利用检索增强生成(RAG)方法。RAG 尝试从数据库中检索相关段落,并将其与问题一起纳入提示中,从而使 LLM 能够生成更准确的答案。我们发现,在 RAG 中使用与领域相适应的语言模型可以显著提高特定领域问题的答案质量。此外,我们还发现,使用适量的特定领域训练数据对现成的无监督预训练密集检索模型进行微调,可显著提高检索准确率。图 3 展示了我们根据领域调整的 RAG 实现图。
图 3:RAG 实施的变化
我们利用 Tevatron 框架对 e5 小型无监督模型和 3000 个特定领域自动生成的样本进行了微调,从而创建了与领域相适应的检索模型。附录 C 介绍了样本生成和训练过程。
即使对检索模型进行微调带来了显著的收益,但事实上,检索仍然难以处理那些不能直接映射到文档语料库中的段落或需要更多段落中没有的上下文的查询。不幸的是,这些查询也更能代表工程师在实际情况下提出的查询。将检索与适应领域的语言模型相结合是解决这一问题的方法之一。
LLM 应用
我们对设计团队中潜在的 LLM 应用进行了调查,并将其分为四类:代码生成、问答、分析和报告以及分流(triage)。代码生成指的是 LLM 生成设计代码、测试平台、断言(assertions)、内部工具脚本等;问答指的是 LLM 回答有关设计、工具、基础设施等方面的问题;分析和报告指的是 LLM 分析数据并提供报告;分流指的是 LLM 根据日志和报告帮助调试设计或工具问题。我们从每个类别中选择了一个关键应用进行研究,分流类别(triage category)除外,留待进一步研究。每种应用的动机和技术细节如下。
A. 工程助理聊天机器人
该应用程序旨在帮助设计工程师解答他们在架构、设计、验证和构建方面的问题,从而在不影响他人工作效率的情况下显著提高他们的整体工作效率。据观察,设计工程师通常喜欢集思广益、设计硬件和编写代码,但在等待他们所缺乏的设计知识的答案时可能会拖慢他们的进度。避免让工程师根据错误的假设编写代码或调试他们不熟悉的代码,也能提高设计效率。内部研究表明,典型芯片设计人员多达 60% 的时间都花在调试或检查表相关任务上,这些任务涉及设计规范、测试平台构建、架构定义以及工具或基础架构等一系列主题。在跨国公司中,这些问题的专家往往分布在全球各地,因此并不总能方便地找到即时帮助。因此,基于从内部设计文档、代码、任何有关设计和技术通信(如电子邮件和公司即时通信等)的记录数据中提取的知识的工程助理聊天机器人,可以帮助显著提高设计效率。我们使用第 III-D 节中提到的适应领域的 RAG 方法实现了这一应用。
B. EDA 脚本生成
工业芯片设计流程中的另一项常见任务是编写 EDA 脚本,以完成设计实现、自省和转换等各种任务。这些脚本通常利用特定工具和自定义内部脚本库。学习这些库、浏览工具文档、编写和调试这些脚本会占用大量的工程时间。
事实证明,LLM 擅长在各种任务中进行小规模代码生成,因此,定制这些模型以加快工程师在这一特定领域任务中的工作效率自然是再合适不过了。在这项工作中,我们重点关注从自然语言任务描述中生成两种不同类型的脚本。第一种是利用 Tool1(用于设计编辑和分析的内部 python 库)生成的脚本。第二种是使用 Tool2 提供的命令界面的 Tcl 脚本,Tool2 是一种领先的工业静态时序分析工具。
为了建立针对该任务的特定领域微调数据集,我们从设计专家那里收集了这两种工具的生产脚本。我们发现,我们的 DAPT 模型可以为代码生成合理的内联注释。这使我们能够利用这些模型,通过生成额外的内联注释来提高所收集脚本的质量。人工专家随后会对这些注释进行验证和修正,并创建相关的提示。这些提示和代码对构成了 DSFT 所使用的数据,其格式将在第 III-C 节中讨论。
为了以最有意义的方式提供和收集反馈,我们花费了大量精力构建了图 4 所示的流程,工程师可以通过同一界面查询模型和运行生成的代码。这让我们对生成代码的正确性充满信心,并通过让工程师了解他们可能需要多少修正才能获得正常运行的脚本来提供准确的反馈。通过与工具服务器建立交互式连接,我们支持工具 1 和工具 2 的集成。
图 4:与 EDA 工具整合的 LLM 脚本生成器
此外,我们还提供了用户反馈表,使我们能够比较不同的模型,并从用户反馈中获得有价值的见解。这些宝贵的信息有助于我们进一步完善模型。
C. 错误汇总与分析
在生产流程的各个阶段跟踪各种功能和错误的报告、分流、调试和解决是一个耗时的过程。工程经理需要花费大量时间查看内部问题跟踪数据库,以了解项目状态并帮助加快执行速度。因此,一种能够查看所有支持信息、快速总结技术和管理数据并提出下一步建议的工具将提高团队的工作效率。我们的重点是使用 LLM 生成三种不同的输出结果--一种侧重于技术细节,一种侧重于管理细节,还有一种建议任务分配。
为了研究这些任务,我们使用了英伟达的内部错误数据库 NVBugs。该数据库用于错误报告、跟踪和解决,以及整个公司的一般任务和功能跟踪。由于 DAPT 数据集中包含了大量的错误数据,因此我们希望 ChipNeMo 模型能在这项任务中表现出色。此外,我们还为此任务建立了一个特定领域的 SFT 数据集,其中包括错误汇总和任务分配任务的示例。
通常,错误描述包含大量日志文件片段或代码转储,以及冗长的注释历史。在这种情况下,错误文本对于我们的 LLM 上下文窗口来说太大了。为了解决这个问题,我们采用了两种解决方案。首先,我们找到了较长的路径名,并用较短的别名替换了这些路径名,这样模型就可以将错误中多处出现的路径联系起来,而无需处理整个字符串。其次,我们将汇总任务拆分为增量任务,在增量任务中,模型的任务是在多个汇总和错误数据块中积累数据。我们采用了一种分层方法,首先将错误分成适合上下文窗口的数据块。然后对这些数据块进行汇总,汇总后的数据块再进行分离。这个过程不断重复,直到整个摘要集适合一个上下文窗口并生成一个摘要。我们使用相同的方法,与用于摘要的 LLM 无关。
评估
本节将对我们的训练方法和应用性能进行评估。我们在训练方法评估中研究了 7B 和 13B 模型,在应用性能评估中只研究了 13B 模型。作为比较,我们还评估了两个基准聊天模型:LLaMA2-13B-Chat* 和 LLaMA2-70B-Chat。LLaMA2-13B-Chat* 是使用我们的通用聊天指令数据集微调的 LLaMA2 13B 基础模型,它不同于使用人类反馈强化学习(RLHF)训练的原始 LLaMA2-13B-Chat 模型。我们选择这样做,是为了在相同的模型对齐方法下,对适应领域的模型和基础模型进行公平的比较。LLaMA2-70B-Chat 是公开发布的使用 RLHF 训练的 LLaMA2-Chat 模型,它被认为是最先进的(SOTA)开源聊天模型。
A. 标记符
我们采用之前概述的四步流程,将 LLaMA2 令牌转换器(包含 32K 个令牌)调整为芯片设计数据集。约有 9K 个新标记符被添加到 LLaMA2 标记符中。如图 5 所示,在不同的芯片设计数据集中,经过调整的标记化器可将标记化效率提高 1.6% 至 3.3%。我们观察到,在公共数据上,令牌化器的效率没有明显变化。重要的是,即使在 DAPT 之前使用定制增强型标记器,我们也没有观察到 LLM 在公共基准上的准确性有明显下降。
图 5:ChipNeMo 令牌增强器的改进。
B. 领域自适应预训练
图 6 展示了 ChipNeMo 模型在芯片设计领域和开放领域学术基准 AutoEval 基准上的结果。我们的研究成果可总结如下:
图 6:ChipNeMo 的 AutoEval 基准测试结果
1) DAPT 模型在开放领域学术基准上的准确性略有下降。
2) DAPT 对领域本身的任务产生了巨大的积极影响。这种影响表现为内部设计知识和一般电路设计知识的显著提高。
3) 使用规模更大、性能更强的基础模型,可以在特定领域任务中获得更好的零点结果。此外,在使用卓越的基础模型后,DAPT 可增强领域模型,从而提高领域内任务的性能。
4) DAPT 对域内任务的改进与模型大小呈正相关,较大的模型在 DAPT 后对特定领域任务性能的提升更为明显。
C. 训练消融研究
在消融研究中,我们进行了多轮领域适应性预训练。我们提供了简要总结,详情请参见附录 B。
使用增强标记化器和原始标记化器进行训练的差异似乎可以忽略不计。因此,我们将学术基准上的准确率下降主要归因于领域数据。此外,在包括学术基准在内的大多数任务中,除 Verilog 编码有明显差异外,移除公共数据集只出现了轻微的退步。这表明,纳入 GitHub Verilog 数据有助于增强 Verilog 编码能力,尤其是在基础模型缺乏该领域足够数据的情况下。
在探索过程中,我们尝试采用更大的学习率,就像在 CodeLLaMA [32] 中那样。我们观察到,在初始训练步骤中,训练损失出现了很大的峰值。虽然这种方法最终改善了训练和验证损失,但我们注意到除了编码之外,所有特定领域和学术基准都出现了大幅下降。我们推测,较小的学习率起到了双重作用,既能通过 DAPT 促进领域知识的提炼,又能保持平衡,不会偏离基础模型太远,从而保留了一般的自然语言能力。
我们还探索了参数高效微调(PEFT)在领域自适应预训练(DAPT)中的应用。在此过程中,我们进行了两次实验,分别加入了 LoRA 适配器,引入了 2,640 万个(小)和 2.112 亿个(大)额外参数。在这两种情况下,我们的研究结果表明,与全参数 DAPT 方法相比,我们在域内任务上的准确率差距很大。此外,在对比小型和大型 PEFT 模型的结果时,我们发现域内任务的准确性略有提高,而大型模型则略有改善。我们认为,这种现象可能是由于为了容纳大量信息而必须训练大量参数,以及 PEFT 模型容易发生灾难性遗忘。
D. 训练成本
所有模型都使用 128 个 A100 GPU 进行了训练。我们估算了 ChipNeMo 的域自适应预训练相关成本,如表 IV 所示。值得注意的是,DAPT 只占从头开始预训练基础模型总成本的不到 1.5%。
表四:LLaMA2 模型的训练成本(GPU 小时)。预训练成本来源
E. RAG 和工程助理聊天机器人
我们使用 RAG 方法创建了一个基准来评估设计聊天助手的性能。该基准包括三类 88 个问题:架构/设计/验证规范(Specs)、测试平台回归文档(Testbench)和构建基础架构文档(Build)。对于每个问题,我们都指定了黄金答案以及设计文档中包含答案相关知识的段落。这些问题由设计人员根据设计文档集手动创建,作为检索数据存储。它包括约 1.8K 个文档,被分割成 67K 个段落,每个段落约 512 个字符。
首先,我们将领域适应性检索模型与 Sentence Transformer 和 e5 small unsupervised在每个类别上进行比较。每个模型都从数据存储中获取前 8 个段落。
如图 7 所示,我们的领域适应模型的性能比原始 e5 小型无监督模型高出 2 倍,比句子转换器高出 30%。
图 7:检索模型精度比较
Specs 类别的查询直接源自文档中的段落,因此其答案往往很好地包含在简洁的段落中,并能清楚地解决查询问题。另一方面,测试平台和构建类别的查询并不是直接来源于段落,因此它们的答案在获取的段落中往往并不明显,需要更多的上下文(详细示例见附录 C)。这在很大程度上造成了不同类别之间检索质量的差异。
我们对使用和不使用 RAG 的多个 ChipNeMo 模型和 LLaMA2 模型进行了评估。评估结果由人工评估员按 10 分制评分,如图 8 所示。
图 8:不同模型的人工评估。仅模型表示不含 RAG 的结果。RAG (命中)/(遗漏) 仅包括检索到的段落命中/遗漏其理想语境的问题,RAG (总计) 包括所有问题。
我们得出了以下结论:
-
RAG 大幅提高了人类得分。RAG 使 LLaMA2-13B-Chat*、ChipNeMo-13B-Chat 和 LLaMA2-70B-Chat 的得分分别提高了 3.82、2.19 和 5.05。请注意,即使 RAG 未命中,得分也普遍较高,尤其是在 LLaMA2 模型上。我们假设,额外的域内上下文有助于提高性能。
-
在模型评估和 RAG 评估中,ChipNeMo-13B-Chat* 的性能分别比类似规模的 LLaMA2- 13B-Chat* 高出 2.88 和 1.25。
-
使用 RAG 的 ChipNeMo-13B-Chat 与使用 RAG 的 5 倍大模型 LLaMA2-70B-Chat 获得了相同的分数(7.4),其中 LLaMA2-70B-Chat 在提取命中答案方面表现更好,但在未命中答案方面,领域适应性弥补了这一不足。
-
领域 SFT 使 ChipNeMo-13B-Chat 的性能提高了 0.28(有 RAG 时)和 0.33(无 RAG 时)。
所有模型的完整评估结果见附录 D。
F. EDA 脚本生成
为了在 EDA 脚本生成任务中评估我们的模型,我们创建了两种不同类型的基准。第一种是一组 "简单 "和 "中等 "难度的任务(1-4 行解决方案),通过与黄金响应进行比较,无需人工干预即可对其进行评估。由于构建和评估这些基准所需的工作,我们只为 Python 任务提供了这一评估集。第二组任务("困难")来自我们工程师选择的真实使用场景。这些任务要难得多,需要十几行代码才能解决。由于这些任务难以自动评估,我们让人类工程师在 0% 和 100% 之间判断正确性。这些基准的大小如表 V 所示。
我们正在努力扩大这些基准的规模和范围,以便进一步改进这些模型。我们发现,我们的模型无法回答一些较难的任务。这些任务需要了解许多工具应用程序接口,而模型似乎无法在适当组织控制流的同时确定适当的应用程序接口。为了缓解这一问题,我们在提示中添加了针对每个问题的人为上下文。该上下文包含对正确编写所需脚本所需的不同功能或属性的解释。我们仅为 "难以理解的上下文 "基准类别提供了这一内容。这也使我们能够研究基于检索的解决方案可能产生的影响,我们将其留待今后的工作中进行研究。
从图 9 中的消融结果可以看出,DAPT 和域 SFT 对我们的问题都很重要。如果没有 DAPT,模型几乎无法理解底层应用程序接口,在自动评估基准上的表现也很差。领域 SFT 则进一步改善了结果。我们认为这是因为我们的领域 SFT 数据有助于指导模型以最直接适用的方式呈现最终脚本。
图 9:EDA 脚本生成的评估结果
一个有趣的结果是,LLaMA2-70B 在 "Hard with Context "基准测试中的通过率。它在 Python 工具上的表现优于大多数模型,但在 Tcl 工具上的表现却差强人意。这很可能是因为当提供正确的上下文时,LLaMA2-70B 卓越的 Python 通用编码能力能够解决它没有训练过的新问题。然而,LLaMA2-70B 模型却无法将其编码能力推广到 Tcl 工具,这可能是因为它没有接触过大量的 Tcl 代码。这凸显了 DAPT 在处理低容量或专有编程语言时的优势。
G.错误总结与分析
为了评估我们的错误总结和分析模型,我们保留了一组 40 个错误,这些错误都是理想的总结对象。其中包括具有较长评论历史或其他数据,从而使人类难以快速总结的错误。然后,我们要求人类对两种总结模式以及 LLM 建议的错误分配进行评分。评价指标基于 7 点李克特量表。我们的结果见图 10。
图 10:错误汇总与分析评估结果
在所有三项任务中,ChipNeMo-13B-Chat 模型的表现都优于基本的 LLaMA2- 13B-Chat* 模型,在技术总结、人员总结和任务推荐方面的 7 点 Likert 分数分别提高了 0.82、1.09 和 0.61。在管理总结和任务分配方面,领域 SFT 也比没有领域 SFT 的情况下有明显改善。
我们假设,与技术摘要任务的质量和技术内容更依赖于模型对自然语言语义的理解不同,管理摘要要求模型理解如何在摘要输入数据的同时保留关键人员/工程师的姓名。这就需要对 LLM 进行更细致的基于指令的微调。
LLaMA2-70B-Chat 模型在所有三项任务中的表现也非常出色,在所有任务中均击败了 ChipNeMo-13B 模型。我们认为,有效的分块和组合方案(分层和增量)、总结各阶段的指令提示选择、任务分配时的提示选择以及原始数据格式化/预处理有助于规避长语境挑战,使 LLaMA2-70B-Chat 即使在没有 DAPT 和域 SFT 的情况下也能获得高分。
讨论
A.领域适应的考虑因素
虽然领域适应的 ChipNeMo 模型比相应的基础模型有显著改进,但我们也观察到较大的 LLaMA2 70B 有时也能达到与 ChipNeMo 相似的精度,如图 8、图 9 和图 10 所示。最近的工作利用这些强大的模型来执行芯片设计任务。
然而,考虑使用较小模型所带来的成本效益也很重要。Pope 等人的研究表明,在相同延迟目标下,8B 模型的推理成本是 62B 模型的 8-12 倍[35]。此外,缩小模型尺寸还能使推理速度大幅提高,因为这样就能在单个 GPU 或节点上实现原本无法实现的推理[36]。与 LLaMA2 70B 模型不同的是,我们的 ChipNeMo 13B 模型可以加载到单个 A100 GPU 的内存中,无需任何量化。这使得推理速度在 GPU 正常运行情况下大幅提高,如果 GPU 低频运行,推理成本将大幅降低。
因此,在生产环境中决定使用较大的通用模型还是较小的专用模型时,必须考虑以下标准:
-
训练和推理的权衡:较小的领域适应模型可以与较大的通用模型相媲美。虽然领域适应会产生额外的前期成本,但使用较小的模型可显著降低运营成本。
-
用例的独特性:从图 6、图 9 和图 10 中可以看出,领域适配模型在很少出现在公共领域的任务(如使用专有语言或库编写代码)上的改进最大。事实上,我们的数据显示,即使为大型通用模型提供了手工挑选的上下文,它们在这种情况下的准确性也很难与领域适配模型相媲美。
-
领域数据的可用性:在有大量训练数据(即数十亿训练标记)的情况下,领域适配效果最好。积累了大量内部文档和代码的大型企业和项目通常会采用这种方法,但小型企业或项目则不一定。
-
终端用例多样性:针对特定任务对通用模型进行微调是可能的,但根据领域调整的模型适用于某一领域的各种任务。虽然我们在这项工作中只展示了 ChipNeMo 模型的三种用例,但只要有足够的 SFT 数据,它还可以随时重新用于其他用例。
B. 性能差距
尽管如附录 E 所示,ChipNeMo 在我们选定的应用中取得了令人印象深刻的结果,但所有应用的评估结果仍显示与人类专家的性能存在相当大的差距。我们正在考虑采用以下方法来缩小这一性能差距:
1)数据收集:我们可以扩大 DAPT 数据集,纳入更多内部专有数据。此外,我们还计划为 SFT 添加更多特定任务指令集,因为有证据表明,特定任务 SFT 能有效改善评估结果。
2)基础模型:我们希望更好、更大的基础模型能提高性能,如 LLaMA2 70B。我们还可以探索将 DAPT 应用于特定代码的基础模型,例如用于代码生成任务的 Code LLaMA 。
3)训练:我们还计划在 ChipNeMo 聊天模型上进行人类反馈强化学习(RLHF),使其更具通用性。我们计划利用在通用数据集上训练的预训练奖励模型。我们还计划进行长上下文训练[38],以克服需要长上下文的挑战,例如在错误总结应用中。一般来说,更长的上下文支持将有助于改进基于检索的聊天辅助方法以及代码生成。
4)检索:我们将进一步研究更好的 RAG 方法,用于工程助理聊天机器人和 EDA 脚本生成。对于工程助理聊天机器人,我们可以为不同的应用领域创建不同的数据存储。我们还可以将企业搜索引擎与 RAG 相集成,为各种问题查找相关上下文。对于代码生成,我们可以研究从现有代码和文档中自动检索上下文。
C. 基于代理的设计方法
我们在这项工作中试验的用例是对 LLM 的提示和响应能力的直接应用。代理指的是使用 LLM 来选择要采取的一系列行动,其中 LLM 充当推理引擎来驱动外部工具。芯片设计流程涉及许多现有的 EDA 工具和方法。我们相信,其中一些方法可以由领域适应型 LLM(如 ChipNeMo 模型)驱动的代理来推动。我们计划在未来研究基于代理的验证和优化设计方法。
相关工作
许多领域都有大量的专有数据,可用于训练特定领域的 LLM。一种方法是从头开始训练特定领域的基础模型,例如金融领域的 BloombergGPT、生物医学领域的 BioMedLLM ,以及科学领域的 Galactica 。这些模型通常是在超过 100B 的原始领域数据基础上训练出来的。第二种方法是领域自适应预训练(DAPT),它继续在额外的原始领域数据上训练预训练基础模型。在生物医学、计算机科学出版物、新闻和评论等特定领域任务中,它的性能略有提升。在一个例子中,在技术内容数据集上继续预训练基础模型,并在许多定量推理任务上取得了一流的性能。
检索增强生成(RAG)有助于将 LLM 置于生成准确信息和提取最新信息的基础上,从而改进知识密集型 NLP 任务。据观察,具有 RAG 的较小模型性能优于不具有 RAG 的较大模型。检索方法包括稀疏检索方法,如 TF-IDF 或 BM25[43],这些方法分析单词统计信息,并通过高维稀疏向量找到匹配文档。密集检索方法是在一个检索模型生成的嵌入空间上查找匹配文档,该检索模型是在一个大型语料库上预先训练的,可以在检索数据集上进行微调,也可以不进行微调。检索模型可以单独训练或与语言模型联合训练 。此外,有研究表明,现成的通用检索器可以显著改善基线语言模型,而无需进一步微调。还有人建议 RAG 通过从编码文档中检索来执行代码生成任务。
基础模型是完成模型,其聊天和指令跟踪能力有限。因此,需要对基础模型进行模型对齐处理,以训练相应的聊天模型。指令微调和人类反馈强化学习(RLHF)是两种常见的模型调整技术。指令微调使用指令数据集进一步训练基础模型。RLHF 利用人类反馈标记数据集来训练奖励模型,并在训练好的奖励模型的基础上应用强化学习来进一步改进模型。与指令微调相比,RLHF 通常更为复杂,对资源的需求也更大。因此,最近的研究也提出用更简单的方法来减少这种开销,如 DPO和 SteerLM 。
研究人员已开始将 LLM 应用于芯片设计问题。Dave 等早期研究首次探索了用语言模型(GPT-2)从英语生成 Verilog 的可能性。之后的研究表明,在从 GitHub 和 Verilog 教科书收集的 Verilog 数据集上,经过微调的开源 LLM(CodeGen)在 17 个 Verilog 问题上的表现优于最先进的 OpenAI 模型,如 code-davinci-002。提出了一个包含 150 多个问题的基准,并证明预训练语言模型的 Verilog 代码生成能力可以通过使用 LLM 生成的合成问题代码对进行引导,在有监督的微调下得到提高。Chip-Chat[7]利用会话流来设计和验证基于 GPT-4 和 GPT-3.5 的 8 位累加器微处理器。他们的研究结果表明,尽管 GPT-4 生成的代码质量相对较高,但在理解和修正错误方面仍然表现不够出色。ChipEDA 建议使用 LLM 生成 EDA 工具脚本。该研究还表明,在这项任务中,经过微调的 LLaMA2 70B 模型优于 GPT-4 模型。
结论
我们探索了适应领域的方法,以提高工业芯片设计任务的 LLM 性能。我们的结果表明,领域适应性预训练模型(如 ChipNeMo 13B-Chat)比其基础模型取得了相似或更好的结果。在工程助理聊天机器人、EDA 脚本生成以及错误总结和分析这三个用例中,我们都缩小了与功能更强大的 LLaMA2 70B 模型的差距。我们今后的工作重点是进一步改进 ChipNeMo 模型和方法,使其能够投入生产使用。
原文链接
https://blogs.nvidia.com/blog/2023/10/30/llm-semiconductors-chip-nemo/
*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。
今天是《半导体行业观察》为您分享的第3574期内容,欢迎关注。
推荐阅读
半导体行业观察
『 半导体第一垂直媒体 』
实时 专业 原创 深度
识别二维码 ,回复下方关键词,阅读更多
晶圆|集成电路|设备 |汽车芯片|存储|台积电|AI|封装
回复
投稿
,看《如何成为“半导体行业观察”的一员 》
回复 搜索 ,还能轻松找到其他你感兴趣的文章!