LLM预训练recipe — 摘要版

文章核心主题:

本文深入探讨了从零开始进行大型语言模型(LLM)预训练(pretrain)的各个环节,侧重方法论和实践细节,旨在普及预训练过程中的关键步骤、常见问题及避坑技巧,而非技术原理的深入分析。作者强调了数据处理的重要性,并强调了自主预训练的价值。

要点总结:

1. 背景篇:自研 Pretrain 模型的意义

  • 开源模型的局限性: 虽然大型模型(如qwen)开源了模型参数,但训练框架、训练数据等核心内容仍未开源,使得用户无法参与模型的迭代优化。
  • 技术掌握的必要性: 在LLM全面开源前,掌握预训练技术仍然有意义。通用模型的变现能力不如领域模型,而持续预训练(continue-pretrain)是刚需,其技术栈与预训练相似。
  • 数据透明度的重要性: 自主预训练可以掌握模型训练数据的细节(如数据配比、知识掌握程度),从而在后续的对齐(alignment)阶段进行针对性优化,最大化模型潜力。
  • Tokenizer 的重要性: 使用开源模型时,tokenizer 不可控会导致解码速度不可控,自研模型可以自定义 tokenizer,优化特定任务的性能。
  • 其他动机: 自研模型可以作为公司科研能力的象征,也可以在预训练阶段植入个性化知识或价值观。

2. 数据篇:预训练数据的准备与处理

  • 数据获取:
    • 需准备大量训练数据(约10T),可逐步收集,数据来源包括爬虫、购买、开源数据集等。
    • 强调专业数据团队的重要性,避免因爬虫行为引发法律风险。
    • 高质量数据(如论文、书籍)常以PDF格式存在,需使用专业服务或自研OCR模型进行解析,Python库解析效果有限,大模型解析成本较高。
    • 开源数据集(如FineWeb、pile、Skypile、RedPajama)可作为启动资金,但质量参差不齐。
    • 开源数据下载复杂,需解决服务器网络、下载速度、文件处理等问题。
  • 数据质量:
    • 数据知识密度差异大,高知识密度数据(如唐诗三百首)价值更高。
    • 合成高知识密度数据是趋势,可提高训练速度。
    • 组建数据团队进行爬虫或购买是认真进行预训练的必要条件。
  • 数据清洗:
    • 核心工作: 数据清洗是数据环节最核心的工作。
    • 模型打分: 利用模型对预训练数据质量进行打分已成标配,推荐使用BERT结构模型作为打分器,因为BERT结构模型表征能力更强。
    • 打分器训练: 打分器不追求100%准确率,能用即可,不宜投入过多时间,可训练小规模打分器。
    • 规则清洗: 规则是强大的数据清洗工具,可基于数据长度、token比例、语言占比、关键词等特征过滤数据。
    • 规则应用注意: 使用规则清洗时,注意不要将数据清洗成分布有偏的数据。
    • 数据脱敏: 必须进行数据脱敏,去除人名、电话号码、邮箱等敏感信息,以及“转载自…”等信息,避免隐私侵犯和法律风险,使用正则匹配。
  • 数据去重:
    • 必要性: 数据去重是必须的,避免重复使用同一内容。
    • 去重粒度: 可选择句子级去重或文档级去重,根据实际情况量力而为。
    • 技术手段: 需要大数据处理集群和map/reduce框架,可利用minhash算法实现。
    • 去重策略: 先确定需要多少训练数据,再确定去重的粒度,不需要追求绝对完美。
  • 数据配比:
    • 需要训练数据分类器,对数据进行类别划分(如新闻、百科、代码、markdown等),可使用BERT家族模型。
    • 不同类别数据清洗和去重的阈值不同,高质量数据保留,低质量数据过滤。
    • 数据配比通常为“知识 + 代码 + 逻辑”三大类,中文:英文:代码的比例通常为4:4:2,逻辑数据比例取决于可用数据量。
    • 英文数据比例不能太低,目前中文数据质量不如英文数据质量,可能是因为中文更难学,且语料数量和质量不如英文。
  • 数据顺序:
    • 数据顺序很重要,预训练的本质是教模型学习知识,知识的顺序决定了学习效果。
    • 课程学习很重要,先学难知识/好数据,再学脏知识/坏数据。
    • 推荐llama的In context pretrain方法,利用语义相似度拼接文档,构成语义连贯的上下文。
    • 关于attention mask:llama 认为同一条训练语料中,无关文档不能相互看见,但实操中,大部分团队不使用mask,且未发现差异。
  • 数据流水线:
    • 预训练是动态加载数据的,读1B、训1B,再读1B,再训1B,因为数据量大,无法一次性读取。
    • 模型获取的是token_id而非token,需提前完成tokenization和concatenation操作。
    • 数据处理和模型训练是独立进程,数据处理进程需保证模型训练进程始终有数据可用。
    • 预训练数据可以复用,高质量数据可以训练多遍,并动态降低已使用多次数据的被选中概率。
    • 数据块大小应适中,以B为单位,方便回退。
    • 建议数据块与模型checkpoint保存对齐,方便模型版本回退。
  • 数据实验:
    • 不要盲目开始训练,先在小模型上进行实验,理解scaling_law。
    • 实验内容包括:不同数据配比和顺序的训练实验、不同大小模型的loss结果、以及绘制loss到benchmark的scaling_law,以便提前预知模型训多少token量能在某个benchmark达到什么水平。
    • scaling_law仍是重要的指导原则,不能完全忽视。

