作者:
(1)刘明杰,NVIDIA{同等贡献};
(2)Teodor-Dumitru Ene,NVIDIA{同等贡献};
(3)NVIDIA 的 Robert Kirby {平等贡献};
(4)Chris Cheng,NVIDIA{同等贡献};
(5)Nathaniel Pinckney,NVIDIA{平等贡献};
(6)梁荣建,NVIDIA{同等贡献};
(7) 乔纳·阿尔本(Jonah Alben),NVIDIA;
(8)NVIDIA 的 Himyanshu Anand;
(9) 桑米特拉·班纳吉(Sanmitra Banerjee),NVIDIA;
(10)Ismet Bayraktaroglu,NVIDIA;
(11) NVIDIA 的 Bonita Bhaskaran;
(12)NVIDIA 公司的布莱恩·卡坦扎罗(Bryan Catanzaro)
(13)NVIDIA 的阿琼·乔杜里(Arjun Chaudhuri)
(14)莎朗·克莱(NVIDIA)
(15) NVIDIA 的比尔·戴利(Bill Dally)
(16) 劳拉·当(NVIDIA)
(17) 帕里克希特·德什潘德(Parikshit Deshpande),NVIDIA;
(18)Siddhanth Dhodhi,NVIDIA;
(19)Sameer Halepete,NVIDIA;
(20)埃里克·希尔(Eric Hill),NVIDIA;
(21) 胡嘉尚,NVIDIA;
(22)苏米特·贾恩(NVIDIA);
(23) NVIDIA 的 Brucek Khailany;
(24) 乔治·科凯(George Kokai),NVIDIA;
(25) 基肖尔·库纳尔(NVIDIA);
(26)李小薇,NVIDIA;
(27) 查理·林德(NVIDIA);
(28)刘浩,NVIDIA;
(29) 斯图尔特·奥伯曼(NVIDIA);
(30) 苏吉特·奥马尔(NVIDIA);
(31)Sreedhar Pratty,NVIDIA;
(23)乔纳森·雷曼(NVIDIA);
(33) 安巴尔·萨卡尔(Ambar Sarkar),NVIDIA;
(34)邵正江,NVIDIA;
(35) 孙汉飞,NVIDIA;
(36)Pratik P Suthar,NVIDIA;
(37)Varun Tej,NVIDIA;
(38)沃克·特纳(NVIDIA);
(39)徐凯哲,NVIDIA;
(40)NVIDIA 任浩星。
收集工作由一组 shell 和 Python 脚本实现,旨在识别相关的设计数据和文档,将其转换为纯文本(如果适用),使用基本质量指标进行过滤,计算校验和以进行精确的文件重复数据删除,并压缩以进行存储。收集流程未使用现成的 LLM 专用抓取和收集脚本,因为我们的目标是通过内部数据源(包括联网文件系统和内部 Web 应用程序)的现场数据收集来最大限度地减少空间需求。对于基于文件系统的收集,数据在进行质量过滤的同时被保存在原地,而不是在本地存储额外的原始数据集。
设计和验证数据收集涵盖各种源文件,包括 Verilog 和 VHDL(RTL 和网络表)、C++、Spice、Tcl、各种脚本语言以及与构建相关的配置文件。通过 REST API 调用和常规抓取收集来自内部 Web 服务的数据,在两种情况下均使用开源 BeautifulSoup [52] Python 库删除 HTML 格式,以尽量减少无意中删除编码示例,但代价是引入更多样板导航栏和其他 HTML 页面元素。我们的数据收集流程支持常规文档格式,包括 .docx、.pptx 和 .pdf,使用现成的 Python 转换库和开源工具。
由于大多数内部数据都被认为是高质量的,因此应用了最少的过滤:使用行数过滤来确保排除过大或过小的文件,并将文件分为手动编写和工具生成的大类。
在本节中,我们将展示我们领域自适应预训练模型的详细结果。我们还详细介绍了领域自适应预训练的消融实验。
DAPT 超参数:详细信息见表 VI。
自动评估结果:我们在表 VII 和表 VIII 中展示了自动评估基准的详细结果。为简单起见,在本节的其余部分,我们提供了消融研究的汇总基准结果:
•芯片:我们报告了表 III(5 次测试)中域内设计、脚本、错误和电路基准的平均结果。
• MMLU:我们报告了 MMLU(5 次测试)[22] 的总体结果,MMLU 是一个针对各种主题的流行聚合基准。
•推理:我们报告了常识推理(0 次测试)的流行公共基准测试的平均结果,包括 Winogrande [53]、hellaswag [54]、ARC-easy [55] 和 RACE-High [56]。
•代码:我们报告了贪婪解码的编码基准的平均通过率,包括 HumanEval [23]、VerilogEval-Machine [12] 和 VerilogEval-Human [12]。
标记器增强:我们使用原始 LLaMA2 标记器和增强标记器对 DAPT 进行了实验,如第 III-A 节所述。图 11 描绘了使用原始未修改的标记器的 ChipNeMo 的平滑训练损失。与图 2 相比,我们观察到增强标记器在初始化时具有更大的训练损失,因为在基础模型预训练期间从未观察到添加的标记。对于 DAPT,1 个时期的训练损失也类似。
表 IX 列出了汇总的自动评估基准测试结果。我们注意到,谨慎的标记器增强和权重初始化对一般学术基准测试中的模型性能影响很小。DAPT 显著提高了任何标记器的领域基准测试,包括 Verilog 编码(HumanEval 没有太大区别)。我们得出结论,增强标记器的好处是改进了标记器和训练效率,而不会降低模型的通用语言和领域能力。
公共数据集混合:如第二部分 A 节所述,我们在 DAPT 中包含了公共数据,这些数据是从常用的公共数据集中抽样的,用于基础模型预训练。我们主要希望在 DAPT 中混合 Wikipedia 等公共数据可以帮助“纠正”标记器增强带来的干扰,并提高一般的自然语言能力
模型。我们仅使用域数据进行了另一轮带有标记器增强的 DAPT,训练步骤数相同,相当于大约 1.1 个数据时期。我们发现公共数据混合略微改善了结果。我们在表 X 中展示了详细结果。
图 12 显示了使用增强型标记器(包括混合公共数据集)的 ChipNeMo-7B 的训练损失。我们观察到初始训练步骤中训练损失大幅增加,7B 模型的最终训练损失甚至比 13B 原始 DAPT 超参数更好。然而,我们注意到,如表 XII 所示,包括域内芯片设计在内的自然语言基准测试中出现了大幅退化。编码能力的提高与 [32] 的发现一致。
我们强调,我们的案例与 [32] 中的案例不同。虽然我们也从预训练的检查点进行“持续预训练”,但我们更希望模型在一般能力上保持较高的性能,同时
将领域数据集信息和知识(在模型预训练中看不到)提炼为模型权重。相比之下,[32] 使用公开可用的代码数据,这些数据主要缺乏自然语言元素,强调它们主要关注与编码相关的任务。我们假设较小的学习率对领域适应起着双重作用,促进通过 DAPT 提炼领域知识,同时保持平衡,不会偏离基础模型太远,从而保留一般的自然语言能力,同时显着提高领域内任务的性能
参数高效微调 (PEFT):参数高效微调冻结预训练模型权重,并在较小的适配器模型中注入可训练参数,以便高效地微调下游任务。我们探索使用低秩自适应 (LoRA) [16] 在 DAPT 中使用 PEFT。由于我们的转换器层实现将 KQV 融合到单个投影中,因此我们以组合方式为每个自注意层添加单个低秩投影的 LoRA 适配器。我们使用原始 LLaMA2 标记器在 LLaMA2-13B 模型上进行实验,使用表 VI 中相同的 DAPT 训练设置。我们进行了两次实验,分别引入了 2640 万(小)和 2.112 亿(大)的额外可训练参数。
图 13 显示了 LoRA 模型的训练损失曲线,并与全参数训练进行了比较。对于这两个 LoRA 模型,损失迅速收敛并在超过某个点后停止减少。表 XIII 报告了对 LoRA 模型的评估结果。这两个 LoRA 模型在领域内芯片设计任务上的表现都明显不如全参数训练。与非 DAPT 模型相比,LoRA 模型在芯片设计任务方面有所改进,其中较大的模型表现出略好(但不显著)的结果。
手动生成训练样本非常耗费精力,因此我们选择实施一个流程来自动生成它们。由于我们使用对比学习来微调我们的模型,因此每个样本都需要一组正样本和负样本,尤其是硬负样本,以最大限度地提高准确率。
1)数据集采样程序:图 14 描述了生成样本的步骤:
• 步骤 1:从文档语料库中随机选择一段
• 步骤 2:使用语言模型 (Vicuna) 从文章中生成有效查询
• 步骤 3:使用预先存在的检索模型(句子转换器)从文档语料库中获取查询的前 N 个段落,其中每个段落都是潜在的硬负样本
• 步骤 4:可能有些提取的段落实际上是积极的,因此使用相同的语言模型过滤掉积极的段落
• 步骤 5:如果经过此过滤过程后仍没有足够的负面段落,则使用语料库中的随机段落进行补充
在我们的初步研究中,我们使用了 Vicuna [4] 和 Sentence Transformer [33];然而,它们可以很容易地分别用 LLaMA2 [5] 和 BM25 [42] 替换,以生成具有商业可行性的检索模型。
2) 匹配质量比较:并非所有匹配都是平等的。下面 Spec 示例中的段落清楚而完整地回答了查询。Build 示例中的段落包含答案;但是,需要更多上下文来回答查询。
规格示例:命中段落清楚地回答了查询。
构建示例:需要其他信息才能完全回答查询。例如:什么是 DL?我们如何知道 Arch-Build-Hotseat-XXX 是 DL?
D. 附加评估数据
表 XIV 显示了工程助理聊天机器人应用程序上所有模型的评估数据。
表 XV 展示了我们对 EDA 脚本生成任务中所有模型的评估结果。
表 XVI 展示了我们对所有模型在错误总结和分析任务中的评估结果。
1)工程助理聊天机器人:
2)EDA 脚本生成:一些函数名称和命令被混淆。
3)Bug总结与分析:用户名,芯片名和路径被混淆了。