InternLM2大模型的技术细节(1)

183 篇文章 0 订阅
176 篇文章 1 订阅

24年3月来自上海AI实验室、商汤科技、香港中文大学和复旦大学的技术报告“InternLM2 Technical Report“。
在这里插入图片描述
这是关于开源大语言模型“书⽣·浦语2.0”(InternLM2)的介绍。ChatGPT 和 GPT-4 等大语言模型 (LLM) 的发展引发了人们对通用人工智能 (AGI) 的讨论。然而,在开源模型中复制此类进步一直具有挑战性。InternLM2通过创新的预训练和优化技术,在 6 个维度和 30 个基准的综合评估、长上下文建模和开放式主观评估中的表现均更优。InternLM2 的预训练过程非常细致,重点是准备各种数据类型,包括文本、代码和长上下文数据。InternLM2 有效地捕获长期依赖关系,最初在 4k 个 tokens 上进行训练,然后在预训练和微调阶段推进到 32k 个 tokens,在 200k 个“大海捞针”测试中表现出色。 InternLM2 进一步利用监督微调 (SFT) 和条件在线强化学习(COOL RLHF)策略,解决了人类偏好和奖励黑客攻击的冲突问题。

引言

已知一些著名的开源 LLM,如 LLaMA(Touvron,2023a;b)、Qwen(Bai,2023a)、Mistral(Jiang,2023)和 Deepseek(Bi,2024)。大语言模型 (LLM) 的开发包含几个主要阶段:预训练、有监督微调 (SFT) 和人类反馈中强化学习 (RLHF) (Ouyang,2022)。预训练主要基于利用大量自然文本语料库,积累数万亿个tokens。此阶段旨在为 LLM 配备广泛的知识和基本技能库。数据质量被认为是预训练期间最关键的因素。

如何有效地扩展 LLM 的上下文长度是当前的热门研究课题,因为许多下游应用(例如检索增强生成 (RAG)(Gao,2023)和智体(Xi,2023))都依赖于长上下文。 InternLM2 首先采用组查询注意 (GQA) 来减少推断长序列时的内存占用。在预训练阶段,用 4k 上下文的文本初始训练 InternLM2,然后将训练语料库转换为高质量的 32k 文本进一步训练。之后通过位置编码外推(LocalLLaMA,2023),InternLM2 在 200k 上下文的“大海捞针”测试中取得了优异的表现。

在长上下文预训练之后,用有监督微调 (SFT) 和人类反馈中强化学习 (RLHF) 来确保模型很好地遵循人类指令并与人类价值观保持一致。值得注意的是,在这些过程中构建相应的 32k 数据,进一步提高 InternLM2 的长上下文处理能力。此外,引入条件在线 RLHF (COOL RLHF),其采用条件奖励模型来协调不同但可能相互冲突的偏好,并在多轮中执行近端策略优化 (PPO) 以减轻每个阶段出现的奖励黑客攻击。为了阐明 RLHF 的影响,还发布有 RLHF 前和 RLHF 后阶段的模型,分别命名为 InternLM2-Chat-{size}-SFT 和 InternLM2-Chat-{size}。

基建

训练框架InternEvo

InternLM2是用高效轻量级的预训练框架 InternEvo 进行模型训练。该框架在数千个 GPU 上扩展模型训练。这是通过数据、张量(Shoeybi,2019)、序列(Korthikanti,2023 年)和流水线(Huang,2019)等并行性的组合实现的。为了进一步提高 GPU 内存效率,InternEvo 结合了各种零冗余优化器 (ZeRO)策略(Rajbhandari,2020),大大减少了训练所需的内存占用。此外,为了提高硬件利用率,将 Flash Attention 技术(Dao,2023)和混合精度训练(Narang,2017)与 BF16 结合起来。