3. 训练篇:模型结构、参数、训练框架和技巧

  • Tokenizer:
    • Tokenizer是预训练的基础,务必提前准备好。
    • 扩词表容易出错,可能导致旧token对应的知识丢失。
    • 训练tokenizer需用大量的common数据和BPE/BBPE算法。
    • 需注意数字切分、控制压缩率(通常1 token对应1.5个汉字)、手动移除脏token,补充业务场景token,确保中英文覆盖率,词表大小与模型embedding_size保持一定buffer。
    • 针对strawberry包含几个r这种问题,作者认为tokenizer是天生解决不了的。
  • 模型结构:
    • 建议采用llama的结构,减少创新,降低踩坑风险(rope + gqa + rms_norm + swiglu)。
    • 小模型embedding和lm_head可共享参数,大模型则无必要。
    • 预训练成本高,应稳健为主,不宜盲目创新,除非有鲁棒实验支持。
  • 模型参数:
    • 模型size主要考虑训练和推理算力,而非直接根据场景需求确定。
    • 模型size应与大厂模型保持一致,避免踩坑,且方便模型效果对比。
    • 推理算力应考虑实际部署机器的显存限制,避免出现一张推理卡装不下模型的情况。
    • 超参数size要和llama保持一致,横向和纵向成比例递增。
    • 超参数值应能被2/4/8/64/128等数整除,以满足训练框架要求。
    • layer_num、num_head、hidden_states、vocab_size应满足特定倍数的要求,以便支持并行计算。
    • seq_len选取要循序渐进,先用小seq_len,再逐渐增加,采用rope的NTK外推方法。
  • 训练框架:
    • 从零开始预训练,必须选megatron;continue-pretrain可考虑deepspeed。
    • megatron: 训练速度快,参数清晰,模型加载快,但上手成本高,基建工作多,官方代码存在bug。
    • deepspeed: 代码简单,用户群体多,但训练速度慢,加载慢,微操难,官方代码也存在bug。
    • 无论使用哪个框架,都要将attention的默认方式改为flash_attention。
  • 训练技巧:
    • 训练效率优化: 减少通讯量,避免机间通讯。优先使用data_parallel,避免显存和内存之间切换,避免重算。
    • 训练loss分析: 关注tensorboard上的loss曲线,应分开观察不同类型数据的loss,重视loss_spike(loss突然激增或降低),回退到上个checkpoint,并调整adamw优化器的β1β2参数,解决训练初期loss_spkie问题。
    • 训练流程: warm up(学习率缓慢上升) -> 中期(cos / cos_decay / constant / constant_decay,学习率较大)-> 后期(改变rope base+seq_len,适应长文本)-> 收尾(anneal,用高精数据/IFT数据强化考试能力)。
    • 预训练一旦开始,一般无需人为干预,除非出现烧卡、loss爆炸、loss陡降等情况。

