【有手就行】自己花20分钟从0开始训练一个“大模型”

news/2025/12/6 23:56:37/文章来源:https://www.cnblogs.com/oddmeta/p/19316889

一、说在前面

训练基座大模型那都是大公司们的事情,普通人、普通公司肯定是玩不起的,但是作为一个技术人,你可以不去做真正的大模型训练,但是你还是有必要知道和了解一下一个大模型是如何训练出来的。

而GPT_teacher-3.37M-cn 是一个很好的示例项目,让你可以用一台普通的PC,用CPU来训练一个3.37M的中文GPT模型,整个训练耗时不到20分钟,回答训练集里的问题的效果也还是挺不错的。感兴趣的同学可以用这个项目来练手、实操复现一下“自己动手从0开始训练一个大模型”的完整流程。

二、项目概述

一个轻量级中文GPT模型项目,专为在CPU上快速训练和演示而设计:

模型参数量:3.37M
架构:4层Transformer解码器
特点:使用RMSNorm、RoPE位置编码、权重共享等优化技术
目标:45分钟内在普通CPU上训练出可用的中文问答模型

参考训练时长:

  • 我的笔记本:CPU: i7-8850H CPU @ 2.60GHz+16G内存,整个训练花了1419.35秒,约需要23.65分钟。
  • 一台Mac Pro(2.6GHz 6核 i7, 16GB内存),整个训练1186.8秒,约需要19.78分钟。

【有手就行】自己花20分钟从0开始训练一个“大模型”

三、完整复现流程

介绍完了,就让我们来实操整个从0到1的训练吧。

先下载代码:

git clone https://gitee.com/baidumap/GPT_teacher-3.37M-cn

1. 环境准备

# 进入项目目录
cd g:\oddmeta\oddllm\GPT_teacher-3.37M-cn# 安装依赖
python -m pip install -r requirements.txt

依赖项包括:

pip>=21.0          # 确保依赖解析能力,避免安装失败
torch>=2.2,<2.5    # 锁定 2.x 稳定区间,2.5+ 已完善 NumPy 2.x 支持,但暂不冒险
PyYAML>=6.0,<7.0   # 限制在 6.x 稳定系列,避开未来 7.x 大版本变更
numpy>=1.24,<2.0   # 核心修复:满足原版本要求,同时彻底避开 NumPy 2.x 兼容问题
tokenizers>=0.15,<0.25  # 锁定 0.15-0.24 稳定区间(Hugging Face 官方推荐)
sentencepiece>=0.1.99,<0.2.0  # 限制在 0.1.x 系列,避免 0.2.x 重构版本风险

2. 构建中文分词器

python -m src.build_tokenizer

这将:

  • 使用BPE(字节对编码)算法训练分词器
  • 设置ByteLevel解码器确保中文输出正常
  • 保存到tokenizer/tokenizer.json

3. 配置文件确认

config.yaml包含了所有必要配置,我在这里给每个参数加了个说明,以便于理解每个参数的意义。

model:n_layer: 4         # 模型的Transformer层数,决定了模型的深度。这个小模型使用4层,平衡了参数量和性能。n_head: 4          # 注意力头的数量,每个头可以学习不同的语义表示。4个注意力头适合小参数量模型。每个头的维度为64(256/4)。n_embd: 256        # 嵌入向量的维数,决定输入的维度。这个小模型使用256维的嵌入向量。seq_len: 128       # 序列最大长度,模型能处理的最大token数量。设为128是为了在CPU上高效训练。dropout: 0.0       # 丢弃率,用于防止过拟合。决定模型训练时是否进行dropout。这个小模型不使用dropout。
training:batch_size: 16     # 批次大小,决定每次训练的样本数量。这个小模型使用16个样本进行训练。micro_batch: 4     # 实际每次前向传播的批次大小,用于梯度累积。微批次大小,每个批次进一步分为4个微批次进行训练。这个小模型使用4个微批次。lr: 0.0003         # 学习率,决定模型训练时参数的更新速度。这个小模型使用0.0003的学习率。weight_decay: 0.01 # 权重衰减,一种正则化方法,防止模型过拟合。权重衰减决定模型训练时参数的更新大小。这个小模型使用0.01的权重衰减。max_steps: 2000    # 最大训练步数,决定模型训练的轮数。这个小模型使用2000个训练步数。warmup_steps: 5    # 预热步数,决定模型训练时参数的预热数量。这个小模型使用5个预热步数。eval_interval: 20  # 评估间隔,决定模型训练时评估的间隔。这个小模型使用20个训练步数间隔评估模型性能。save_dir: checkpoints # 模型保存目录。seed: 42           # 随机数种子,决定模型训练时参数的初始化。这个小模型使用42作为随机数种子。
data:train_path: data/train.jsonl      # 训练数据路径。val_path: data/val.jsonl          # 验证数据路径。format: instruct                  # 数据格式,这里使用instruct格式,包含prompt和completion字段。
tokenizer:type: hf_tokenizers              # 分词器类型,这里使用hf_tokenizers,即Hugging Face的分词器。path: tokenizer/tokenizer.json   # 分词器路径,这里使用tokenizer/tokenizer.json。

