1. 实验目标

本次作业的目标是基于开源项目 MiniMind,使用单卡 GPU 从零训练一个约 64M 参数的小型 GPT 对话模型。训练流程采用 MiniMind 推荐的轻量复现路线:

  1. 使用 pretrain_t2t_mini.jsonl 完成预训练,让模型学习基础语言规律和通用文本续写能力。
  2. 使用 sft_t2t_mini.jsonl 完成全参数监督微调,让模型具备基础问答和对话能力。
  3. 使用 eval_llm.py 加载训练后的权重,验证模型是否能够正常生成回复。

MiniMind 官方 README 中说明,minimind-3 主线 Dense 模型约为 64M 参数,并推荐单卡 GPU 或快速复现用户优先使用 pretrain_t2t_mini.jsonlsft_t2t_mini.jsonl 组合。

2. 实验环境

本次实验使用租用 GPU 服务器完成训练,核心环境如下:

项目 配置
操作系统 Linux 服务器环境
Python 环境 Conda 独立环境 minimind-yu
GPU NVIDIA GeForce RTX 3090 24GB
深度学习框架 PyTorch
复现项目 jingyaogong/minimind
模型规模 约 64M 参数
数据集 pretrain_t2t_mini.jsonlsft_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.jsonl
  • dataset/sft_t2t_mini.jsonl
  • out/pretrain_768.pth
  • out/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

从日志可以观察到:

  1. 模型参数量为 63.91M,符合 64M 小型 GPT 的作业要求。
  2. 可训练参数为 63.912M,说明本阶段是从零开始训练模型参数。
  3. 训练集成功切分出 1,270,238 条样本。
  4. 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 可正常对话

从训练和推理结果看,本次实验达成了以下目标:

  1. 成功复现约 64M 参数的 MiniMind GPT 模型。
  2. 成功完成从零预训练和全参数 SFT 两个核心阶段。
  3. 成功生成 pretrain_768.pthfull_sft_768.pth 权重文件。
  4. 成功使用最终 SFT 权重进行命令行推理测试。
  5. 模型可以回答基础问答、科普解释和简单代码生成问题。

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 模型,并让它具备基础对话能力。

本次实验加深了我对大语言模型训练流程的理解:

  1. 预训练阶段主要负责学习通用语言规律和知识分布。
  2. SFT 阶段主要负责让模型学会按照用户指令进行回答。
  3. 模型权重、数据路径和训练脚本之间的对应关系非常重要。
  4. 小模型虽然效果有限,但非常适合作为理解 Transformer、Tokenizer、训练循环和推理流程的入门实践。

后续如果继续扩展,可以尝试:

  • 使用完整的 pretrain_t2t.jsonlsft_t2t.jsonl 提升效果;
  • 增加 DPO / PPO / GRPO 等强化学习阶段;
  • 部署 WebUI 或 OpenAI API 兼容服务;
  • 将模型转换为 Transformers / llama.cpp / ollama 等格式;
  • 使用自定义数据做领域微调。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