4. 评估篇:模型性能的评估方法

  • PPL (Perplexity):
    • 通过测试集的loss衡量模型效果,同一模型不同训练阶段进行对比,不能跨模型对比,不同tokenizer压缩率的loss没有可比性。
    • 通用知识测试集上的loss应降低到2以下。
  • Benchmark:
    • 预训练阶段的benchmark结果可信度有限,如果checkpoint不是自己训练的,可能存在刷榜行为。
    • benchmark形式单一,大多是选择题,没有cot环节,难以全面衡量模型能力。
    • 建议改造benchmark,以生成式的方法使用,而非直接看ABCD哪个概率高,例如:
      • 将Question + Answer,变成Question + Answer_A,Question + Answer_B,Question + Answer_C,Question + Answer_D,让模型结合上下文回答问题
      • 将正确答案选项改为 “其他答案全错”,看模型是否能选出该选项。
      • 修改选项形式(一二三四代替ABCD),多选题改为单选题。
      • 先让模型在不知道答案的情况下训练,然后让其说出正确答案。
    • 使用ACC(Accuracy)衡量评估结果,而不是BLEU和Rouge。
  • 概率探针:
    • 从概率的角度监控模型的知识能力,观察特定token或句子的概率变化。
    • 探针测试集需要手动构造,而非批量生成。
    • 重点观察指标的变化趋势,而非绝对大小。
    • 可以构造多种探针,例如:
      • Prob('北京'|'中国的首都是')
      • PPL('台湾属于中国') vs PPL('台湾不属于中国')
      • PPL('尊重同性恋') > PPL('反对同性恋')
      • Prob( '{ '| '以 json输出')

5. 总结篇:预训练的整体认识

  • 作者认为预训练的各个环节同等重要,数据清洗尤为重要,数据清洗的灵光一现可能大大提升模型效果。
  • 预训练不是简单跑代码,数据清洗更有挑战。

LLM预训练recipe—原文版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/496554.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker【初识Docker】

目录 为什么会出现Docker这门技术喃? 应用开发和部署的困境 容器技术的先兆 Docker 的出现:简化容器化 Docker 技术的关键创新: Docker 的广泛应用和变革 什么是 Docker? Docker的历史 早期背景:容器化和虚拟化…

金融租赁系统的发展与全球化战略实施探讨

内容概要 金融租赁系统的演变并非一帆风顺,像一场跌宕起伏的电影。首先,咱们得看看它的起源及现状。随着经济的快速发展,金融租赁逐渐作为一种灵活的融资手段崭露头角。在中国市场中,企业对设备和技术更新换代的需求日益迫切&…

畅游 Linux 开发天地:yum 与 vim 详解

🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 前言 在当今数字…

C++--------继承

一、继承的基本概念 继承是 C 中的一个重要特性&#xff0c;它允许一个类&#xff08;派生类或子类&#xff09;继承另一个类&#xff08;基类或父类&#xff09;的属性和方法。这样可以实现代码的重用和建立类之间的层次关系。 #include <iostream>// 基类 class Base…

Doris的SQL原理解析

今天来介绍下Doris的SQL原理解析&#xff0c;主要从语法、解析、分析、执行等几个方面来介绍&#xff0c;可以帮助大家对Doris底层有个清晰的理解~ 一、Doris简介 Apache Doris是一个基于MPP架构的高性能、实时的分析型数据库&#xff0c;能够较好的满足报表分析、即席查询、…

HarmonyOS NEXT 实战之元服务:静态多案例效果(一)

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1代码案例如下&#xff1a; import { authentication } from…

Elasticsearch:normalizer

一、概述 ‌Elastic normalizer‌是Elasticsearch中用于处理keyword类型字段的一种工具&#xff0c;主要用于对字段进行规范化处理&#xff0c;确保在索引和查询时保持一致性。 Normalizer与analyzer类似&#xff0c;都是对字段进行处理&#xff0c;但normalizer不会对字段进…

