大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调

写在前面

GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,包括数据收集、预处理、模型设计、训练策略、优化技巧以及后训练阶段(微调、对齐)等环节。

我们将先对 GPT 的训练方案进行一个简述,接着我们将借助 MiniMind 的项目,来完成我们自己的 GPT 的训练。

在这里插入图片描述

训练阶段概览

GPT 的训练过程大致分为以下几个阶段:

  • 数据准备(Data Preparation)
  • 预训练(Pretraining)
  • 指令微调(Instruction Tuning)
  • 对齐阶段(Alignment via RLHF 或 DPO)
  • 推理部署(Inference & Serving)

数据收集与预处理

  • 数据来源:收集海量文本(书籍、网页、新闻、百科、代码等),例如GPT-3使用了近45TB的原始文本。
  • 数据清洗:去除噪声(HTML标签、重复文本、低质量内容)。过滤敏感或有害信息。
  • 分词(Tokenization):使用子词分词方法(如Byte Pair Encoding, BPE)将文本切分为Token(例如GPT-3的词表大小约5万)。将文本分割为固定长度的序列(如512个Token的段落)。

无监督学习:无需人工标注,直接从原始文本学习。

  • 规模化(Scaling Law):模型性能随数据量、参数规模、计算资源的增加而显著提升。
  • 通用性:捕捉语法、语义、常识等广泛知识。

单卡训练

预训练

执行预训练,得到 pretrain_.pth 作为预训练的输出权重(其中为模型的dimension,默认为512)

cd ..
python train_pretrain.py

执行后对应的输出如下所示:LLM总参数量:25.830 百万
在这里插入图片描述
预估50分钟训练完毕,耐心等待即可:

在这里插入图片描述

监督微调

执行监督微调,得到 full_sft_*.pth 作为指令微调的输出权重(其中full即为全参数微调)

python train_full_sft.py

PS:项目官方提示:所有训练过程默认每隔100步保存1次参数到文件./out/***.pth(每次会覆盖掉旧权重文件)。

执行后输出的内容如下所示:
在这里插入图片描述

GPU状态

查看GPU的运行情况,可以看到已经开始工作了。

nvidia-smi

对应的结果如下所示:
在这里插入图片描述

测试结果

更多详细的内容请查看:eval_model.py
model_name有如下内容:
● 0: 预训练模型
● 1: SFT-Chat模型
● 2: RLHF-Chat模型
● 3: Reason模型

预训练

默认为0:测试pretrain模型效果,设置为1:测试full_sft模型效果

python eval_model.py --model_mode 0

进行自动测试:
在这里插入图片描述
后续的输出内容:
在这里插入图片描述
可以看到已经可以正常的输出内容了。

SFT

基本介绍

SFT 是指在已有的大规模预训练语言模型(如 GPT、LLaMA 等)基础上,使用人工标注的数据集进行监督学习,从而进一步提升模型在特定任务上的表现。

  • 类比:如果预训练是让模型学“语言的全部潜规则”,那么 SFT 就是“让模型知道应该怎么说话更像人、怎么更好地完成任务”。

SFT 的主要作用

  • 强化任务能力:教会模型完成具体任务,如问答、总结、翻译、代码生成等。
  • 对齐人类意图:通过人工标注的数据,帮助模型“更听话”,符合人类期望。
  • 打基础为后续对齐做准备:是 RLHF(强化学习人类反馈)前的必要步骤。

原理与流程

SFT 采用指令微调(Instruction tuning),输入和输出通常是:

Input(Prompt): 请你帮我写一篇关于人工智能的作文。
Output(Response): 当然可以,以下是关于人工智能的作文……

数据格式

一般是 JSON 或 JSONL 格式,结构如下:

{
  "instruction": "请将以下文本翻译成英文:我喜欢跑步。",
  "input": "",
  "output": "I like running."
}
{
  "prompt": "<|user|> 请帮我写一篇春节的作文 <|assistant|> 好的,以下是春节的作文……"
}

模型训练方式

  • 冻结大部分参数 or 全参数微调。
  • 使用 交叉熵损失函数(Cross Entropy Loss):让模型输出尽可能接近标注的“输出”。
  • 可选择 低秩适配(LoRA) 等高效微调技术以节省显存。

为什么SFT很关键?

让大模型变聪明的第一步;

  • 让 AI 更能听懂人话的根基;
  • 产业应用最常使用的训练阶段之一,比如微调成客服、写作助手、代码助手等。

监督微调

默认为0:测试pretrain模型效果,设置为1:测试full_sft模型效果

python eval_model.py --model_mode 1

对应的内容如下所示:
在这里插入图片描述
可以看到经过 SFT,整个回答效果质量获得了很大的提升!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武子康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值