在数千个 GPU 上训练 InternLM 时,InternEvo 表现出强大的扩展性能。如图所示,在 8 个 GPU 上训练全局批次大小为 400 万个 token 的 InternLM-7B 时,InternEvo 实现了 64% 的模型 FLOP 利用率 (MFU)。将训练扩展到 1024 个 GPU 后,InternEvo 在全局批次大小相同的情况下保持了53% 的 MFU。这种级别的扩展性能尤其难以实现,因为批次大小保持不变,并且随着 GPU 数量的增加,计算与通信的比率会降低。相比之下,DeepSpeed (Rasley et al., 2020) 在使用 ZeRO-1 (Rajbhandari et al., 2020) 和 MiCS (Zhang et al., 2022) 在 1024 个 GPU 上训练 InternLM-7B 时,仅能实现约 36% 的 MFU。

添加图片注释,不超过 140 字(可选)

InternEvo 还表现出强大的序列长度扩展能力,在训练不同大小的 LLM 时支持 256,000 个 tokens。例如,在训练序列长度为 256,000 个 tokens 的 InternLM-7B 模型时,InternEvo 可以实现近 88% 的 MFU。相比之下,DeepSpeed-Ulysses 和 Megatron-LM 只能达到约 65% 的 MFU。在更大规模的 LLM 中,例如具有 300 亿或 700 亿个参数的模型,训练性能也得到了这种提升。

减少通信开销。在分布式 LLM 训练中,内存利用率和通信成本之间存在权衡。最初,可以通过减少通信规模来有效降低通信成本。这涉及将通信限制在较小的 GPU 组(可能在同一节点内),从而降低总体通信成本。基于这一原则,InternEvo 实施一套自适应分片(sharding)技术来解决通信挑战,以实现强大的扩展性能(Chen,2024b)。这些包括全副本、全分片和部分分片,允许模型状态的每个组件(参数、梯度和优化器状态)独立选择最合适的分片方法和设备网格配置。这种灵活性有助于在 GPU 基础架构中更细致地分布模型状态。InternEvo 还引入了一个优化框架,旨在识别最有效的分片因子。这旨在最大限度地减少通信费用,同时遵守 GPU 的内存限制。

通信-计算重叠。InternEvo 战略性地协调通信和计算,以优化整体系统性能,从而进一步减少通信开销。在使用参数分片时,模型的整个参数分布在多个 GPU 上,以节省 GPU 内存。在训练步骤中每个微批次的前向和后向传递期间,InternEvo 通过 All-Gather 高效地预取即将到来的层的完整参数集,同时计算当前层。生成的梯度通过 Reduce-Scatter 在参数分片组内进行同步,随后用 All-Reduce 在参数分片组之间进行同步。这些通信过程巧妙地与后向计算重叠,从而最大限度地提高了训练流水线的效率。在优化器状态分片的情况下,GPU 通过 Broadcast 在分片组内广播更新的参数,InternEvo 采用与下一个训练步的前向计算战略重叠。这些重叠方法有效地平衡了通信开销和计算执行时间,从而显著提高了整体系统性能。

长序列训练。长序列训练的主要挑战之一是计算速度和通信开销之间的权衡。 InternEvo 将 GPU 内存管理分解为一个分层空间,具有四个并行维度(数据、张量、序列和流水线)和三个分片维度(参数、梯度和优化器状态)(Chen,2024a)。对每个维度的内存和通信成本进行分析,利用执行模拟器来确定和实施最佳并行化策略。可以根据训练规模、序列长度、模型大小和批次大小自动搜索最佳执行规划。凭此InternEvo 展示在训练期间处理长上下文(最多 100 万个tokens)的能力。 InternEvo 还实现内存管理技术来减少 GPU 内存碎片,这是长序列训练场景中常见的问题。它用内存池进行统一内存管理,并引入了一种碎片整理技术,可以主动整合小内存块以防止内存不足错误。