零基础微信小程序开发——页面导航之编程式导航(保姆级教程+超详细)

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…

云计算时代携程的网络架构变迁

大家觉得有意义和帮助记得及时关注和点赞!!! 前言关于我0 关于携程云 网络演进时间表1 个基于 VLAN 的 L2 网络 1.1 要求1.2 解决方案&#xff1a;OpenStack Provider Network Model1.3 硬件网络拓扑1.4 主机网络拓扑1.5 总结 优势劣势2 个基于 SDN 的大型 L2 网络 2.1 新挑战2…

C#控件开发3—文本显示、文本设值

目录 1.文本设置1&#xff09;定义属性2&#xff09;定义事件 2.本文显示1) 定义属性2&#xff09;定义事件 End 如何绘制一个便捷的文本显示组件、文本设值组件&#xff08;TextShow,TextSet&#xff09;&#xff1f; 绘制此控件的目的就是方便一键搞定标签显示&#xff08;可…

SuperMap iDesktopX填补三维可视化地图海岸地形

kele 前言 在做沿海城市三维可视化地图时&#xff0c;会遇到这样一种现象&#xff1a;DEM数据与国家天地图官网的行政区边界不一致&#xff0c;使得三维可视化地图&#xff0c;出现如下图地形缺失现象&#xff1a; 一、原因分析 这是由于海岸线地区受地形精度、采集时间、沙…

代码随想录Day56 108. 冗余连接,109. 冗余连接II。

1.冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 题目描述 有一个图&#xff0c;它是一棵树&#xff0c;他是拥有 n 个节点&#xff08;节点编号1到n&#xff09;和 n - 1 条边的连通无环无向图&#xff08;其实就是一个线形图&#xff09;&am…

MySQL外键类型与应用场景总结:优缺点一目了然

前言&#xff1a; MySQL的外键简介&#xff1a;在 MySQL 中&#xff0c;外键 (Foreign Key) 用于建立和强制表之间的关联&#xff0c;确保数据的一致性和完整性。外键的作用主要是限制和维护引用完整性 (Referential Integrity)。 主要体现在引用操作发生变化时的处理方式&…

双指针——查找总价格为目标值的两个商品

一.题目描述 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 这个题目非常简单&#xff0c;其实就是判断有没有两个数加起来等于target。 三.算法解析 1.暴力解法 暴力解法的话我们可以枚举出所有的情况&#xff0c;然后判…

使用 HTML5 Canvas 实现动态蜈蚣动画

使用 HTML5 Canvas 实现动态蜈蚣动画 1. 项目概述 我们将通过 HTML 和 JavaScript 创建一个动态蜈蚣。蜈蚣由多个节段组成&#xff0c;每个节段看起来像一个小圆形&#xff0c;并且每个节段上都附带有“脚”。蜈蚣的头部会在画布上随机移动。 完整代码在底部&#xff01;&…

Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉

遇到问题&#xff1a; 从今年开始&#xff0c;不知道咋回事&#xff0c;电脑上的Unity2017像是变了个人似得&#xff0c;突然特别爱闪退掉&#xff0c;有时候还次次闪退&#xff0c;真是让人无语&#xff0c;一直以来我都怀疑是不是电脑上安装了什么别的软件了&#xff0c;导致…

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…

如何快速找到合适的科学问题

前面已经讲过 如何快速判断学术论文质量与相关性 如何描述科学问题&#xff1f;从“术”入手&#xff0c;悟出属于自己的“道” 医学图像分割任务中的典型科学问题 如何快速肝论文&#xff1f; 博士论文的写作架构 这些内容分别阐述了 如何找到重要的相关论文 找到科学问…

如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?

PICO 4 Ultra 系列设备使用的安卓操作系统为 Android 14。当项目的 Write Permission 为 Externa (SDCard) 且 Android API Level 大于 32 时&#xff0c;Unity 提供的外部文件读取方式在 PICO 4 Ultra 设备上将失效。此问题提供两种解决方法&#xff0c;按实际情况选取。 解决…