作者:
(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 任浩星。
ChipNeMo 实现了多种领域适配技术,以使 LLM 适应芯片设计领域。这些技术包括用于芯片设计数据的自定义标记器、使用大量领域数据进行领域自适应预训练、使用领域特定任务进行监督微调以及使用微调检索模型进行检索增强生成。我们将在本节中说明每种技术的细节。
A. 标记器
在调整预训练的标记器时,主要目标是提高特定领域数据的标记化效率,保持通用数据集的效率和语言模型性能,并最大限度地减少重新训练/微调的工作量。为了实现这一目标,我们开发了一种四步方法:
• 步骤 1:使用领域特定数据从头开始训练标记器。
• 步骤 2:从新标记器 (tokenizer) 的词汇表中,识别通用标记器 (tokenizer) 中不存在且通用数据集中很少出现的标记 (token)。
• 步骤3:使用步骤2 中新识别的标记来扩展通用标记器。
• 步骤4:利用通用标记器初始化新标记的嵌入。
具体来说,对于步骤 4,当遇到新标记时,使用预训练的通用标记器对其进行标记。新标记的嵌入通过对通用标记器 [24] 生成的标记的嵌入进行平均来确定,并将输出层权重初始化为零。
步骤 2 通过选择性地引入在通用数据集中不常见的新标记,帮助维持预训练 LLM 在通用数据集上的性能。步骤 4 通过在通用标记器指导下初始化新标记的嵌入,减少了重新训练/微调 LLM 所需的工作量。
B.领域自适应预训练
在我们的研究中,我们将 DAPT 应用于预训练的基础基础模型 LLaMA2 7B/13B。每个 DAPT 模型都使用其相应的预训练基础模型的权重进行初始化。我们将我们的 DAPT 模型命名为ChipNeMo 。我们采用第 III-A 节中描述的标记器增强,并相应地初始化嵌入权重 [24]。我们采用标准自回归语言建模目标对领域特定数据进行进一步的预训练。所有模型训练过程均使用 NVIDIA NeMo 框架 [25] 进行,并结合张量并行 [26] 和闪存注意 [27] 等技术来提高效率。
图 2 展示了 ChipNeMo 在指定超参数下的训练损失。我们确实观察到了训练损失的峰值。与 [28] 中的假设相反,我们假设在我们的场景中,这些峰值可以归因于“坏数据”,因为这些异常似乎始终发生在同一模型的类似训练步骤中,甚至在不同模型大小中也是如此。我们选择不解决这个问题,因为这些异常似乎并没有显著阻碍后续训练步骤(验证损失没有明显下降),这可能是因为我们应用了较低的学习率。
C.监督微调
在 DAPT 之后,我们使用监督微调 (SFT) 执行模型对齐。我们对所有模型采用与 DAPT 相同的超参数训练配置,但使用减小的全局批次大小 128。所有 SFT 数据均根据以下聊天模板进行结构化:
<extra_id_0>系统\n{系统}
<extra_id_1>用户\n{user_utterance}
<extra_id_1>助手\n{chipnemo_response}
…
我们采用自回归优化目标,实施一种策略,其中与源自系统和用户提示的标记相关的损失被掩盖 [5]。这种方法确保在反向传播期间,我们的重点完全集中在答案标记的优化上。
我们将领域 SFT 数据集(包含约 1.1k 个样本)与更广泛的通用聊天 SFT 数据集(包含 128k 个样本)相结合。然后,我们在对数据进行随机打乱后进行了一个时期的微调。我们进行了多个时期的实验,涉及增强领域特定 SFT 数据集。然而,很明显,当提出领域内的问题时,该模型很快就表现出过度拟合的迹象,经常重复领域 SFT 数据集中不相关的答案。
此外,我们仅使用一般聊天数据集进行了额外的 SFT,不包括任何特定领域的 SFT 数据。为清楚起见,我们将所有 ChipNeMo 模型指定如下:
ChipNeMo-Chat:使用领域和一般聊天数据进行微调的模型;
ChipNeMo-Chat(noDSFT):专门使用一般聊天数据进行微调的模型。
我们还直接在聊天对齐模型(例如 LLaMA2-Chat 模型)上试验了 DAPT。我们发现 DAPT 显著降低了模型的对齐效果,使得生成的模型无法用于下游任务。
D.检索增强生成
众所周知,LLM 可以生成不准确的文本,即所谓的幻觉 [29]。尽管这种现象尚未完全理解,但我们仍必须减轻幻觉的影响,因为它们在工程助理聊天机器人环境中尤其成问题,因为准确性至关重要。我们的建议是利用检索增强生成 (RAG) 方法。RAG 尝试从数据库中检索相关段落,并将其与问题一起包含在提示中,这使 LLM 能够产生更准确的答案。我们发现,对 RAG 使用领域自适应语言模型可以显著提高我们领域特定问题的答案质量。此外,我们发现,使用适量领域特定训练数据对现成的无监督预训练密集检索模型进行微调可以显著提高检索准确性。我们的领域自适应 RAG 实现图如图 3 所示。
我们使用 Tevatron 框架 [31] 对e5_small_unsupervised模型 [30] 进行微调,并使用 3000 个特定领域的自动生成样本,创建了领域自适应检索模型。样本生成和训练过程在附录 C 中介绍。
尽管微调检索模型可以带来显著的收益,但事实是,检索仍然难以处理那些不直接映射到文档语料库中的段落或需要段落中不存在的更多上下文的查询。不幸的是,这些查询也更能代表工程师在实际情况下会提出的查询。将检索与领域自适应语言模型相结合是解决此问题的一种方法。