容错。在 GPU 数据中心有效训练 LLM,经常面临硬件故​​障频繁、并行化策略复杂以及资源利用不平衡等问题。为了解决这些问题,对来自 GPU 数据中心的六个月 LLM 开发工作负载跟踪进行了深入研究(Hu,2024)。这项研究发现 LLM 与以前的深度学习工作负载之间的差异,并探讨资源利用模式和作业出错的影响。基于此分析,引入了两项系统工作:一个容错预训练系统,通过 LLM 相关的故障诊断和自动恢复来增强容错能力,以及一个用于评估任务的解耦调度系统,提供及时的模型性能反馈。在实现中,加入一种异步保存机制,定期以预定义的间隔将模型权重和优化器状态存档到分布式文件和目标存储中。在整个训练过程中,每个 GPU 首先将其模型状态保存在本地存储中,然后异步地将这些数据上传到远程分布式存储系统。这个双步过程可确保在系统自动检测到偶尔的硬件或网络故障时,只有极少量的训练进度会丢失。为了优化存储空间,系统地将这些临时模型检查点从热存储转移到具有成本效益的冷存储。此外,即使并行化配置发生变化,系统也可以无缝恢复模型训练,从而为训练流程提供灵活性和连续性。

交互式训练。InternEvo 的效率也在人类反馈中强化学习 (RLHF) 阶段得到展示,其中部署多个 LLM 进行交互式训练。例如,在近端策略优化 (PPO) 过程中,用四个大小相同的模型并训练其中两个;InternEvo 使每个模型都能以其最佳配置执行。为了增强多个模型的协调性,开发一个基于 InternEvo 和 Ray (GitHub - ray-project/ray: Ray is a unified framework for scaling AI and Python applications. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.)的创新型 RLHF 框架。该框架的特点是灵活性和可扩展性,使其能够有效地大规模运行。它能够与各种 LLM 执行引擎集成并支持各种算法设计。有关“对齐”概念的全面描述。

模型架构

Transformer (Vaswani,2017) 因其出色的并行化能力而主要用作大语言模型 (LLM) 的主干,充分利用了 GPU 的强大功能 (Brown,2020;Chowdhery,2023;Zeng,2023)。LLaMA (Touvron,2023a) 在 Transformer 架构的基础上,用 RMSNorm (Zhang & Sennrich,2019) 替换 LayerNorm (Ba,2016),并将激活函数设置为 SwiGLU (Shazeer,2020),从而提高了训练效率和性能。自 LLaMA (Touvron,2023a) 发布以来,社区一直积极致力于增强围绕 LLaMA 架构构建的生态系统。其中包括高效推理(lla,2023)和算子优化(Dao,2023)等方面的进步。为了确保模型 InternLM2 与这个成熟的生态系统以及其他知名的 LLM(如 Falcon(Almazrouei et al.,2023)、Qwen(Bai et al.,2023a)、Baichuan(Yang et al.,2023)、Mistral(Jiang et al.,2023))无缝衔接,选择遵守 LLaMA 的结构设计原则。为了提高效率,合并 Wk、Wq 和 Wv 矩阵,这使得预训练阶段的训练加速超过 5%。此外,为了更好地支持不同的张量并行 (tp) 变换,重新配置矩阵布局。没有直接堆叠 Wk、Wq 和 Wv 矩阵,而是对每个头的 Wk、Wq 和 Wv 采用交错方法,如图所示。这种设计修改有助于沿矩阵的最后一个维度拆分或连接来调整张量并行大小,从而增强模型在不同分布式计算环境中的灵活性。 InternLM2 旨在推断超过 32K 的上下文,因此,InternLM2 系列模型都选择分组查询注意 (GQA) (Ainslie,2023),以便它可以在高速和低 GPU 内存下推断非常长的上下文。

添加图片注释,不超过 140 字(可选)

预训练

预训练数据

大规模语言模型(LLM)的预训练深受数据的影响,数据加工主要面对的挑战包含敏感数据的处理、全面知识的覆盖以及效率与质量的平衡。

1 文本数据

预训练数据集的来源为网页、论文、专利和书籍。为了将这些原始数据转化为预训练数据集,首先将所有数据标准化为指定格式,然后根据内容类型和语言进行分类,并将结果存储为JSON Lines(jsonl)格式;然后,对所有数据应用包括基于规则的过滤、数据去重、安全过滤和质量过滤等多个处理步骤。

数据来源分布。根据数据来源对预训练数据集中的文档数量、存储容量和容量占比进行了统计分析,结果如表所示。其中,主要来源是中文和英文网页,占总量的86.46%。尽管其他来源(如书籍和技术文献)的数据量占比相对较少,但它们的平均文档长度更长、内容质量相对较高,因此同样重要。

