从零训练 64M MiniMind 小型 GPT:3090 单卡复现实战总结
1. 实验目标
本次作业的目标是基于开源项目 MiniMind,使用单卡 GPU 从零训练一个约 64M 参数的小型 GPT 对话模型。训练流程采用 MiniMind 推荐的轻量复现路线:
- 使用
pretrain_t2t_mini.jsonl完成预训练,让模型学习基础语言规律和通用文本续写能力。 - 使用
sft_t2t_mini.jsonl完成全参数监督微调,让模型具备基础问答和对话能力。 - 使用
eval_llm.py加载训练后的权重,验证模型是否能够正常生成回复。
MiniMind 官方 README 中说明,minimind-3 主线 Dense 模型约为 64M 参数,并推荐单卡 GPU 或快速复现用户优先使用 pretrain_t2t_mini.jsonl 与 sft_t2t_mini.jsonl 组合。
2. 实验环境
本次实验使用租用 GPU 服务器完成训练,核心环境如下:
| 项目 | 配置 |
|---|---|
| 操作系统 | Linux 服务器环境 |
| Python 环境 | Conda 独立环境 minimind-yu |
| GPU | NVIDIA GeForce RTX 3090 24GB |
| 深度学习框架 | PyTorch |
| 复现项目 | jingyaogong/minimind |
| 模型规模 | 约 64M 参数 |
| 数据集 | pretrain_t2t_mini.jsonl、sft_t2t_mini.jsonl |
3. 复现步骤
3.1 创建独立环境
为了避免和系统默认 Python 或其他项目依赖冲突,先创建独立 Conda 环境:
conda create -n minimind-yu python=3.10 -y
conda activate minimind-yu
python -V
3.2 克隆 MiniMind 仓库
cd ~/nas/yu
git clone --depth 1 https://github.com/jingyaogong/minimind
cd minimind
3.3 安装依赖
MiniMind 的 requirements.txt 中没有直接安装 PyTorch,因此需要先单独安装和 CUDA 匹配的 PyTorch,再安装项目其他依赖:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
安装后检查 PyTorch 和 CUDA 是否可用:
python - <<'PY'
import torch
print("torch =", torch.__version__)
print("cuda available =", torch.cuda.is_available())
print("cuda version =", torch.version.cuda)
if torch.cuda.is_available():
print("gpu =", torch.cuda.get_device_name(0))
PY
3.4 准备数据集
本次只使用 MiniMind 推荐的快速复现数据组合:
dataset/
├── pretrain_t2t_mini.jsonl
└── sft_t2t_mini.jsonl
实际目录检查结果如下,两个 mini 数据集已经正确放入 dataset 目录:

从截图可以看到,目录中包含:
dataset/pretrain_t2t_mini.jsonldataset/sft_t2t_mini.jsonlout/pretrain_768.pthout/full_sft_768.pth
这说明预训练权重和 SFT 权重均已成功生成。
4. 预训练过程
进入 trainer 目录后运行预训练脚本:
cd ~/nas/yu/minimind/trainer
python train_pretrain.py
训练启动后,终端输出如下:

关键日志如下:
Model Params: 63.91M
Trainable Params: 63.912M
Generating train split: 1270238 examples
Epoch: [1/2](100/39695), loss: 7.5224
Epoch: [1/2](200/39695), loss: 7.0242
Epoch: [1/2](300/39695), loss: 6.6762
Epoch: [1/2](400/39695), loss: 6.5266
Epoch: [1/2](500/39695), loss: 6.2077
Epoch: [1/2](600/39695), loss: 6.0940
从日志可以观察到:
- 模型参数量为
63.91M,符合 64M 小型 GPT 的作业要求。 - 可训练参数为
63.912M,说明本阶段是从零开始训练模型参数。 - 训练集成功切分出
1,270,238条样本。 - loss 从
7.5224下降到6.0940,训练过程正常收敛。
预训练完成后,out 目录下生成:
out/pretrain_768.pth
5. 全参数 SFT 训练
预训练完成后,继续执行全参数监督微调:
cd ~/nas/yu/minimind/trainer
python train_full_sft.py
SFT 阶段的目标是让模型从“会续写文本”进一步变成“能按指令对话”。训练完成后,out 目录下生成:
out/full_sft_768.pth
该权重即为本次最终复现得到的 MiniMind Zero 对话模型权重。
6. 模型推理测试
训练结束后,在项目根目录执行:
cd ~/nas/yu/minimind
python eval_llm.py --weight full_sft
实际测试结果如下:

