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

大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化

写在前面

GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,包括数据收集、预处理、模型设计、训练策略、优化技巧以及后训练阶段(微调、对齐)等环节。

我们将先对 GPT 的训练方案进行一个简述,接着我们将借助 MiniMind 的项目,来完成我们自己的 GPT 的训练。

训练阶段概览

GPT 的训练过程大致分为以下几个阶段:

  • 数据准备(Data Preparation)
  • 预训练(Pretraining)
  • 指令微调(Instruction Tuning)
  • 对齐阶段(Alignment via RLHF 或 DPO)
  • 推理部署(Inference & Serving)

在这里插入图片描述

准备数据

这里我们选择 MiniMind2:104M参数量的,0.1B。
使用数据集如下:
● pretrain_hq
● sft_512
● sft_2048
● dpo

我们对数据进行下载

wget -c 'https://huggingface.co/datasets/jingyaogong/minimind_dataset/resolve/main/dpo.jsonl?download=true'
wget -c 'https://huggingface.co/datasets/jingyaogong/minimind_dataset/resolve/main/sft_2048.jsonl?download=true'
wget -c 'https://huggingface.co/datasets/jingyaogong/minimind_dataset/resolve/main/sft_512.jsonl?download=true'

对应的内容如下:
在这里插入图片描述
下载完毕后如下所示:
在这里插入图片描述

预训练

torchrun --nproc_per_node 2 train_pretrain.py --n_layers 16 --dim 768 --use_wandb

继续双卡训练:
在这里插入图片描述
可以看到 LLM总参数量:104.031 百万,最终为 0.1B 模型。

开始预训练,两张卡,各15GB显存。
在这里插入图片描述

sft_512

训练模型

torchrun --nproc_per_node 2 train_full_sft.py --data_path "./dataset/sft_512.jsonl" --n_layers 16 --dim 768 --use_wandb

开始训练:
在这里插入图片描述
占用情况如下所示:
在这里插入图片描述

测试模型

python eval_model.py --model_mode 1 --n_layers 16 --dim 768

对应的内容如下所示:
在这里插入图片描述

sft_1024

训练模型

训练之前,我们需要将之前的 pretrained 模型备份一下(防止以后弄错了),然后把刚才训练好的模型修改为 pretrained 的名字。
简言之:在刚才sft_512上训练出来的模型上进行sft_1024的训练

mv full_sft_768.pth pretrain_768.pth

当前模型的列表如下所示:
在这里插入图片描述
此时的 pretrain_768.pth 模型就是刚才在 sft_512 上训练出来的

torchrun --nproc_per_node 2 train_full_sft.py --data_path="./dataset/sft_1024.jsonl" --n_layers 16 --dim 768 --use_wandb

我们继续进行训练,这次任务估计要更久了,需要耐心的等待。
在这里插入图片描述

测试模型

python eval_model.py --model_mode 1 --n_layers 16 --dim 768

测试的执行结果如下所示:
在这里插入图片描述

dpo

在大模型训练中,“DPO” 通常指的是 Direct Preference Optimization(直接偏好优化),这是一种新兴的 对齐技术,用于更高效、直接地将大语言模型(LLM)对齐为更符合人类偏好的行为输出方式。它是近年来在 人类反馈强化学习(RLHF) 之后提出的一种新思路。

DPO 是不使用强化学习(如PPO)的方法,直接用“人类偏好对比数据”来优化语言模型的输出行为,使它更贴合用户期望。

大模型对齐,主要解决两个问题:

  • 输出内容可控、有用、无害;
  • 更符合人类用户的喜好或选择。

RLHF 是当前最流行的对齐技术,如 OpenAI 的 InstructGPT 和 ChatGPT 都用了这一方式。但 RLHF 存在如下问题:

  • 实现复杂(需要 reward model、策略优化器等);
  • 训练不稳定;
  • PPO 的超参数难调;
  • 训练代价大。

DPO 的目标:

  • 用一种更简单的方式,实现类似甚至超过 RLHF 的对齐效果。

它解决了什么?

  • 不用再引入复杂的 reward model + PPO;
  • 直接在原始语言模型架构基础上,做最小改动即可实现。

为什么 DPO 有用?

  • ✅ 不需要 reward model;
  • ✅ 不使用强化学习;
  • ✅ 易于实现、可以用常规优化器训练(如 Adam);
  • ✅ 效果与 PPO 相当或更优;
  • ✅ 可直接用于 decoder-only 架构(如 GPT);

训练模型

我们训练完了 sft_1024 的数据,接着进行下面的训练即可:

torchrun --nproc_per_node 2 train_dpo.py --n_layers 16 --dim 768 ----batch_size 4 --use_wandb

这里我们需要控制一下 batch_size 的大小,不然会OOM。
在这里插入图片描述
可以看到调整了 batch_size(代码里默认是8),此时调整为4,GPU也基本是要吃满的状态了:
在这里插入图片描述

http://www.xdnf.cn/news/497197.html

相关文章:

  • 【诊所电子处方专用软件】佳易王个体诊所门诊电子处方开单管理系统:零售药店电子处方服务系统#操作简单#诊所软件教程#药房划价
  • Java 快速转 C# 教程
  • 30、WebAssembly:古代魔法——React 19 性能优化
  • 手撕四种常用设计模式(工厂,策略,代理,单例)
  • 设计模式Java
  • IDEA反斜杠路径不会显示JUnit运行的工作目录配置问题
  • 信奥赛-刷题笔记-栈篇-T2-P1981表达式求值0517
  • 在Maven中替换文件内容的插件和方法
  • 防范Java应用中的恶意文件上传:确保服务器的安全性
  • 【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中
  • 结构化思考力_第一章_明确理念打基础
  • 西门子 Teamcenter13 Eclipse RCP 开发 1.2 工具栏 开关按钮
  • WPS JS宏实现去掉文档中的所有空行
  • 深入解析Spring Boot与Redis集成:高效缓存实践
  • Ansible模块——设置软件仓库和安装软件包
  • Python海龟绘图(Turtle Graphics)核心函数和关键要点
  • 【Linux网络】内网穿透
  • 当语言模型学会犯错和改正:搜索流(SoS)方法解析
  • 兰亭妙微:用系统化思维重构智能座舱 UI 体验
  • 【Redis】零碎知识点(易忘 / 易错)总结回顾
  • linux标准库头文件解析
  • Go语言实现链式调用
  • vscode用python开发maya联动调试设置
  • 游戏引擎学习第288天:继续完成Brains
  • 98. 验证二叉搜索树
  • 信息系统项目管理师高级-软考高项案例分析备考指南(2023年案例分析)
  • 神经网络与深度学习第六章--循环神经网络(理论)
  • WebXR教学 07 项目5 贪吃蛇小游戏
  • 亲测有效!OGG 创建抽取进程报错 OGG-08241,如何解决?
  • 简单神经网络(ANN)实现:从零开始构建第一个模型