总体框架:

大模型的标准训练流水线 pipline大致分为三步:Pretrain(预训练) -> SFT(指令微调)-> Alignment(对齐,RLHF)
LoRA不是一个独立的训练阶段,属于PEFT(参数高效微调,parameter-efficient-fine-tuning)一种技术手段。LoRA可以被用在SFT阶段,也可以被用在RLHF阶段,主要是为了“省显存,省算力”

Pretrain(预训练):

预训练阶段是基于海量无标注数据(如网页、书籍、代码)进行无监督学习(或自监督学习)。其核心任务是next-token-prediction,这个阶段,模型不仅压缩吸收了海量的世界知识,也掌握人类语言的语法规律、逻辑能力。这个阶段训练出来的也叫“基座模型”,只会续写还不会对话。

SFT Supervised Fine-tuning 指令微调:

SFT也叫指令微调阶段,使用高质量的“人类指令+回答”对(prompt-response)作为训练数据,目的不是给模型注入新的知识,而是激发模型在预训练阶段学到的知识,让它的输出格式符合人类的对话和回答习惯,从文本续写器转变为AI助手。

对齐阶段:RLHF

最后是对齐阶段,经典方法是RLHF。SFT虽然让模型学会了对话,但模型可能会出现幻觉、说脏话和给出危险建议。引入强化学习的目的,是让模型的输出与人类的价值观对齐(通常遵循3H,helpful, honest, harmless)
具体来说会先训练一个reward model来模仿人类的打分喜好,然后使用PPO、GRPO等强化学习算法来优化大模型。
在实际中也可以不用单独训练奖励模型,如DPO,直接使用带偏好的回答来训练模型。

大模型训练如何计算(估算)显存占用:

参考:https://www.bilibili.com/video/BV1VD421571H/?spm_id_from=333.1387.search.video_card.click&vd_source=e67c07b57bd6208ae6cf25baa99d3bcb

单位基础:

在这里插入图片描述

显存占用部分:

后续计算都以Llama13B为例,

  • b Batch Size: 1
  • S seq_len: 1024
  • H hidden_size: 5120
1 输入输出:

embedding后输入:bsh*2/1024/1024 (2字节,默认float16)
输入输出:20MB

2 模型参数:

1B = 10^3 1GB=1024^3byte FP16: 13*2= 26GB

3 优化器:优化器中的参数都以FLOAT32存放
  • 梯度指数平滑值:13*4 = 52GB
  • 梯度平方指数平滑值:13*4 = 52GB
  • 模型参数:134=52GB
    总共13
    4*3 = 156GB
4 激活值:梯度计算需要用

[图片]
和batch_size seq_len 相关

5 梯度值:

FP16: 13B*2 = 26GB

总计在这里插入图片描述

在这里插入图片描述

更多推荐