当前位置: 首页 > news >正文

【低配置电脑预训练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,以便和自己训练的模型进行对比。

预训练准备

  1. 我的电脑配置:

单机单卡
操作系统:windows
显卡:NVIDIA GeForce GTX 1050 Ti (专用GPU为4G)

  1. 项目下载
git clone https://github.com/jingyaogong/minimind.git
  1. 环境准备
    首先根据自己电脑的硬件配置,选择合适的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. 开始训练
    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,和项目官网预训练的文件大小一致。

  1. 预训练成果测试
    项目目录下运行:
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大模型了解的人提供帮助。

相关文章:

  • 关于 xpath 查找 XML 元素的一点总结
  • go.mod介绍
  • ‌RISC-V低功耗MCU动态时钟门控技术详解
  • CSS基础
  • 第二章、安全认证
  • Nginx 二进制部署与 Docker 部署深度对比
  • 学习海康VisionMaster之顶点检测
  • 03_JavaScript
  • 云网络与SASE架构:构建下一代企业安全网络
  • 悟空统计在SEO优化中的核心作用:外链质量评估
  • 人脸识别考勤系统实现教程:基于Face-Recognition、OpenCV与SQLite
  • Python-基础语法部分的20道题
  • 大文件上传Demo及面试要点
  • 目标检测篇---faster R-CNN
  • Redis中的hash数据结构设置过期时间的坑!!!
  • [Windows] 实用多功能工具箱 灵溪工具箱0.1.1
  • 23种设计模式-行为型模式之模版方法模式(Java版本)
  • 云原生之认识DDD
  • 100.HTB-Meow
  • BBRv2,v3 吞吐为什么不如 BBRv1
  • 预热苏杯,“谁羽争锋”全国新闻界羽毛球团体邀请赛厦门开赛
  • 华夏银行青岛分行另类处置不良债权,德州近百亩土地被神奇操作抵押贷款
  • 夜读丨修车与“不凑合”
  • 漫游者秦龙,一生为经典画插图
  • 冒充县领导亲戚十年骗取38箱香菇木耳,河南一男子被判拘役
  • 《国语汇校集注》:以1900余条注解,揭示隐微,提供思考