部署DeepSeek模型,进群交流最in玩法!
立即加群
发布
社区首页 >专栏 >Minimind - 人人都能训练的“小”模型

Minimind - 人人都能训练的“小”模型

原创
作者头像
硬学AI工坊
修改2025-03-03 19:21:39
修改2025-03-03 19:21:39
2240
举报
文章被收录于专栏:AI大模型

Minimind 是一个“小”语言模型,总共只有 2500 万个参数,最小版本体积只有 GPT-3 的七千分之一,作者称只需要3块钱+2小时就可以完成训练,项目地址为:https://github.com/jingyaogong/minimind

为防止误解,“2小时” 基于NVIDIA 3090硬件设备(单卡)测试,“3块钱” 指GPU服务器租用成本,具体规格详情见下文。

Minimind 完全从0开始,对大语言模型实现了全阶段开源复现,是入门 LLM 的绝佳教程。

本文将根据项目文档完成两阶段训练(预训练和有监督微调),初步感受一下“大”模型的训练过程:

环境准备

Minimind 作者的软硬件配置(仅供参考):

  • CPU: Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz
  • RAM: 128 GB
  • GPU: NVIDIA GeForce RTX 3090(24GB) * 8
  • Ubuntu 20.04
  • CUDA 12.2
  • Python 3.10.16
  • requirements.txt

我的软硬件配置(我的个人电脑GPU只有500M显存,所以使用了云主机):

  • ModelScope 免费提供的阿里云PAI-DSW实例(36个小时,完成本文训练共花费4小时左右)
  • 8核CPU + 32GB内存
  • NIVDIA A10,24G显存
  • Ubuntu 22.04
  • CUDA 12.1
  • Python 3.10.16(Miniconda虚拟环境)
ModelScope提供的免费GPU实例
ModelScope提供的免费GPU实例

获取代码

代码语言:bash
复制
# 从 github 下载代码并进入项目目录
git clone https://github.com/jingyaogong/minimind.git
cd minimind

# 创建虚拟环境并激活
conda create --name minimind python=3.10.16
conda init
conda activate minimind

# 安装需要的依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simp

下载数据

代码语言:bash
复制
# 还是在 minimind 目录
pip install modelscope

modelscope download --dataset gongjy/minimind_dataset --local_dir ./dataset

总共下载了 20 多 G 的数据,都是 jsonl 格式:

预训练

预训练需要执行一个 python 文件:

代码语言:bash
复制
python train_pretrain.py

预训练过程其实是有一些参数可以调整的,但为了快速完成训练,我们先全部使用默认参数。

预训练所使用的数据:

在我的这个云主机里,训练一个 epoch大概需要两个小时:

预训练
预训练

有监督微调

有监督微调也只需要执行一个 python 文件:

代码语言:bash
复制
python train_full_sft.py

微调使用的数据格式和预训练不同,对对话的双方做了区分:

从肉眼上看,微调的速度比预训练略快:

有监督微调
有监督微调

模型评估

经过上面的训练,我们得到了两个模型,一个是预训练模型,一个是微调模型,都在 out 目录下:

可以看到两个模型的大小一模一样,说明两个模型的结构应该是相同的。

下面我们使用 python eval_model.py 来比较两个模型的表现,eval_model.py 这个文件接收两个参数:

  • --load 参数,用来指示加载我们自己训练的模型(在 out 目录),还是加载从Huggingface下载下来的模型(在 MiniMind2 目录);
  • model_mode 参数,用来指示加载哪个阶段的模型,0表示预训练模型,1表示微调模型,2表示RLHF模型等;

首先是项目自带的评测:

预训练模型-自动评测
预训练模型-自动评测
微调模型-自动评测
微调模型-自动评测

可以看出,虽然都只训练了一个epoch,微调后的模型比预训练模型明显强了很多,即使存在信息不准确或者错误,但是对话的语气和意图是很明显的,而预训练模型就差了很多,而且看起来似乎有时没办法终止对话。

再来看看人工评测,我问了两个模型三个相同问题:

  • 豆腐脑甜的好吃还是咸的好吃?
  • 大模型是什么东西?
  • 邓紫棋哪首歌好听?

下面是它们的回答:

预训练模型-人工评测
预训练模型-人工评测
微调模型-人工评测
微调模型-人工评测

和自动评测的结果差不多,微调模型“知道”自己在对话,而预训练模型的回答非常发散。

项目也提供了 Web 页面和模型交互的方法,通过 streamlit 实现:

代码语言:bash
复制
cd scripts
streamlit run web_demo.py

对话界面长这样:

后续

以上就是我的 Minimind 初体验,由于时间和成本问题,预训练模型和微调模型都只训练了一个 epoch,模型表现不是很给力,但是这不影响我们了解大模型的训练过程,后续我会进一步深入研究 Minimind 项目,包括复现其它的训练阶段,研究训练代码,以及过程中发现的其他问题。如果你也对此感兴趣,或者有学习大模型的建议,欢迎指点和交流!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
  • 获取代码
  • 下载数据
  • 预训练
  • 有监督微调
  • 模型评估
  • 后续
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档