paint-brush
ChipNeMo:适用于芯片设计的领域适配法学硕士 (LLM):数据集经过@textmodels

ChipNeMo:适用于芯片设计的领域适配法学硕士 (LLM):数据集

太長; 讀書

研究人员提出了 ChipNeMo,利用领域自适应来增强用于芯片设计的 LLM,实现模型尺寸缩小 5 倍,同时获得更佳的性能。
featured image - ChipNeMo:适用于芯片设计的领域适配法学硕士 (LLM):数据集
Writings, Papers and Blogs on Text Models HackerNoon profile picture
0-item

作者:

(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 任浩星。

链接表

数据集

A.DAPT 数据集


在领域自适应预训练 (DAPT) 期间,我们结合 NVIDIA 专有芯片设计特定数据源和公开可用的数据集来组装数据集。


芯片设计数据集:我们的内部数据集包含与芯片设计相关的各种文本源,涵盖设计、验证、基础设施和内部文档。表 I 提供了过滤后收集的数据的细目分类,以及使用 LLaMA2 标记器对应的标记数。我们通过收集所有相关的内部数据,然后根据文件扩展名按文件类型进行过滤并区分机器生成的内容和人工编写的内容来构建数据集。虽然我们根据三个特定用例进行了评估,但我们并没有特别将数据集限制在已知与这些用例相关的来源,因为我们相信加入额外的领域知识会提高性能。经过收集、清理和过滤后,内部数据训练语料库有 231 亿个标记。数据收集过程的更多细节在附录 A 中介绍。


公共数据集:我们使用来自各种来源的公开可用数据样本来扩充芯片设计特定数据,这是开发基础大型语言模型的常见做法。我们的方法是重用来自其他语言模型的公共训练数据,但前提是这些数据必须是公开可访问的并与开源兼容。这些数据集与 LLaMA2 [5] 中使用的预训练数据表现出高度相关性,目的是在 DAPT 期间保留一般知识和自然语言能力。ChipNeMo 使用的公共数据集可分为两类:自然语言和代码。对于自然语言组件,我们从维基百科数据 [17] 中提取数据,因为它因其高数据质量而受到广泛好评。对于代码,我们利用 GitHub 数据 [18],重点关注内部数据芯片设计数据集中也存在的编程语言,例如 C++、Python 和 Verilog。为了确保整体数据集代表预训练分布,我们执行了子采样操作,从这些公共数据集中采样出约 9.2% 的总训练标记,并平衡了自然语言和代码的表示。


数据融合:我们收集的领域数据中很大一部分由来自不同来源的未注释代码组成。为了增强模型对特定领域知识的理解,我们在 2 到 4 个训练阶段中对代码数据进行了下采样,同时对自然语言数据(特别是设计文档)进行了上采样。我们还增加了我们认为与下游应用更相关的数据的表示,例如人工编写的 EDA 工具脚本。此外,我们整合了 1 个阶段的公开领域数据。训练的 token 分布详情如表 I 所示。


B. SFT 指令数据


在监督微调 (SFT) 期间,我们使用可供商业使用的通用聊天 SFT 指令数据集。该数据集主要由以下数据集的公开指令组成,包括 OASST [19]、FLAN [20]、P3 [21] 和少量广泛领域的专有数据集,包括头脑风暴、开放式问答、重写、总结等各种主题。值得注意的是,我们在此讨论的 SFT 指令数据侧重于一般自然语言任务,不包含与芯片设计中的下游用例相关的任何信息或任务。总的来说,这个数据集包含 128,000 个训练样本。


此外,我们精心组装了一个领域特定教学数据集,以使模型与下游用例保持一致。这些示例由主题专家精心制作,并格式化为单轮问答。表 II 描述了我们领域特定教学数据集的数量。值得注意的是,与大量生成聊天教学数据相比,领域特定教学数据集中的训练样本总数相当小。


C. 自动评估


为了快速定量地评估各种模型的准确性,我们为每个用例建立了以多项选择问答形式构建的评估标准,旨在与已建立的基准(例如 MMLU [22])紧密结合。在制定这些多项选择题的过程中,与领域专家的合作至关重要。目标是确保每个问题至少包含一个复杂的答案选项,从而对领域专业知识有限的个人构成挑战。我们还非常注意防止问题被我们特定领域的 SFT 数据无意中污染。除了每个用例的基准之外,还为一般电路设计知识创建了一个额外的基准,涵盖模拟和数字设计主题。评估基准的多项选择题数量如表 III 所示。


当我们报告上述基准测试的结果时,我们会取五次不同运行的平均结果,以减轻测试过程中方差和噪声的影响。每次迭代都采用一组 5 次样本,并在每次运行中引入变化。


除了这些特定领域的评估基准之外,我们还包含了常用的公开 LLM 学术基准。此外,我们通过评估 Python 的 HumanEval [23] 和 Verilog 的 VerilogEval [12] 来衡量模型的代码生成能力。