4. 执行训练

python -m src.train

5. 测试模型

训练完成后,根据src/train.py中的代码,最终会在config.yaml指定的目录下(checkpoints)生成一个标准的模型,以及一个量化的模型,分别是:

  • last.pt
  • quantized.pt

然后你可以用下面的命令来测试一下训练集(位于data/train.jsonl)里的一些问题:

  • 测试问题1:解释RoPE的作用
python -m src.infer --prompt "解释RoPE的作用" --ckpt checkpoints/last.pt --temperature 0.0 --show_label
  • 测试问题2:解释蒸馏水与纯水区别?
python -m src.infer --prompt "解释蒸馏水与纯水区别?" --ckpt checkpoints/last.pt --temperature 0.0 --show_label
  • 测试量化模型
python -m src.infer --prompt "什么是注意力机制?" --ckpt checkpoints/quantized.pt --temperature 0.0 --show_label

四、关键技术点解析

在这个示例的大模型训练里,我们基于Decoder-only的Transformer(因果语言模型),使用下三角掩码确保每次只关注历史信息,这正是GPT系列模型能够生成连贯文本的核心。

1. 训练参数说明

具体的训练参数我在上面的config.yaml里给每个参数都写了一个注释,用于说明每个参数的意义。而总结概括一下这个配置参数的话,主要如下:

  • 模型结构优化:
    • 使用RMSNorm代替LayerNorm,计算更高效
    • 采用RoPE相对位置编码,避免位置编码长度限制
    • 词嵌入与输出层权重共享,减少参数量
  • 训练优化:
    • 梯度累积实现大批次效果
    • 学习率预热防止训练不稳定
    • 仅对答案部分计算损失(通过ignore_index=-100)
  • CPU优化:
    • 动态量化减小模型体积
    • 设置合适的线程数
    • 禁用DataLoader多进程

2. 关键代码

  • 因果掩码与前向传播:src/model.py: 95–103
  • RoPE实现:src/model.py: 18–31
  • 自注意力前向:src/model.py: 41–58
  • 残差块:src/model.py: 81–84

五、补充说明

1. 仅3.37M参数远达不到scale law

这个项目只是一个演示项目,教你如何自己动手从0到1来训练一个大模型,但是必须要知道的是大模型有个别称是 scale law,所以走传统transfomer路线的话,注意力是非常吃参数的,这么一个参数量,其输出完全肯定不会非常好(除非你问的就是训练集里的知识)。
同时在这个项目的训练集(位于data/train.jsonl)里你也可以看到,虽然有510条训练数据,但实际上里面的内容全是Ctrl C + Ctrl V出来的,真正的prompt和completion就几条。

2. 为什么问一些不在训练集里的问题时,返回乱七八糟的东西,而不是“不知道”

大模型的本质是一个词语接龙游戏,每出一个字,根据概率去预测下一个字是什么。其目标是生成流畅的文本,而不是正确的文本,它只是在模仿训练集里的文本概率,而不是真正的理解内容,所以最终的效果完全取决于你给它的训练数据。
因此,当你去问不在训练集里的问题的时候,大模型就只能随便的去猜下一个字可能是什么字,而不是直接给你回答一个“不知道”,这也是大模型“幻觉”的由来。

