大型语言模型的发展包括预训练、监督微调(SFT)和基于人类反馈的强化学习(RLHF)
等主要阶段。
过去关于LLM的技术报告很少关注预训练数据的处理。InternLM2详细描述了如何为预训练 准备文本、代码和长文本数据。
如何有效地延长LLM的上下文长度目前是研究的热点,因为许多下游应用,如检索增强生成(RAG)和代理模型 ,依赖于长上下文。
本次技术报告就详细的阐述关于数据处理,预训练以及微调模型的技术细节。
一. 训练框架以及模型架构
1.1 InternEvo
在开始之前,我们首先选择我们的训练框架,我们使用的高效的轻量级预训练框架InternEvo进行模型训练。这个框架使得我们能够在数千个GPU上扩展模型训练。它通过数据(Data Parallelism)、张量(Tensor Parallelism,2019)、序列(Sequence Parallelism, 2023)和管道(Pipeline Parallelism, 2019)并行技术来实现这一点。为了进一步提升GPU内存效率,InternEvo整合了各种Zero Redundancy Optimizer (ZeRO, 2020)策略,显著减少了训练所需的内存占用。此外,为了提高硬件利用我们还引入了FlashAttention技术(2023)和混合精度训练(Mixed Precision Training,2017),使用BF16。
InternEvo在序列长度方面也表现出强大的扩展性, 支持训练不同规模的LLM, 例如
在256,000个令牌的序列长度下训练InternLM-7B, 可以达到接近88%的MFU。 相比之
下,DeepSpeed-Ulysses和Megatron-LM只能达到大约65%的MFU。对于更大规模的LLM,
如300亿或700亿参数的模型,训练性能的提升也同样明显。

1.2 模型架构
我们选择遵循LLaMA的结构设计原则。为了提高效率,我们将Wk、Wq和Wv矩阵合并,这在预训练阶段带来了超过5%的训练加速。此外,为了 更好地支持多样化的张量并行(tp)变换,我们重新配置了矩阵布局。对于每个头的Wk、 Wq和Wv,我们采用了交错的方式,如下图所示。

二. 训练数据集
2.1 文本数据
我们的预训练数据集中的文本数据可以根据来源分为网页、论文、专利和书籍。为了将这
些来源转化为预训练数据集,我们首先将所有数据标准化为特定格式,按类型和语言分类,
并以JSON Lines (jsonl)格式存储。然后,我们对所有数据应用一系列处理步骤,包括基于
规则的过滤、数据去重、安全过滤和质量过滤。这最终形成了丰富、安全且高质量的文本
数据集。
整个数据处理流程首先将来自 不同来源的数据标准化,得到格式化数据(Format data)。接着,通过应用启发式统计规则 进行数据筛选,获取清洗数据(Clean data)。然后,使用局部敏感哈希(LSH)方法进行 数据去重,得到去重数据(Dedup data)。随后,我们采用复合安全策略过滤数据,得到安 全数据(Safe data)。针对不同来源的数据,我们采用了不同的质量过滤策略,最终获得高 质量预训练数据(High-quality pre-training data)

2.2 代码数据
同时,我们也加入了大量的代码数据,我们从多个来源收集数据,包括直接从GitHub爬取,公共数据集,以及与编程和编码相关的在线资源(如问答论坛、教程网站和API文档),数据来源统计如图。

所有数据转换为统一的Markdown格式。然而,一小部分数据仍然存在损坏
的HTML或XML格式。代码数据的去重与处理自然语言类似,只是在分词(tokenization)上有所区别,这影响了超参数的选择。
3.3 长文本数据
处理非常长的上下文(¿32K个令牌)在研究大语言模型(LLMs)中越来越受到关注,这拓
宽了应用范围,包括书籍摘要、支持长期对话以及处理涉及复杂推理步骤的任务。预训练
数据是扩展模型上下文窗口的关键因素。我们遵循Lv et al. (2024)中提到的长文本预训练数
据准备过程,包括数据过滤管道,统计过滤器,语言模型困惑度过滤器,阈值选择等。
所有提议过滤器前后的数据分布。整个过滤过程去除了大部分网页数据 (Common Crawl)和专利数据,而书籍和论文数据大部分得以保留。