添加图片注释,不超过 140 字(可选)

数据处理流水线。数据处理线如图所示。整个数据处理流水线首先将来自不同来源的数据标准化以获得格式化数据。然后,使用启发式统计规则对数据进行过滤以获得干净数据。接下来,使用局部敏感哈希(LSH)方法对数据去重以获得去重数据。然后,应用一个复合的安全策略对数据进行过滤,得到安全数据。对不同来源的数据采用了不同的质量过滤策略,最终获得高质量预训练数据。

添加图片注释,不超过 140 字(可选)

数据格式化。以网页数据为例详细介绍数据处理流水线。网页数据主要来自Common Crawl。首先,需要解压缩原始的Warc格式文件,并使用Trafilatura (Barbaresi, 2021)进行HTML解析和主文本提取。然后,用pycld2库进行语言检测和主文本分类。最后,为数据分配一个唯一标识符,并以jsonl(JSON行)格式存储,从而获得格式化数据。

基于规则的处理。从互联网随机提取的网页数据通常包含大量低质量数据,如解析错误、格式错误和非自然语言文本。常见的做法是设计基于规则的正则化和过滤方法来修改和过滤数据,如 (Rae et al., 2021)、C4 (Dodge et al., 2021)和RefinedWeb (Penedo et al., 2023)。基于对数据的观察,设计一系列启发式过滤规则,重点关注分隔和换行中的异常、异常字符的频率以及标点符号的分布。通过应用这些过滤器,得到了干净数据。

去重。互联网上存在的大量重复文本会对模型训练产生负面影响。因此,采用基于局部敏感哈希 (LSH)的方法对数据进行模糊去重。更具体地说,用MinHash方法(Broder, 1997),在文档的5-gram上使用128个哈希函数建立签名,并使用0.7作为去重阈值。其目标是保留最新数据,即优先考虑具有较大Common Crawl数据集版本号的数据。之后,得到去重数据。

安全过滤。互联网上充斥着有毒和色情的内容,使用这些内容进行模型训练会对模型的表现产生负面影响,增加生成不安全内容的可能性。因此,采用一种综合性的安全策略,结合了“域名屏蔽”、“关键词屏蔽”、“色情内容分类器”和“有害性分类器”来过滤数据。具体来说,构建一个包含大约1300万个不安全域名的屏蔽域名列表,以及一个包含36,289个不安全词汇的屏蔽词列表,用于初步的数据过滤。考虑到关键词屏蔽可能会无意中排除大量数据,在编制屏蔽词列表时采取谨慎的方法。

为了进一步提高不安全内容的检测率,用来自Kaggle的“有害评论分类挑战赛(Toxic Comment Classification Challenge)”数据集对BERT模型进行微调,从而得到了一个有害性分类器。从去重后的数据中抽取一些样本,并使用Perspective API对其进行标注来创建色情分类数据集。然后,用这个数据集微调BERT模型,产生一个色情分类器。最后,通过这两个分类器对数据进行二次过滤,过滤掉分数低于阈值的数据,得到了安全数据。

质量过滤。与书籍、论文和专利等来源相比,从互联网获取的数据包含大量低质量内容。根据观察,这种低质量内容的主要原因是两个方面:1. 互联网上充斥着营销广告,这些广告往往重复性较强,信息含量较低。2. 许多网页由文章摘要或产品描述的列表组成,导致提取的文本难以阅读且缺乏逻辑连贯性。

为了过滤这些低质量内容,首先组织人工数据标注。在广告分类任务中,标注人员被要求识别数据中是否包含广告内容(无论是整体还是部分广告都被标记为低质量内容)。在流畅性分类任务中,标注人员被要求在一致性、噪声、信息含量和语法四个维度上对数据进行评分,从而得到一个全面的流畅性得分。然后用这些标注的数据微调BERT模型,得到一个广告分类器和一个流畅性分类器。最后,用这两个分类器对数据进行二次过滤,过滤掉得分低于阈值的数据,得到高质量预训练数据。