3. 关于大模型幻觉

大模型幻觉主要有四种幻觉类型:前后矛盾,提示词误解,事实性幻觉,逻辑错误。
幻觉主要有三大成因:数据质量问题,生成机制缺陷,模糊指令。
幻觉通常有五种解决方案:精准提示词、示例学习、调参、RAG技术、幻觉检测方案,并让大模型学会给答案标注“参考文献”(溯源)。

4. 大模型使用

对于一个已经训练好的模型,在API调用时有几个常用的参数是可以影响大模型给你一个你期望的结果的,这几个参数主要是:temperature、top-k、top-p,以及prompt引导。

  • temperature:通常0.1到0.5。温度越低,输出越稳定,温度越高,输出越天马行空(也可以说越有创意)。
  • top-k:10到30。只保留前 k 个选项,而如果这 k 个选项里都没有 “有依据的答案”,模型就只能输出 prompt 引导的 “不知道”。
  • top-p:0.1到0.4。只保留累计概率 p 的选项。top-ptop-k 一起用,在top-k中的给出的词汇中进行二次筛选。无依据时,这个词集中只会包含 “不知道” 这类标准回复,而非编造的低置信词。
  • prompt:在 prompt 中明确指令:“对于你不知道、没有相关信息的问题,直接回答‘不知道’,无需额外解释。”

祝同学们都能轻松上手大模型,一起学习AI,一起追赶时代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/990669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

test

SegmentTree

CEF系列技术文章:菜单隐藏实现

核心逻辑与 ID 说明 CEF(Chromium Embedded Framework)中可通过硬编码指定菜单项 ID,结合菜单可见性判断接口,精准隐藏指定 Chrome 原生菜单;同时支持工具栏按钮的显隐控制,以下为核心实现与关键 ID 说明。 核心…

2025最新灯塔工厂建设服务商/厂家TOP5评测!科技赋能+全周期服务权威榜单发布,引领智能制造新生态

随着全球制造业向智能化、绿色化转型加速,灯塔工厂建设已成为企业提升核心竞争力的关键路径。本榜单基于技术创新力、行业适配性、服务完整性、落地成效四大维度,结合行业权威报告与企业实地案例调研,深度解析2025年…

AI真好玩系列-WebGL爱心粒子手势互动教程 | Interactive Heart Particles with Hand Gestures

AI真好玩系列-WebGL爱心粒子手势互动教程 | Interactive Heart Particles with Hand Gestures 周末的深夜,睡不着觉,闲来无事,打开Gemini哈基米玩一把,废话不多说,先上图看最终效果~ 碎碎念:我很想上传视频,但是…

大数据分析基础及应用案例:第八周学习报告——深度学习与金融案例入门

在金融科技飞速发展的当下,深度学习技术正深刻重塑着金融领域的研究与应用范式。第七周的学习围绕 “深度学习与金融案例入门” 展开,从 LSTM 模型到情感计算分析基础,再到证券文本情感分析的背景与数据来源预习,每…

第47天(简单题中等题 数据结构)

