如何从零打造一个极简的DeepSeek-R1大模型

如何从零打造一个极简的DeepSeek-R1大模型

本文旨在记录和分享如何依据开源项目minimind,从零开始完整地训练一个极简的大语言模型。minimind这个开源项目的目标是以极低的成本(约3块钱)和极短的时间(2小时)训练出一个仅有25.8M的超小型语言模型MiniMind。

这篇文章将重点关注整个大模型训练的完整流程,而非追求模型的极致性能。

一、 准备工作:高性价比的算力平台

要训练模型,首先需要GPU算力。本次实践选用的是GpuGeek算力市场。

• 选择GPU:平台提供了多种GPU选项,其中 RTX-A5000-24G 显卡性价比极高。它的单精度浮点性能达到27.8 TFLOPS,显存带宽768 GB/s,性能约为RTX 3090的80%,但价格却便宜很多,非常适合个人开发者和算法工程师进行模型迭代。

• 创建实例:在GpuGeek官网注册并完成实名认证后,进入控制台创建一个GPU实例。选择RTX-A5000-24G显卡,系统会自动创建容器实例,并支持SSH、JupyterLab等多种登录方式。

• 扩展数据盘:为了确保后续数据集和模型权重的存储空间充足,可以根据需要扩展数据盘。例如,扩展100GB的成本非常低廉。

二、 数据集准备:MiniMind开源数据集

minimind项目非常贴心地开源了预训练、微调和强化学习所需的全部数据集,省去了繁琐的数据预处理工作。

• 数据集简介:

◦ pretrain_hq.jsonl: 用于模型预训练阶段。

◦ sft_mini_512.jsonl: 用于SFT(监督微调)阶段,整合了匠数科技SFT数据和Qwen2.5蒸馏数据。

◦ dpo.jsonl: 用于RLHF(强化学习)阶段。

◦ r1_mix_1024.jsonl: DeepSeek-R1-1.5B蒸馏数据,这是训练推理模型的关键。

你可以打开这些数据集的具体内容,以便领会每个训练阶段的数据集不同格式。

• 下载数据集:

  1. 安装modelscope库:pip install modelscope。

  2. 进入数据盘目录(如 /gz-data),使用以下命令下载完整数据集:

  3. GpuGeek平台的网络速度很快,可以有效避免下载焦虑。

下面的流程图让我们对每个数据集在训练阶段的作用更加清晰:

三、 训练流程:三步构建大模型

首先,需要下载minimind项目代码,并准备好运行环境。

  1. 克隆项目代码:

  2. 这里使用了ghfast.top来加速GitHub的下载。

  3. 安装依赖:

  4. 注意:为了避免安装失败,建议去掉requirements.txt文件中各个库的版本号限制。

  5. 移动数据集:将下载好的数据集文件移动到项目代码的dataset目录下。

接下来,就可以按照大模型训练的经典三阶段流程开始训练了。所有训练脚本都位于trainer目录下。

第一阶段:预训练 (Pre-training) - 学知识

此阶段让模型学习语言的基本规律和世界知识。

执行后会得到预训练权重文件 pretrain_*.pth。

第二阶段:指令微调 (SFT) - 学对话

此阶段教模型理解并遵循人类的指令,进行对。

执行后会得到全参数微调后的权重文件 full_sft_*.pth。

第三阶段:强化学习 (RLHF) - 学偏好

通过DPO(Direct Preference Optimization)算法,让模型的回答更符合人类的偏好。

四、 核心技巧:训练符合特定格式的推理模型

为了让模型能像DeepSeek-R1那样生成带有和标签的回复,需要进行蒸馏训练。

• 回复模板:推理模型R1的回复遵循以下模板:

• 这个模板通过在强化学习阶段设置规则奖励函数来约束模型。

• 损失惩罚技巧:实验发现,仅通过SFT式的蒸馏,模型很难稳定地遵循上述模板。minimind项目采用了一个小技巧:在训练脚本 train_distill_reason.py 中,对标记位置的token(如)增加损失惩罚。通过提高这些关键token的损失权重,强制模型学会生成指定的格式。

下面是类似R1的训练数据格式:

在训练数据里有和两个部分,训练之后,我们可以在out目录得到四个模型权重:

五、 测试与总结

训练完成后,out目录下会生成四个模型权重。可以使用eval_model.py脚本来测试模型的效果。尽管由于参数量小,模型的回答可能比较简短,但它已经能够成功回答问题,完整地走完了整个训练流程。

通过这个项目,我们不仅可以动手实践大模型的完整训练过程,还能深入理解其背后的源码实现,例如其基于Transformer并包含MoE(混合专家系统)功能的MiniMind模型架构。

建议对源码进行深入阅读,以获得更深刻的理解。

相关推荐
一点一木40 分钟前
🚀 2026 年 8 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
ssshooter1 小时前
现在网页都能提供 MCP 了?!
前端·人工智能·程序员
京东云开发者1 小时前
Claude Code vs Codex 记忆体系深度对比
人工智能
不加辣椒2 小时前
第 4 章 什么是 Harness Engineering
人工智能
桃西西呀2 小时前
上下文窗口都卷到 100 万了,大模型为什么还在为"位置"发愁?
人工智能·llm·ai编程
阿拉斯攀登2 小时前
SpringBoot整合MQTT:后端订阅设备数据、解析传感器报文
人工智能
然我2 小时前
模型不是 Agent:从零实现一个最小 Agent Loop
前端·人工智能·agent
黄油面包2 小时前
Codex 额度三天见底后,我重新做了一周预算
前端·人工智能
AI效率君2 小时前
Deer‑Flow 2.0 + Go‑MCP‑Server(add加法工具)保姆级完整教程
人工智能·agent
阿拉斯攀登2 小时前
SpringCloud微服务MQTT架构:设备消息统一接入、业务分发设计
人工智能