2 代码数据

编程是LLM的一项关键技能,它为多种下游应用提供支持,例如编码辅助、软件开发以及构建可使用工具的智体。此外,(Groeneveld et al. 2024) 指出,通过在代码数据上进行训练可以增强LLM的推理能力,因为代码通常比自然语言结构更清晰、更严谨、更可预测。

代码数据的来源有GitHub、公共数据集以及一些与编程相关的在线资源:如问答论坛、教程网站和API文档等。统计数据如图所示。

添加图片注释,不超过 140 字(可选)

如表所示反映了基于训练评分模型的数据质量评估。高质量数据将具有更高的采样权重,并可以在预训练阶段进行多次训练。中等质量数据具有正常的采样权重,通常训练一次。低质量数据被排除在外,因为实证发现,尽管它们的比例相对较小,但去除它们对于优化模型性能和确保训练稳定性至关重要。

添加图片注释,不超过 140 字(可选)

格式清理。所有数据都转换为统一的Markdown格式。尽管并没有在格式清理上投入太多的精力,但是仍然有一小部分数据中出现了损坏的HTML或XML格式,应用一套启发式规则来确保数据的格式正确。选择Markdown格式是因为它能最大化的减少格式化后的 tokens 开销,并且它对代码和自然语言交织的数据具有更好的兼容性。因为根据代码之间的依赖关系连接多个代码文件,预训练实际使用的数据格式更为复杂。主要思想是利用交织代码和自然语言的数据,这对于教会模型编程至关重要。这一点在最近的研究中也有提及(Guo et al., 2024)。

数据去重。代码数据的去重操作与自然语言的去重操作类似,但除了分词,因为这会影响超参数的选择。例如,Python示例使用两个空格、四个空格或制表符来表示缩进。传统的空格分词器,或者为自然语言定制的分词器,可能会错误地将这些示例评估为不同的数据。一个有效的分词器对于提高去重策略的整体效果至关重要。尽管最近的研究已经探讨在段落或行的级别进行细粒度去重,但仍然在文件级别进行去重,以保持上下文的完整性。

质量过滤。数据质量是LLM研究中一个关键而模糊的方面,主要是难以量化其对模型性能影响。这个质量过滤流水线是混合的和多阶段的,包含了基于规则的和基于模型的质量评分器。其中基于规则的评分器是启发式的且因不同的编程语言而各不相同,因为代码风格不是一个可靠的优质指标,并且会错误地将许多代码分类为低质量。对于基于模型的评分器,评估几种骨干模型,用大约50,000个tokens样本训练它们。然而,评分器的评估与人类的评估之间的相关性在不同语言之间存在差异,而且扩大训练集并没有显著提高评分器的准确性。因此,只在那些模型评估与人类标注验证集上评估相一致的编程语言中,才使用基于模型的评分器。

为了获得代码质量评分器的可靠标注,引入了一个迭代标注流程(如图所示),解决代码质量定义模糊的挑战。对于人类专家来说,确定对教一个大语言模型(LLM)有帮助的代码同样不是一件小事,例如,一个广为人知的代码库可能对初学者来说过于复杂。这个迭代标注工作流水线允许标注人员验证模型预测结果,并相应地完善标注指南。为了提高标注效率,只要求标注人员检查评分器以高置信度tokens为高质量和低质量的样本。此外,在每次迭代中都有一个自动验证过程,以确保之前标注的样本被评分器正确分类,在图中以虚线表示。在实际操作中,进行三次迭代才最终确定评分模型。

添加图片注释,不超过 140 字(可选)

依赖排序。InternLM2的训练上下文窗口已扩展到32,000个tokens,这个长度可以用代码仓库的整个上下文。但是因为在之前的数据处理步骤中,比如对代码文件的扩展名过滤和去重等操作,可能已经破坏了代码仓库的结构。所以首先重组来自同一个仓库的代码文件,然后通过依赖排序建立一个拼接这些文件的序列。这样一个代码仓库将被视为一个由多个代码块组成的大Markdown文件,使得模型能够学习跨文件之间的依赖关系。

