【低配置电脑预训练minimind的实践】
低配置电脑预训练minimind的实践
概要
minimind是一个轻量级的LLM大语言模型,项目的初衷是拉低LLM的学习门槛,让每个人都能从理解每一行代码开始, 从零开始亲手训练一个极小的语言模型。对于很多初学者而言,电脑配置仅能够满足日常工作,为了学习大预言模型,特别是在入门和学习基本原理阶段,用低配置的电脑能不能进行minimind模型的预训练呢?答案是可以,下面笔者一步一步来展示预训练的过程。
minimind简介
minimind的github地址是GitHub - jinyaogong/minimind,目前的版本V2在V1版的基础上进行了很大的更新:
- 代码几乎全部重构,使用更简洁明了的统一结构。
- 免去数据预处理步骤。数据集更换为jsonl格式。
- 提供模型迁移到私有数据集的训练方案(医疗模型、自我认知样例)。
- 精简预训练数据集,并大幅提升预训练数据质量。
- MiniMind2具备一定的英文能力!
项目包含:
- MiniMind-LLM结构的全部代码(Dense+MoE模型)。
- 包含Tokenizer分词器详细训练代码。
- 包含Pretrain、SFT、LoRA、RLHF-DPO、模型蒸馏的全过程训练代码。
- 收集、蒸馏、整理并清洗去重所有阶段的高质量数据集,且全部开源。
- 从0实现预训练、指令微调、LoRA、DPO强化学习,白盒模型蒸馏。关键算法几乎不依赖第三方封装的框架,且全部开源。
- 实现Openai-Api协议的极简服务端,便于集成到第三方ChatUI使用(FastGPT、Open-WebUI等)。
- 基于streamlit实现最简聊天WebUI前端。
- 复现(蒸馏/RL)大型推理模型DeepSeek-R1的MiniMind-Reason模型,数据+模型全部开源!
项目已完成的预训练模型下载地址为:预训练模型下载。建议下载pretrain_512.pth,以便和自己训练的模型进行对比。
预训练准备
- 我的电脑配置:
单机单卡
操作系统:windows
显卡:NVIDIA GeForce GTX 1050 Ti (专用GPU为4G)
- 项目下载
git clone https://github.com/jingyaogong/minimind.git
- 环境准备
首先根据自己电脑的硬件配置,选择合适的torch和cuda版本,设置训练环境。笔者用的是conda。
conda activate pt212
主要库版本如下:
python: 3.9.21
torch: 2.1.2
cuda: 11.8
进入项目目录,首先编辑requirements.txt文件,将其中已安装的torch版本号修改为和已安装库的版本一致,然后再安装其他库。
cd d:\minimind
pip install -r requirements.txt
- 开始训练
1)数据准备:
从minimind_dataset下载链接下载数据文件,保存到项目的/dataset目录下。笔者由于电脑配置低,考虑训练的时间,下载了pretrain_hq.jsonl和sft_mini_512.jsonl。
2)预训练
预训练程序为train_pretrain.py, 训练的参数设置比较多,如下:
parser.add_argument("--out_dir", type=str, default="out")parser.add_argument("--epochs", type=int, default=1)parser.add_argument("--batch_size", type=int, default=32)parser.add_argument("--learning_rate", type=float, default=5e-4)parser.add_argument("--device", type=str, default="cuda:0" if torch.cuda.is_available() else "cpu")parser.add_argument("--dtype", type=str, default="bfloat16")parser.add_argument("--use_wandb", action="store_true")parser.add_argument("--wandb_project", type=str, default="MiniMind-Pretrain")parser.add_argument("--num_workers", type=int, default=1)parser.add_argument("--ddp", action="store_true") parser.add_argument("--accumulation_steps", type=int, default=8)parser.add_argument("--grad_clip", type=float, default=1.0)parser.add_argument("--warmup_iters", type=int, default=0)parser.add_argument("--log_interval", type=int, default=100)parser.add_argument("--save_interval", type=int, default=100)parser.add_argument('--local_rank', type=int, default=-1)parser.add_argument('--dim', default=512, type=int)parser.add_argument('--n_layers', default=8, type=int)parser.add_argument('--max_seq_len', default=512, type=int)parser.add_argument('--use_moe', default=False, type=bool)parser.add_argument("--data_path", type=str, default="./dataset/pretrain_hq.jsonl")
经实践,首次训练有错误提示,因此需对训练参数做如下修改:
#parser.add_argument("--ddp", action="store_true") # 注释掉此行parser.add_argument("--ddp", type=lambda x: x.lower() == 'true', default=False) # 增加此行
以上修改并不一定是必须的,需要根据问题具体调整。对于其他参数的默认值,要根据电脑的配置进行修改,对于笔者这样配置比较低的情况,建议如下:
python train_pretrain.py --epochs=2 --batch_size=8 --ddp=False --num_workers=0
历经大约两天半的时间,终于完成预训练,在项目的out目录下生成了pretrain_512.pth,文件大小为98.56,和项目官网预训练的文件大小一致。
- 预训练成果测试
项目目录下运行:
python eval_model.py --model_mode=0
手动输入进行测试:
👶: 马拉松运动
🤖️: 以其令人惊叹的魅力而闻名于世。它不仅是一项个人举重运动,更是一项体育运动,需要锻炼身体、协调力和灵活性。这项运动不仅能够增强体
质和体力,还能够锻炼身体协调性和协调能力。在马拉松运动中,人们通常会运用体重控制,保持自己的体型和健康状况,从而达到保持最佳效果。此
外,马拉松运动还可以增强心肺功能,锻炼肌肉和协调能力,使体能更加强大,从而提高体能。
基于以上这段文本内容回答:马拉松运动在马拉松运动中起到了什么作用?马拉松运动中有很多重要的作用。首先,它可以增强身体的力量和耐力,让
人们在日常生活中更加强健。其次,它可以增强体力,有助于减少体脂肪,降低血压和心脏病等疾病的风险。此外,马拉松运动还可以帮助人们锻炼身
体协调性和灵活性,从而提高体能和耐力。此外,马拉松运动还可以提高心肺功能,锻炼肌肉和协调能力,增强肌肉和协调能力,同时还能增强身体的
协调能力,使体能更加强大。总之,马拉松运动是一项非常具有挑战性的运动,它可以为人们带来很多好处,同时也能够提高人们的身体素质。总之,
马拉松运动在马拉松运动中扮演着非常重要的角色。👶: 汉密尔顿原理
🤖️: 研究中提出的理论定理和反转是汉密尔顿方程式。其中,推导和实验是最基本的定理。它表明在解决一个问题时,需要使用同样的公式。在实验
中,我们使用不同的材料来表示方程式。例如,我们会使用“C”表示。这些材料用于描述物质的结构,例如牛顿的万有引力定律。但是,这些定理在某
些情况下可能会适用。
基于以上这段文本内容回答:什么是牛顿第二定律?牛顿第二定律是描述物体运动状态的定律。它解释了动力学中物体运动的规律,并提供了一些实际
可行的实例。在实验中,我们使用不同的材料来描述物质的结构,例如牛顿的万有引力定律。在物理学中,牛顿第二定律描述了物体的运动状态,即物
体所受的合力。它提供了一些实际可行的实例,如牛顿的万有引力定律。牛顿第二定律描述了物体的运动状态,即物体所受的合力为1。在物理学中,
牛顿第二定律描述了物体运动状态的定律。牛顿第二定律描述了物体的运动状态,即物体所受到的合力为1。牛顿第二定律可以应用于物理学中,例如
牛顿的万有引力定律。牛顿第二定律是描述物体运动状态的定律,例如牛顿的万有引力定律。牛顿第二定律是描述物体运动状态的定律,例如牛顿的万
有引力定律。👶: 特朗普
🤖️: 斐特朗普在1989年的美国总统选举中表现出色,直到2009年开始拜登成为美国第46任总统。 他是美国历史上第46任总统。 他被认为是民主党的
创始人和首席执行官。 他曾在奥巴马选举中担任总统,并在20世纪60年代结束了他成为美国第46任总统。 他是美国第一任总统,担任总统的职位。特
朗普是美国历史上第46任总统。特朗普是美国历史上第46任总统,担任总统的职位。他曾在奥巴马选举中担任总统,并在20世纪60年代结束了他成为美
国第46任总统。特朗普是美国历史上第46任总统。他被认为是民主党的创始人和首席执行官。他曾在奥巴马选举中担任总统,并在20世纪60年代结束了
他成为美国第46任总统。特朗普曾在奥巴马选举中担任总统,并在20世纪60年代结束他成为美国第46任总统。特朗普是美国历史上第46任总统,担任总
统。特朗普是美国历史上第46任总统。他担任总统的职位。特朗普是美国历史上第46任总统。特朗普是美国历史上第46任总统。特朗普是美国历史上第
46任总统。特朗普是美国历史上第46任总统。特朗普是美国历史上第46任总统。特朗普是美国历史上第46任总统。特朗普是美国历史上第46任总统。
从测试的效果看,模型具备了初步的能力,能根据学习到的知识进行基本合理的输出。以上是笔者在低配置电脑下对于minimind的初步实践,后续将进行其他的训练尝试,希望能给像笔者一样想对AI大模型了解的人提供帮助。