打卡第四十七天 2道简单题+1道中等题题目:思路:代码: class Solution { public:vector<bool> isArraySpecial(vector<int>& nums, vector<vector<int>>& queries) {vector<int&…

SpyCloud数据揭示:企业用户遭遇钓鱼攻击的可能性是恶意软件的三倍

SpyCloud的最新研究报告显示,针对企业用户的钓鱼攻击在一年内激增了400%,成为比恶意软件更主要的初始入侵手段。文章分析了这种攻击趋势的转变,并探讨了身份数据暴露带来的后续风险以及企业所需的综合防护策略。Spy…

nccl-1_initialization bootstrap

nccl学习-1: 初始化communicator与bootstrap 网络 在nccl的例子中,当我们获取了设备的数量,为每一个设备分配了一个ncclComm_t后,需要根据已经固定的通信拓扑,对每一个算子进行配置。目前,针对communicator的初始…

2025年国内TOP5会计培训机构推荐,引领专业提升之路

在当前的会计培训市场中,各类机构提供了丰富的选择,以满足不同学员的需求。比如,成都环宇知了科技有限公司专注于基础课程,适合初学者。而超有爱教育培训则为在职人员开设了实用性强的课程,结合真实案例帮助学员提…

2025年国内TOP5会计培训机构推荐,引领专业提升之路

在当前的会计培训市场中,各类机构提供了丰富的选择,以满足不同学员的需求。比如,成都环宇知了科技有限公司专注于基础课程,适合初学者。而超有爱教育培训则为在职人员开设了实用性强的课程,结合真实案例帮助学员提…

2025年评价高的草本床垫供应厂家TOP5推荐

在2025年,市场上的草本床垫供应厂家层出不穷,每一家公司都在努力提升产品质量与用户体验。从材料选择到设计理念,众多厂家在不断创新。其中,四川宅逸居家居有限公司凭借其独特的草本助眠技术广受好评;而芬驰家居则…

2025 最新智能运维服务商/ 厂家 TOP5 评测!科技赋能 + 全周期服务权威榜单发布,引领智慧工厂运维新生态

随着智能制造的深入发展,智能运维作为保障工厂高效、稳定、绿色运行的核心环节,其重要性日益凸显。本榜单基于技术创新力、行业适配性、服务覆盖度、实战效果四大维度,结合行业权威数据与客户反馈,对2025年智能运维…

人生第一篇博客:千里之行,始于足下

现在是2025年12月6日晚,大二的我像一个刚闯入森林的探险者,好奇的注册了这个博客网站,四处打量着各个大佬写的高级的东西(看不懂)据说写博客是很多学计算机的人的好习惯,用来记录和监督自己一天的学习或者思考,…

全网热议!2025年比较好的全屋定制公司推荐

全屋定制市场在2025年展现出强劲的发展势头,吸引了越来越多的消费者关注。众多厂家如东莞市洋臣家具有限公司、志想家具和家思家具等,通过独特的设计理念和优质的服务,不断赢得市场口碑。这些品牌不仅注重产品的质量…

扩散炉供应厂家TOP推荐:2025年值得关注的优质厂家

在本文中,我们将深入探讨扩散炉供应厂家的TOP推荐榜单,以帮助您更好地了解当前市场上值得关注的优质厂家。首先,我们将列出排名前列的制造商,如青岛晨立电子有限公司、福润德和金瑞源,这些企业在质量、技术和服务…

2025年专业HIFI耳机口碑排行榜推荐,不容错过!

在2025年,专业HIFI耳机的市场持续发展,各品牌争相推出高品质耳机,吸引音响爱好者的关注。我们的推荐榜单中包括了市面上评价好的耳机,这些耳机不仅在音质表现上出众,还兼具外观设计美感和佩戴舒适性。东莞斯唯嘉电…

全网热议!2025年靠谱的全屋定制品牌推荐,让生活更智能

在2025年,全屋定制市场竞争愈加激烈,消费者对于家居环境的需求也日益提高。本文将介绍靠谱的全屋定制品牌TOP10,涵盖高端的全屋定制十大品牌以及广东全屋定制TOP前十,为寻找理想家居方案的客户提供实用参考。这些品…

Ancel AD410 OBD2 Scanner - Multi-Language OBD2 Code Reader Error Eraser for European American Cars

Why the Ancel AD410 OBD2 Scanner is Your Next Essential Diagnostic Tool Ever stared at your check engine light, only to be met with cryptic error codes that leave you guessing what’s wrong? Or spent …

2025年如何选择值得信赖的家居照明公司?

选择值得信赖的家居照明公司至关重要,尤其在现代智慧家居的背景下。消费者可以从多个方面进行评估,例如品牌的市场表现和用户反馈。关注照明公司的产品质量与创新技术,了解其是否将简约设计与智能科技相结合,为客户…

2025年护眼吸顶灯销售厂家有哪些?

护眼吸顶灯在现代家居和办公环境中扮演着重要角色。随着市场对健康照明需求的增加,越来越多的消费者开始关注自然光护眼吸顶灯,这些产品的设计理念是减少光线对眼睛的伤害。同时,选择合适的厂家也显得尤为重要。不同…