第一次课程视频链接:
【书生·浦语大模型全链路开源体系】 https://www.bilibili.com/video/BV1Vx421X72D/?share_source=copy_web&vd_source=89ba91e598b4eb8db73853d9defb5b82
书生·浦语大模型全链路开源体系
InternLM2的体系分为InternLM2-Base、InternLM2与InternLM2Chat,具体模型如下。推荐在InternLM2的基础上进行微调。
InternLM2回归语言建模的本质,采用新一代数据清洗过滤技术,包括多维度数据价值评估、高质量语料驱动的数据富集、有针对性的数据补齐,提高语言建模的能力。
InternLM2的主要亮点(实现性能全方面提升)
1.超长上下文:20万token上下文中实现“大海捞针”
2.综合性能全面提升:推理、数学、代码提升显著
3.优秀的对话和创作体验:指令精准,结构化创作丰富
4.工具调用能力整体升级:能够搭建复杂智能体
5.突出的数理能力与数据分析功能:不借助计算器的情况下,拥有强大的计算能力。
具体性能对比如下:
从模型到应用的流程如下:
目前书生浦语全链条开放体系已经面向社区做了开源。
数据方面
包括多模态数据集,来源丰富多样,进行了安全处理。
预训练
微调
主要分为增量续训和有监督微调;
开发的XTuner适配多种微调算法与硬件,最低只需要8G显存即可微调7B模型
构建了评测基准社区CompassHub
评测结果分析
目前可以看出,综合评分相加后,评测性能最优的大模型为GPT-4-Turbo,但也仅仅达到及格水平。整体的复杂推理能力存在较大差距。
部署
目前开发了LMDeploy,提供全流程的部署
与 vLLM相比,LMDeploy的推理性能具有明显优势。
智能体
支持多种智能体能力,灵活支持多种大语言模型,简单易拓展,支持丰富的kai工具。
开发了多模态智能体工具箱AgentLego,支持多个主流智能体系统,提供大量前沿算法功能。
技术报告笔记
InternEvo的训练框架
-
简介:
- InternEvo是一个高效、轻量级的预训练框架,能够在数千个GPU上扩展模型训练。
- 实现了数据、张量、序列和管道并行,以及零冗余优化器(ZeRO)策略,减少内存占用。
- 结合了FlashAttention技术和混合精度训练,提高硬件利用率。
-
性能指标:
- 在训练InternLM时,在不同GPU数量下,拥有强大的扩展性能,保持了良好的模型浮点数利用率(MFU)。
- 对于长序列训练,支持高达256,000个token的序列长度。
-
并行化策略:
- InternEvo采用了创新的内存管理和通信策略,包括主动合并小内存块以防止内存不足错误,以优化训练性能。
- 通过在参数、梯度和优化器状态上采用参数分片,以及在计算和通信过程中的重叠操作,提高了训练管道的效率。
-
容错机制:
- 引入了异步保存机制,定期将模型权重和优化器状态保存到分布式文件和对象存储中,以最小化训练进度丢失。
- 系统设计具有灵活性和连续性,在并行化配置变化时能够无缝恢复模型训练。
-
RLHF框架:
- 在交互式培训阶段,使用InternEvo和Ray开发了一个RLHF框架,用于多个LLM的协调训练。
- 框架具有灵活性和可扩展性,能够有效地执行大规模训练,支持各种算法设计。
InternLM 2模型的结构
-
模型设计:
- InternLM 2遵循LLaMA的结构设计原则,并整合了其他著名LLM的优点,如Falcon、Qwen、百川和Mistral。
- 对Wk、Wq和Wv矩阵进行了整合,加速了预训练阶段的训练。
- 重新配置了矩阵布局,采用了交织方法对每个头的Wk、Wq和Wv进行处理,增强张量并行大小的调整。
- 选择了分组查询注意力(GQA),可以在高速和低GPU内存中使用非常长的上下文进行推断。
预训练数据
-
文本数据来源分类:
- 预训练数据集的文本数据来自不同来源,如网页、论文、专利和书籍。
- 数据经过分类和语言标记,并存储为JSON Lines格式。
-
数据处理管道:
- 数据处理管道包括格式化、启发式规则过滤、重复数据删除、安全过滤和质量过滤。
- 使用局部敏感哈希(LSH)方法对重复数据进行模糊删除,采用综合的安全策略过滤有害内容。
-
数据处理步骤:
- 对于网页数据,使用Trafilatura库进行HTML解析和主文本提取,然后进行语言检测和分类。
- 设计一系列启发式过滤规则来清理低质量数据,如解析错误、格式错误和非自然语言文本。
- 使用MinHash方法进行基于LSH的重复数据删除,同时采用综合的安全策略过滤有害内容。
-
质量过滤:
- 通过人工数据标注和BERT模型微调来过滤低质量内容,如广告和摘录文本。
- 使用手动注释的数据微调BERT模型,获得广告分类器和流畅性分类器,进而过滤低质量数据。
代码数据处理
-
数据源分布:
- 数据收集来源包括GitHub抓取、公共数据集以及编程相关的在线资源,如Q&A论坛、教程网站和API文档。所有数据转换为统一的markdown格式。
-
质量过滤:
- 采用混合的、多阶段的过滤过程,包括基于规则和基于模型的评分。
- 使用基于规则的启发式方法和基于模型的评分器来评估数据质量,以确定高、中、低质量的数据,并通过迭代注释过程改进模型的准确性。
-
存储库连接:
- 对于代码存储库,重新组合代码文件并执行依赖性排序,以建立连接文件的序列。
- 使用正则表达式检测跨编程语言的“导入”关系,并通过拓扑排序确定文件连接顺序,以建立代码块的长markdown文件。
长文本处理
InternLM 2从4K上下文语料库开始训练,然后过渡到32K上下文语料库,约占总步骤的9%。为了适应长序列,调整了位置编码的基数。
收集了高质量的检索数据和各种类型的开源数据,总共240亿个token,采用较小的学习率和批量大小,以适应这些数据。
对齐
-
监督微调(SFT)和来自人类反馈的强化学习(RLHF):
- SFT阶段通过高质量指令数据对模型进行微调,覆盖各种任务。
- RLHF结合人类反馈,使用条件奖励模型和多轮在线RLHF策略,以减少偏好冲突和奖励黑客问题。
-
条件在线RLHF(COOL RLHF):
- 引入了条件奖励模型,动态地协调不同的人类偏好,以应对偏好冲突。
- 使用多轮在线RLHF策略,快速适应新的人类反馈,减少奖励黑客的发生。
-
有条件奖励模型:
结合了不同类型偏好的系统提示,有效地在单一奖励模型中对各种偏好进行建模。 -
损失函数的修改:
使用焦点排序损失函数,添加了难度衰减系数,以减少数据集中容易和困难样本之间的不平衡影响。
具体分析微调部分
在监督微调(SFT)阶段,模型使用了一个包含1000万个指令数据实例的数据集。数据集涵盖了各种主题,包括一般对话、自然语言处理任务、数学问题、代码生成和函数调用等。
为了在微调过程中方便各种任务的通用表示,数据样本被转换为ChatML(Cha)格式。在微调过程中,使用了AdamW优化器进行了一个epoch的训练,初始学习率为4e-5。
有条件奖励模型
长上下文微调
在微调和强化学习阶段使用了来自书籍和GitHub存储库的长上下文预训练数据,以保持LLM的长上下文能力。选择了核心代码存储库,并在GitHub上搜索引用这些核心存储库的其他存储库,以获取更多长上下文代码数据。采用深度优先方法进行排序,并生成简要描述文件内容的必要提示。
工具增强型LLM
-
统一流媒体格式: 使用统一的流聊天格式,可以处理各种插件扩展和AI环境,同时与一般聊天兼容。
-
代理能力引入: 通过与聊天域对齐的代理语料库,将InternLM 2的代理能力与语言模型的基本能力进行分离,完全引出其代理能力。这一工作类似于Agent-FLAN。
-
代码解释器增强: 增强了InternLM 2-Chat的能力,能够通过代码解释器解决数学问题。将Python代码解释器视为一种特殊工具,采用推理与编码交织(RICO)策略,通过迭代的硬示例挖掘方式构建数据,例如InternLM-Math。
总结:
1.InternEvo是一个高度优化和工程化的大规模语言模型训练框架,能高效地利用大规模算力和数据资源进行模型训练,所训练出的InternLM2融合了多个优秀模型的特点,具有强大的泛化能力和长上下文推理能力。
2.InternEvo支持数据、张量、序列和管道并行,采用ZeRO优化器降低内存占用。结合FlashAttention和混合精度训练提高硬件利用率。在大规模GPU训练时表现出良好的扩展性和高算力利用率。
3.InternLM2的模型结构借鉴了多个LLM的优点,整合了注意力矩阵、调整矩阵布局、采用了GQA等,提升了推理效率。
4.SFT阶段使用大规模指令数据进行微调,RLHF阶段引入条件奖励模型和多轮策略解决偏好冲突和黑客问题。