当前位置: 首页 > article >正文

大语言模型 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,整个回答效果质量获得了很大的提升!

http://www.lryc.cn/news/2380268.html

相关文章:

  • [免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 【RAG】RAG-MCP:基于检索增强生成来缓解大语言模型工具选择中的提示膨胀问题
  • 甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
  • UI自动化测试中,一个完整的断言应所需要考虑的问题
  • AIGC与数字金融:人工智能金融创新的新纪元
  • CSS详解:特性、选择器与优先级
  • 手机怎么查看网络ip地址?安卓/iOS设备查询指南
  • React-useRef
  • 无损耗协议:PROFINET和EtherNet IP网关的高效安装指南
  • 【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】
  • std::ranges::iota
  • C++(24):容器类<list>
  • 【C++】不推荐使用的std::allocator<void>
  • 基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
  • vue3 el-table实现字段可编辑
  • 基于React的高德地图api教程005:圆形标记的绘制、删除、修改
  • liunx定时任务,centos定时任务
  • 三种嵌入式开发常用的组网方式
  • ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案
  • 城市排水管网流量监测系统解决方案
  • Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群
  • YOLOv8 在单片机上的几种部署方案
  • 后端框架(1):Mybatis
  • linux下tcp/ip网络通信笔记1,
  • SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
  • 语音识别——声纹识别
  • window 显示驱动开发-报告图形内存(三)
  • 安全运维 -- linux磁盘挂载到windows
  • 使用 Apache POI 生成 Word 文档
  • 高防服务器流量“清洗”什么意思