采用正则表达式来检测各种编程语言之间的“import”关系,并使用拓扑排序来确定文件的拼接顺序。在实践中,文件的排列可能会打破文件夹边界,导致来自多个子文件夹的文件以交错的方式排列。对于非代码文件,如Markdown和其他文档,放在同一子文件夹中第一个代码文件之前。

对于一些特殊情况,如代码文件之间存在的多重依赖路径,选择最短的路径来处理,对于“import”关系图中的循环引用,用字母顺序来决定引用的起始点。寻找“import”关系的一个技巧,是解决批量导入的问题,例如“init.py”或“#include xx.h”。这些文件可能导入一大批未使用的依赖项,因此应用启发式规则来细化对“import”关系的检测,确保能够准确识别并在更精细的层面上处理这些关系。

3 长上下文

处理非常长的上下文(超过32K个 tokens )是在LLM研究中一个日益受到关注的话题,它拓宽并促进了LLM在应用领域的发展,例如书籍摘要、支持长期对话以及处理涉及复杂推理步骤的任务等。预训练数据是扩大模型上下文窗口的一个关键因素。遵循 Lv et al. (2024) 中准备长文本预训练数据的工作,其中包括附加的实验和讨论。

数据过滤流水线。数据过滤流水线旨在过滤掉低质量的长文本数据。它包括三个阶段:a)长度选择,这是一个基于规则的过滤器,选取超过32K字节的样本;b)统计过滤器,利用统计特征来识别和移除异常数据;c)困惑度过滤器,利用困惑度的差异来评估文本片段之间的连贯性,过滤掉上下文不连贯的样本。需要注意的是,选定用于长上下文训练的所有数据都是标准预训练语料库的一个子集,这意味着长上下文数据至少在预训练期间会被学习两次。

统计过滤器。用各种词汇和语言特征来构建统计过滤器。不符合既定规则的数据样本被排除在预训练语料库之外。这些过滤器的完整列表可以在 Lv et al. (2024) 中找到。一个典型的过滤器是存在连词和其他暗示话语结构的词,比如“Especially”、“Formally”等。设计这些过滤器的总体指导思想是过滤掉无意义的数据,而不是选择最高质量的数据。统计过滤器对长文本数据特别有效,因为统计特征比短文本数据中的统计特征更加一致。例如,20个 tokens 的文本可能不会产生可靠的统计数据,但32K个 tokens 的文本将具有更清晰的统计特征分布。

困惑度过滤器。困惑度通常被视为文本序列概率P(X)的估计器,稍微改变它的使用,可估计两个文本片段之间的条件概率P(S2 | S1),其中S1是S2的前置内容。当S1和S2高度相关时,条件概率应该高于单独估计S2的概率,这也意味着负的困惑度差异。相反,如果概率变化方向相反,意味着S1是一个分散注意力的上下文,它应该从预训练语料库中移除。理想情况下,添加更多上下文不应该影响后续文本的可预测性。然而,在不正确拼接文本的情况下会出现例外,比如失败的HTML解析、随机社交媒体片段以及源自复杂布局源中的识别错误等其他情况。注意:仅基于困惑度差异而不是困惑度本身来过滤数据,这可以在很大程度上减少估计器本身引入的偏差(使用哪个模型来计算困惑度)。困惑度估计器的偏差已在 Wettig et al. (2024)和Sachdeva et al. (2024)中讨论。

阈值选择。选择适当的阈值是数据过滤过程的关键且具有挑战性的部分,这一挑战因构建许多过滤器而变得更加严峻。在设定阈值方面有两个教训:

  1. 为每个领域定制阈值,而不是寻求一个普遍的解决方案。例如,针对连词的统计过滤器不适用于通常没有任何连词的代码数据。同样,教科书、研究论文、小说和专利各自具有独特的特征。一个普遍的阈值可能会错误地分类大量数据。同样的逻辑也适用于在不同语言之间设定阈值;因此,针对每个领域单独调整阈值。
  2. 使用验证集来简化过程,只关注边缘案例。与基于学习的特征提取器或评分器不同,统计和困惑度过滤器在同一领域内产生平滑的结果。专注于靠近阈值的样本,简化阈值的调整过程,因为只需要决定是降低还是提高它们。Lv
    et al. (2024) 展示特定过滤器在数据集上的得分,证明提出的过滤器可解释性。

