大模型基础入门,主要用于个人的学习和整理,方便后期复习。
暂时只有 预训练、继续预训练、SFT、LORA、蒸馏、Model Merging
复习内容
- 学习内容
- 一、总览
- 1.1 什么时候需要从0-1训练大模型
- 1.2 模型训练全流程
- 二、预训练(pre-train)
- 2.1 数据收集与处理
- 2.1.1 数据来源
- 2.1.2 数据清洗
- 2.1.2.1 数据快速去重
- 2.1.3 数据质量评估
- 2.2 词表训练与扩展
- 2.3 分布式训练技术
- 2.4 预训练全流程
- 完整代码
- 三、继续预训练 (continue-pretrain)
- 3.1 介绍
- 3.2 实战演练继续预训练 Qwen3 医疗领域 CPT
- 四、SFT (监督微调)
- 4.1 介绍
- 4.2 实战演练
- 4.2.1 数据 && 训练平台
- 4.2.2 具体过程
- 4.2.3 结果
学习内容
1.总览
2.预训练(pre-train)
3.继续预训练 (continue-pretrain)
4.sft (监督微调)
5.
一、总览
1.1 什么时候需要从0-1训练大模型
1.2 模型训练全流程
二、预训练(pre-train)
在LLM能够生成连贯文本之前,它需要先掌握语言的基本规律,这一过程称为预训练。预训练是一个计算密集型任务,涉及大量数据和复杂的模型优化。
2.1 数据收集与处理
训练LLM的第一步是收集海量高质量的文本数据。目标是构建一个多样化且覆盖面广的数据集,以便模型能够学习到丰富的语言知识和上下文关系。
2.1.1 数据来源
个人开发者,可以从开源数据集获取:
- HuggingFace开源数据集:https://huggingface.co/datasets
- Common Crawl:https://commoncrawl.org/
- 中文:WanJuanText-1.0 and WuDaoCorpora-Text
- 英文:redpajama(网页数据) and FineWeb
现有的数据集一般存在以下的问题:
- (1)专用数据质量高,但量少,网页数据量大,但比较脏
- (2)中文与英文存在差距(数量、质量 and so on)
- (3)知识的密度有差距
2.1.2 数据清洗
主要分成四个阶段 (1)规则过滤 (2)垃圾过滤 (3)去重 (4)质量评估
2.1.2.1 数据快速去重
我们找一组数据里面的相似对,我们可以从头遍历到尾,但是时间复杂度会超高,算力不一定可以match,所以我们才研究算法,牺牲一些精度,换取效率的极大提升。
(1)Jaccard相似度
判断两个集合是否相等,一般使用称之为Jaccard相似度的算法(后面用Jac(S1,S2)来表示集合S1和S2的Jaccard相似度)。举个列子,集合X = {a,b,c},Y = {b,c,d}。那么Jac(X,Y) = 2 / 3 = 0.67。也就是说,结合X和Y有67%的元素相同。下面是形式的表述Jaccard相似度公式:
Jac(X,Y) = |X∩Y| / |X∪Y|
也就是两个结合交集的个数比上两个集合并集的个数。范围在[0,1]之间。
(2)MinHash
MinHash 是一种用于近似集合相似度计算的技术。它被广泛用于大规模数据集中的快速相似度估计,特别是在处理文本、图像和网络数据等领域。
原始问题的关键在于计算时间太长。所以,如果能够找到一种很好的方法将原始集合压缩成更小的集合,而且又不失去相似性,那么可以缩短计算时间。Minhash可以帮助我们解决这个问题。举个例子,S1 = {a,d,e},S2 = {c, e},设全集U = {a,b,c,d,e}。集合可以如下表示:
Minhash算法大体思路是:采用一种hash函数,将元素的位置均匀打乱,然后将新顺序下每个集合第一个元素作为该集合的特征值。比如哈希函数h1(i) = (i + 1) % 5,其中i为行号。作用于集合S1和S2,得到如下结果:
(3)LSH
局部敏感哈希(Locality-Sensitive Hashing,LSH)是一种用于在高维空间中快速搜索相似项的近似搜索技术。它特别适用于处理大规模数据集,其中传统的精确搜索方法可能变得过于昂贵或不可行。
通过MinHash有了原始集合的摘要,但是还是没有解决最初的问题,仍然需要遍历所有的集合对,,才能所有相似的集合对,复杂度仍然是O(n2)。所以,接下来描述解决这个问题的核心思想LSH。其基本思路是将相似的集合聚集到一起,减小查找范围,避免比较不相似的集合。仍然是从例子开始,现在有5个集合,计算出对应的Minhash摘要,如下:
上面的集合摘要采用了12个不同的hash函数计算出来,然后分成了B = 4个区间。前面已经分析过,任意两个集合(S1,S2)对应的Minhash值相等的概率r = Jac(S1,S2)。先分析区间1,在这个区间内,P(集合S1等于集合S2) = r3。所以只要S1和S2的Jaccard相似度越高,在区间1内越有可能完成全一致,反过来也一样。那么P(集合S1不等于集合S2) = 1 - r3。现在有4个区间,其他区间与第一个相同,所以P(4个区间上,集合S1都不等于集合S2) = (1 – r3)4。P(4个区间上,至少有一个区间,集合S1等于集合S2) = 1 - (1 – r3)4。这里的概率是一个r的函数,形状犹如一个S型,如下:
其实归根到底,这个minhash +lsh 组合就是先把元素分块,再利用hash算出来代表元素,分组(桶哈希)然后利用lsh 比较要是两组都一样那么就相似。
2.1.3 数据质量评估
主要是利用LLM对数据集的质量进行打分,本质上是构建一个自动化 的“数据质量评估员”。这个过程的核心是将模糊的“质量好坏”概念,转化为大模型可以理解和执行的、具体的、结构化的指令。
主要分为以下几个步骤:
- 定义质量维度与评分标准 (Scoring Rubric)
- 制定评分标准(Rubric)
- 设计高效的提示词
- 执行获得结果
- 校准与验证
2.2 词表训练与扩展
在神经网络能够处理文本之前,文本需要被转换为数值形式。这一转换过程称为分词(Tokenization)。分词的作用是将单词、子词或字符映射为唯一的数值token。这些token是语言模型的基本构建单元,是模型理解和处理语言的核心组件。
2.3 分布式训练技术
2.4 预训练全流程
完整代码
三、继续预训练 (continue-pretrain)
3.1 介绍
继续预训练是预训练和微调的中间部分,主要是利用专业无标准的专业领域数据集,主要是提升模型对专业问题的能力,和微调相比因为使用的是无标注的数据集,成本更低,也更方便训练。
3.2 实战演练继续预训练 Qwen3 医疗领域 CPT
四、SFT (监督微调)
4.1 介绍
SFT(监督微调)是后训练的第一步,也是最直观的一步:给模型大量高质量的(指令,回答)对,用标准的交叉熵损失训练模型去模仿这些示范回答。从优化角度看,SFT 只对回答部分计算损失,让模型学习规范化表达,把话说得更通顺。本质上就是在预训练模型的基础上,通过标注数据调整参数,让它从"会接话"变成"会听话"。
4.2 实战演练
4.2.1 数据 && 训练平台
数据来源于:https://huggingface.co/datasets/Mxode/I_Wonder_Why-Chinese (中文百科开放问答,120w)
卡:4张4080 跑了4h
4.2.2 具体过程
原始数据 → 统一对话格式 JSONL
这一部分主要是数据处理,主要是基于FormatHandler 写的两个ChineseInstructLiteFormatHandler和IdentityFormatHandler类分别用来处理parquet格式的数据集 和JSON 格式的数据集。最后都变成这种json格式,方便后续处理。JSONL → tokenize → 训练 → 保存模型
就是常规操作,租卡训练就行。拿训好的模型在测试集上评估
4.2.3 结果
ft-baike-qwen-0.1B/ 是训练完成后手动保存的最终模型,而 checkpoint-12000 和 checkpoint-12632 则是我在 TrainingArguments 中通过save_steps=2000 和 save_total_limit=2 配置的断点存档——前者是倒数第二次定期保存,后者是 2 个 epoch 跑完时的最终检查点。保留这两个checkpoint 的核心目的是容灾兜底:一旦训练中途因 OOM、机器重启或进程异常退出而崩盘,可以直接从最近的 checkpoint加载权重恢复训练,避免从头重跑导致算力和时间全部白费。
参考文献:
https://zhuanlan.zhihu.com/p/32208170972
https://www.cnblogs.com/bourneli/archive/2013/04/04/2999767.html
https://blog.csdn.net/weixin_37763484/article/details/148711878