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

大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调
写在前面 GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,…...

[免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端),分享下哈。 项目视频演示 【免费】苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端Vue管理端) Java毕业设计…...

【RAG】RAG-MCP:基于检索增强生成来缓解大语言模型工具选择中的提示膨胀问题
摘要 由于提示膨胀和选择复杂性,大型语言模型 (LLM) 难以有效利用越来越多的外部工具,例如模型上下文协议 (MCP)[1]中定义的那些工具。 我们引入了 RAG-MCP,这是一个检索增强生成框架,通过卸载工具发现来克服这一挑战。 RAG-MCP …...

甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
2025年甘特图工具的全面指南 在项目管理领域,甘特图作为最直观的任务规划和进度追踪工具,已成为团队协作和项目执行的核心手段。随着数字化技术的快速发展,2025年的甘特图工具市场呈现出前所未有的多元化和智能化趋势。从开源软件到云端协作…...
UI自动化测试中,一个完整的断言应所需要考虑的问题
在UI自动化测试中,一个完整的断言应全面覆盖用户界面(UI)的功能性、交互性和视觉正确性。以下是断言需要包含的核心内容及详细说明: 一、基础元素验证 存在性断言 验证元素存在于DOM中示例代码(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…...

AIGC与数字金融:人工智能金融创新的新纪元
AIGC与数字金融:人工智能金融创新的新纪元 引言 人工智能生成内容(AIGC)在数字金融领域发挥着关键作用,从金融内容生成到智能风控,从个性化服务到投资决策,AIGC正在重塑金融的方式和效果。本文将深入探讨A…...
CSS详解:特性、选择器与优先级
CSS详解:特性、选择器与优先级 目录 CSS详解:特性、选择器与优先级一、CSS的核心特性1. 层叠性(Cascading)2. 继承性(Inheritance)3. 优先级(Specificity)4. 响应式设计5. 动画与过渡…...

手机怎么查看网络ip地址?安卓/iOS设备查询指南
在移动互联网时代,IP地址作为设备的网络身份证,无论是网络调试、远程连接还是排查故障都至关重要。本文将系统介绍安卓和iOS设备查看IP地址的多种方法,帮助您快速掌握这一实用技能。 一、安卓手机查看IP地址方法 1、通过WiFi设置查看 打开设…...
React-useRef
useRef useRef 是 React 的一个 Hook,用来创建一个 可变的引用对象,这个引用对象在组件的整个生命周期内保持不变。 翻译成人话就是,用useRef创建一个相对共享的对象管理器,它里面装的内容的读写是不会引起界面渲染的。 典型的应用…...

无损耗协议:PROFINET和EtherNet IP网关的高效安装指南
作为风力发电机组监控系统的重要组成部分,PROFINET和EtherNet/IP协议转换网关倍讯BX-606-EIP的安装至关重要。作为安装工,我们要确保网关安装的高效顺利,保证风力发电机组的稳定运行。 首先,我们需要仔细检查网关的硬件接口,确保所有连接线缆与设备端口相匹配。网关…...

【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
std::ranges::iota
std::ranges::iota_view 和 std::views::iota 是 C23 Ranges 库中的一部分,用于生成一系列递增的值,类似 Python 的 range() 或传统的 for 循环生成器。 一 原形 Defined in header <numeric> Call signature template< std::input_or_output…...
C++(24):容器类<list>
目录 一、核心概念 二、基本语法 1. 声明与初始化 2.添加元素 3.访问与遍历 4. 删除元素 三、特点 1. 高效插入/删除 2. 不支持随机访问 3. 特有成员函数 4. 内存与性能 四、示例代码 五、成员函数 六、使用场景 七、注意事项 Lists将元素按顺序储…...
【C++】不推荐使用的std::allocator<void>
文章目录 不推荐使用的std::allocator<void>1. 核心区别2. 成员函数对比(1) allocate 和 deallocate(2) construct 和 destroy 3. 设计动机(1) std::allocator<T>(2) std::allocator<void> 4. 使用场景示例(1) std::allocator<int>(2) std::allocator&…...

基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
1、简介 本文讲述了如何实现简易的后端鉴权服务。所谓“鉴权”,就是“身份鉴定”“权限判断”。涉及的技术有:OAuth2、SpringSecurity、Jwt、过滤器、拦截器。OAuth2用于授权,使用Jwt签发Access Token和Refresh Token,并管理token…...
vue3 el-table实现字段可编辑
在Vue 3中,如果你想让el-table(Element Plus的表格组件)的字段可编辑,你可以通过以下方式来实现: 使用cell-mouse-enter和cell-mouse-leave事件动态显示编辑图标或控件 你可以在鼠标进入单元格时显示一个编辑图标或输…...
基于React的高德地图api教程005:圆形标记的绘制、删除、修改
文章目录 5、圆形绘制和编辑5.1 绘制圆5.1.1 添加绘制圆按钮5.1.2 点击地图绘制圆心5.2 修改圆5.2.1 修改圆的基本信息5.2.2 修改圆的位置和大小5.3 删除圆标记5.4 定位到圆5.5 代码下载5.05、圆形绘制和编辑 5.1 绘制圆 5.1.1 添加绘制圆按钮 实现代码: {!isActiveDrawCi…...

liunx定时任务,centos定时任务
yum install cronie crontabs -y直接运行 crond -n 在前台运行 crond -i 守护进程在没有inotify支持的情况下运行systemctl service crond start # 启动服务 systemctl enable crond.service # 设置开机自启 sudo systemctl restart crond # 重启 cron 服务systemctl serv…...

三种嵌入式开发常用的组网方式
一、三种嵌入式开发常用的组网方式 这里记录了三种嵌入式开发常用的网络环境,最终目标也就是让开发板、虚拟机、物理机在同一个局域网下。一般的网络环境下都非常容易实现,但是对于学生校园网可得想些法子了,因为校园网一般会有设备连接数限…...

ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案
ping baidu.coom可以通,ping www.baidu.com不通【DNS出现问题】解决方案 检查IPV6是否有问题 # 1. 检查 IPv6 地址,记住网络接口的名称 ip -6 addr show# 2. 测试本地 IPv6,eth0换成自己的网络接口名称 ping6 ff02::1%eth0# 3. 检查路由 ip…...

城市排水管网流量监测系统解决方案
一、方案背景 随着工业的不断发展和城市人口的急剧增加,工业废水和城市污水的排放量也大量增加。目前,我国已成为世界上污水排放量大、增加速度快的国家之一。然而,总体而言污水处理能力较低,有相当部分未经处理的污水直接或间接排…...

Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群
Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群 1.本机部署个代理 这里我是自己用dockersing-box 部署的 http://192.168.2.105:10808 如果 用v2rayN等软件部署的,记得开启局域网共享 2.安装虚拟机 我本机使用的是Ubuntu Desktop ,这里在QEMU/K…...

YOLOv8 在单片机上的几种部署方案
YOLOv8 在单片机上的部署方案 单片机资源(如内存、计算能力)有限,直接部署完整的 YOLOv8 模型并不现实。不过,我们可以通过模型量化、优化和使用轻量级框架来实现简化版的目标检测。下面为你介绍几种可行的方案: 方案…...

后端框架(1):Mybatis
什么是框架? 盖高楼,框架结构。 框架结构就是高楼的主体,基础功能。 把很多基础功能已经实现了(封装了)。 在基础语言之上,对各种基础功能进行封装,方便开发者,提高开发效率。 mybatis:对jd…...

linux下tcp/ip网络通信笔记1,
本文章主要为博主在学习网络通信的笔记一个Udp_echo_server,和client的代码实现 1,网络发展,网络协议,意识到网络通信——不同主机的进程间通信, 2,学习如何在应用层调用系统提供的接口进行通信,echo_Udp…...
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
/// <summary> /// SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。 /// </summary> public class SqlHelper : IDbHelper {private readonly IDbConnectionFactory _connectionFactory;private…...

语音识别——声纹识别
通过将说话人的声音与数据库中的记录声音进行比对,判断说话人是否为数据库白名单中的同一人,从而完成语音验证。目前,3D-Speaker 声纹验证的效果较为出色。 3D-Speaker 是一个开源工具包,可用于单模态和多模态的说话人验证、说话…...

window 显示驱动开发-报告图形内存(三)
图形内存报告示例 示例 1:笔记本电脑上的 128 MB 专用板载图形内存 以下屏幕截图显示了使用 Intel Iris 离散图形适配器运行 Windows 11 的 Surface 笔记本电脑的计算图形内存数。 适配器的可用内存总数为 16424 MB,用于图形用途,细分如下&…...
安全运维 -- linux磁盘挂载到windows
0x00 背景 一个需求需要将linux服务器文件同步到windows。在此过程中遇到了三连报错,特此记录一下。 0x00 error 1 一开始死活挂不上,报错 mount: /mnt/Folder: mount(2) system call failed: No route to host. 一开始以为是dns问题,其实…...
使用 Apache POI 生成 Word 文档
创建一个包含标题、段落和表格的简单文档。 步骤 1:添加依赖 确保你的项目中已经添加了 Apache POI 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添加以下内容: <dependency><groupId>org.apache.poi</groupId>...