如图展示经过所有过滤器处理,数据的前后分布情况:(a)过滤前长文本数据的统计。(b)过滤后长文本数据的统计。整个过滤过程移除大量网页(Common Crawl)和专利数据,而大多数书籍和论文数据都被保留了下来。

添加图片注释,不超过 140 字(可选)

预训练设置

1 token化器(Tokenization)

选择GPT-4的tokenization方法,因为它在压缩各种文本内容方面非常高效。主要参考是cl100K词汇表,它主要包含英语和编程语言的 tokens,共计100,256条,其中包括不到3,000个中文 tokens。为了在处理中文文本时优化InternLM的压缩率,同时将总体词汇量保持在100,000以下,从cl100k词汇中仔细挑选了前60,004个tokens,并将其与32,397个中文token集成。此外,还加入147个备用tokens,最终得到的词汇量符合256的倍数,从而便于高效训练。

2 预训练超参

基本超参如表所示。在训练过程中,用AdamW (Loshchilov & Hutter, 2019)优化模型,其参数设置为beta_1=0.9, beta_2=0.95, epsilon=1e^-8, weight_decay=0.1。用余弦学习率衰减,学习率衰减至其最大值的10%。

添加图片注释,不超过 140 字(可选)

预训练阶段

用于预训练1.8B、7B和20B模型的总token数范围从2.0T到2.6T,预训练过程包括三个不同的阶段。在第一阶段,用了长度不超过4k的预训练语料库。在第二阶段,包括长度不超过32k的50%的预训练语料库。在第三阶段,用了特定能力的增强数据。在每一阶段,都混合了英文、中文和代码数据。

1 4k的上下文训练

大约90%的训练步中,用了长度多达4096个tokens的数据进行训练。如果数据长度超过4096,会强制截断它,也会用剩余部分进行训练。

2 长上下文训练

扩展上下文窗口可以显著提高 LLM 在各种应用中的表现,例如检索增强生成 (Gao et al., 2023) 和智能体(Xi et al., 2023)。受长上下文训练方面最新进展的启发(Rozière et al., 2023; Xiong et al., 2023; Liu et al., 2023b),InternLM2训练过程从4K上下文的语料库开始,然后过渡到32K上下文的语料库。尽管使用32K长度的语料库,仍有50%的数据长度短于4096个tokens。这个长上下文训练阶段占整个预训练过程的大约9%。为了适应这些更长的序列,确保为长上下文提供更有效的位置编码(Liu et al., 2023b),将旋转位置嵌入(RoPE)基从50,000调整到1,000,000。得益于 InternEvo (Chen et al., 2024a) 和 flash attention (Dao, 2023) 的良好可扩展性,当上下文窗口从4K更改为32K时,训练速度仅降低40%。

3 特定能力增强训练

逻辑推理、数学问题解决和知识记忆等能力是大语言模型所期望的关键能力。然而,在预训练过程中,与这些能力相关的高质量数据在整个语料库中分布稀疏,这使得模型难以精通这些能力。之前的工作,如Qwen (Bai et al., 2023a),GLM-130B (Zeng et al., 2023),Nemotron-4 (Parmar et al., 2024),已尝试在预训练阶段结合基于指令或高质量数据来增强这些能力。在InternLM 2中,收集一个丰富的数据集,其中包含精心策划的高质量检索数据和来自Huggingface数据集平台的各种类型开源数据。在这个数据集中总共收集240亿个tokens,这个语料库的详细信息如表所示。过滤出测试集相关数据,并进行污染测试。为了使模型更好地拟合这些数据,采用了较小的学习率和批量大小。

添加图片注释,不超过 140 字(可选)

经过特定能力增强训练阶段之后,InternLM2模型在编程、推理、问题回答和考试等方面表现出显著的性能提升。同时发布增强训练前后的 checkpoints,分别命名为InternLM2-{size}-Base和InternLM2-{size}。

待续。。。

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值