6.1 问题一:你有什么特长?
模型输出节选:
作为AI模型,我具有丰富的数据处理和分析能力,能够处理各种类型的信息,
包括信息查询、信息检索、知识图谱构建等。
该回答说明模型已经具备基础的自我介绍和通用问答能力。
6.2 问题二:为什么天空是蓝色的?
模型输出节选:
天空之所以呈现出蓝色,主要是由于光的散射效应。
模型能够围绕“光的散射效应”进行解释,虽然回答中仍存在重复和表达不够精炼的问题,但整体方向正确,说明 SFT 后模型已经具备基础科普问答能力。
推理速度记录:
[Speed]: 60.17 tokens/s
[Speed]: 103.48 tokens/s
6.3 问题三:请用 Python 写一个计算斐波那契数列的函数
模型能够开始输出 Python 代码结构,说明模型已经初步具备代码生成能力。不过由于模型规模只有 64M,生成代码的稳定性和完整性仍然有限,后续可以通过更多代码数据或继续 SFT 提升。
7. 结果分析
本次复现完成了 MiniMind 从零训练的核心流程:
| 阶段 | 输入数据 | 命令 | 输出结果 |
|---|---|---|---|
| 预训练 | pretrain_t2t_mini.jsonl |
python train_pretrain.py |
pretrain_768.pth |
| 全参数 SFT | sft_t2t_mini.jsonl |
python train_full_sft.py |
full_sft_768.pth |
| 推理测试 | full_sft_768.pth |
python eval_llm.py --weight full_sft |
可正常对话 |
从训练和推理结果看,本次实验达成了以下目标:
- 成功复现约 64M 参数的 MiniMind GPT 模型。
- 成功完成从零预训练和全参数 SFT 两个核心阶段。
- 成功生成
pretrain_768.pth和full_sft_768.pth权重文件。 - 成功使用最终 SFT 权重进行命令行推理测试。
- 模型可以回答基础问答、科普解释和简单代码生成问题。
8. 遇到的问题与解决方法
8.1 PyTorch 需要单独安装
MiniMind 的 requirements.txt 中没有默认安装 PyTorch,因此如果直接执行 pip install -r requirements.txt,可能会导致训练时找不到 torch 或 CUDA 不可用。
解决方法是先安装和 GPU 环境匹配的 PyTorch,再安装项目依赖。
8.2 数据集文件必须放在指定目录
训练脚本默认从 ./dataset/ 目录读取数据。如果数据集路径错误,会导致脚本找不到数据。
解决方法是严格保持如下目录结构:
minimind/
└── dataset/
├── pretrain_t2t_mini.jsonl
└── sft_t2t_mini.jsonl
8.3 小模型能力有限
64M 参数模型可以完成基础对话,但相比大模型仍有明显差距,表现为:
- 回答有时重复;
- 复杂问题理解不稳定;
- 代码生成可能不完整;
- 长文本推理能力有限。
这属于小参数模型的正常现象。MiniMind 的价值不在于直接追求大模型效果,而在于用较低成本完整理解 LLM 的训练链路。
9. 实验总结
通过本次作业,我完整复现了 MiniMind 的最小训练闭环:从数据集准备、环境配置、预训练、监督微调到最终推理测试。实验结果表明,在单张 RTX 3090 上,可以较低成本训练出一个约 64M 参数的小型 GPT 模型,并让它具备基础对话能力。
本次实验加深了我对大语言模型训练流程的理解:
- 预训练阶段主要负责学习通用语言规律和知识分布。
- SFT 阶段主要负责让模型学会按照用户指令进行回答。
- 模型权重、数据路径和训练脚本之间的对应关系非常重要。
- 小模型虽然效果有限,但非常适合作为理解 Transformer、Tokenizer、训练循环和推理流程的入门实践。
后续如果继续扩展,可以尝试:
- 使用完整的
pretrain_t2t.jsonl与sft_t2t.jsonl提升效果; - 增加 DPO / PPO / GRPO 等强化学习阶段;
- 部署 WebUI 或 OpenAI API 兼容服务;
- 将模型转换为 Transformers / llama.cpp / ollama 等格式;
- 使用自定义数据做领域微调。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)