4.2 如何训练⼀个 LLM

⼀般⽽⾔,训练⼀个完整的 LLM 需要经过图1中的三个阶段——Pretrain、SFT 和 RLHF。

4.2.1 Pretrain

预训练任务与架构 

  • 任务类型:采用因果语言模型(CLM),通过预测下一个 token 进行训练,与传统预训练模型(如 BERT)的 MLM 任务不同,更侧重生成能力。
  • 架构选择:主流 LLM(如 GPT-3、LLaMA)采用 Decoder-Only 架构,相比传统模型(如 BERT 的 Encoder 架构)更适合长文本生成。

参数量与数据规模对比 

  • 核心差异:LLM 参数量比传统模型大 1-3 个数量级,训练数据需满足 Scaling Law(token 数约为参数的 1.7-20 倍),如 GPT-3 需 300 亿 - 3.5 万亿 token。

分布式训练框架与技术

  • 数据并行:多 GPU 同时处理不同批次数据,同步梯度更新,适用于模型参数可容纳单卡的场景。

  • 模型并行:将模型分层或分模块部署到不同 GPU,解决百亿级参数的内存瓶颈(如 GPT-3 需拆分为 96 层 Decoder)。

主流的分布式训练框架包括 Deepspeed、Megatron-LM、ColossalAI 等,其中,Deepspeed 使⽤⾯最⼴。 

DeepSpeed:采用 ZeRO 优化显存,分三级策略(ZeRO-1 至 ZeRO-3)逐步分⽚模型状态参数,减少单卡显存占用(如 ZeRO-3 可使单卡仅存储 1/n 模型参数)。

ZeRO 将模型训练阶段每张卡被占⽤的显存分为两类:

  • 模型状态(Model States),包括模型参数、模型梯度和优化器 Adam 的状态参数。假设模型参数量为1M,⼀般来说,在混合精度训练的情况下,该部分需要 16M 的空间进⾏存储,其中 Adam 状态参数会占据12M 的存储空间。
  • 剩余状态(Residual States),除了模型状态之外的显存占⽤,包括激活值、各种缓存和显存碎⽚。

针对上述显存占⽤,ZeRO 提出了三种不断递进的优化策略:

  • 1. ZeRO-1,对模型状态中的 Adam 状态参数进⾏分⽚,即每张卡只存储 的 Adam 状态参数,其他参数仍然保持每张卡⼀份。
  • 2. ZeRO-2,继续对模型梯度进⾏分⽚,每张卡只存储 的模型梯度和 Adam 状态参数,仅模型参数保持每张卡⼀份。
  • 3. ZeRO-3,将模型参数也进⾏分⽚,每张卡只存储 的模型梯度、模型参数和 Adam 状态参数。

其他框架:Megatron-LM(张量并行)、ColossalAI(3D 并行),结合 CPU-offload 技术进一步释放 GPU 内存。

预训练数据挑战与处理流程

主流开源数据:CommonCrawl(67%)、C4(15%)、Github(4.5%)等,LLM 常混合私有高质量数据(如学术论文、书籍)。

中文数据缺口:高质量中文开源数据集(如 SkyPile、yayi2)规模远小于英文(如 RedPajama-1T),且闭源模型(如 ChatGLM)未公开预训练数据。

预训练数据处理⼀般包括以下流程:

  1. 文档准备:爬取网页后过滤 URL、提取纯文本、筛选语种(如保留中文 / 英文)。
  2. 语料过滤:通过模型分类器(如 BERT 筛选高质量文本)或启发式规则(如去除乱码、广告)剔除低质内容。
  3. 语料去重:基于 hash 算法或子串匹配删除重复文档,避免模型过拟合(如 SlimPajama-627B 通过去重实现比 RedPajama-1T 更好效果)。

4.2.2 SFT 

SFT——Supervisor Finetune,有监督微调。赋予预训练 LLM “通用指令遵循能力”,解决其 “死板背书” 问题(仅能预测下一个 token,无法理解指令含义)。

与传统微调的区别:传统 PLM 需针对单一任务(如文本分类)单独微调,而 LLM 的 SFT 通过 “指令微调” 实现跨任务泛化,例如用同一模型处理翻译、问答、生成等多类指令。

指令数据的构建需覆盖多任务类型(如文本生成、问答、聊天),开源 LLM 的 SFT 数据量通常在数 B token 级别,单任务需 500~1000 条样本。

配比例子:OpenAI 的 InstructGPT 数据中,文本生成占 45.6%、开放域问答占 12.4%、聊天占 8.4%,需平衡不同任务类型的比例以提升泛化性。

数据获取难点

  • 人工标注成本高:高质量指令 - 响应对依赖专业标注(如 ChatGPT 的成功依赖人工数据),开源数据稀缺。
  • 替代方案:通过 LLM 生成指令数据(如 Alpaca 基于 ChatGPT 生成样本),降低标注成本但需注意数据质量。

指令数据格式通常包含三个键(以翻译任务为例):

{"instruction": "将下列文本翻译成英文","input": "今天天气真好","output": "Today is a nice day!"
}

格式优化

  • LLaMA 格式:使用特定分隔符(如### Instruction:\n)包裹指令,确保模型识别输入模式。
  • 多轮对话构造
    • 不合理方式:仅拟合最后一轮回复(丢失中间信息)或拆分为单轮样本(重复计算)。
    • 合理方式:将多轮对话拼接为连续文本(如prompt1+completion1+prompt2+completion2+...),模型按顺序预测每轮输出,例如:
输入:用户问“你好”→模型回“您好”→用户问“Datawhale是什么”  
输出:模型需生成“您好”+“Datawhale是开源组织”(按CLM预测下一个token)

多轮对话不依赖预训练,完全通过 SFT 阶段的对话格式数据训练获得。

技术要点:利用 LLM 的自回归特性(单向注意力),将历史对话作为输入上下文,模型通过预测后续 token 实现对话连贯性。例如:

  • 无多轮能力模型:每次对话独立,不记忆历史(如重复询问时仍回答 “不知道”)。
  • 有多轮能力模型:结合历史对话生成回复(如记住用户曾介绍过 Datawhale)。

LLM 的知识储备(如语言理解、世界知识)源于预训练语料,SFT 仅调整其 “应用知识的方式”。

SFT 的激发作用:通过指令微调,将预训练获得的通用能力转化为具体任务执行能力,例如:

  • 预训练阶段:学会 “翻译语法规则”;
  • SFT 阶段:通过指令数据学会 “按用户要求执行翻译任务”。

4.2.3 RLHF

RLHF,全称是 Reinforcement Learning from Human Feedback,即⼈类反馈强化学习,是利⽤强化学习来训练LLM 的关键步骤。作为 LLM 训练的对齐阶段,解决 SFT 后模型仍可能存在的价值观偏差,使输出符合人类安全、有用、无害的标准(如拒绝有害指令)。

与 SFT 的区别

  • SFT:让模型学会 “遵循指令”(如翻译、问答);
  • RLHF:让模型学会 “按人类偏好输出”(如拒绝回答违法问题,优先正确信息)。
RLHF 的两阶段实现流程

(1)奖励模型(RM)训练

  • 模型功能:拟合人类偏好,为 LLM 的回复打分,本质是文本分类模型(LLM 架构 + 分类层)。
  • 训练数据
    • 格式:{prompt: 问题, chosen: 优质回复, rejected: 劣质回复},如:
{"prompt": "偷东西选什么时间?","chosen": "这是违法行为,不能建议","rejected": "分析夜间盗窃优势..."
}

核心逻辑:通过对比chosenrejected的优劣,训练 RM 最大化两者的奖励分数差异。

RM 规模通常小于 LLM(如 OpenAI 用 6B RM 优化 175B LLM);

避免直接使用标量奖励(易受标注者主观影响),采用排序对比训练。

(2)PPO 算法优化

  • 算法框架
    • 四模型结构
      • Actor Model(待更新)、Ref Model(固定参数,防止能力退化);
      • Reward Model(打分)、Critic Model(计算累积奖励)。
    • 训练流程
      1. Actor 与 Ref 对同一 prompt 生成回复;
      2. 计算两者 KL 散度(约束更新幅度);
      3. RM 对 Actor 回复打分,Critic 计算累积奖励;
      4. 结合 KL 散度和奖励值构建损失函数,更新 Actor 和 Critic 参数。
  • 奖励函数

奖励 = γ₁×KL散度 + γ₂×Reward Model打分 + γ₃×Critic累积奖励

(γ 为权重参数,平衡模型稳定性与偏好对齐)。

RLHF 的挑战与替代方案
  • 资源消耗
    • 显存占用高(如 7B 模型需 4 张 80G A100),训练成本远超 SFT。
  • 技术替代
    • DPO(直接偏好优化)
      • 核心思路:将 RLHF 转化为监督学习,无需训练 RM 和复杂强化学习流程;
      • 优势:仅需 2 个 LLM,训练门槛低,效果可平替 PPO(通过数学推导证明偏好学习可行性)。
RLHF 的价值与意义
  • 对齐人类价值观:通过拒绝有害内容、纠正错误信息,提升 LLM 的实用性和安全性(如医疗、金融场景)。
  • 避免能力退化:Ref Model 和 KL 散度约束确保模型在对齐偏好时不丢失预训练能力。
RLHF 与 LLM 能力的关系
  • 涌现能力的进一步激发:RLHF 不增加模型知识,而是通过偏好筛选强化 “有用能力”(如优先正确推理,而非流畅生成错误内容)。
  • 应用落地的关键一步:使 LLM 从 “技术原型” 变为 “可用工具”(如 ChatGPT 的高热度源于 RLHF 后的用户体验优化)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87869.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt中的QObject::moveToThread方法详解

一、QObject::moveToThread方法QObject::moveToThread()是Qt框架中一个非常重要的功能,它允许改变QObject及其子对象的线程关联性。这个功能在多线程编程中特别有用,可以将耗时操作移到工作线程执行,避免阻塞主线程/GUI线程。基本用法void QO…

【9】用户接入与认证配置

本文旨在帮助网络管理员在 SD-WAN 环境中实现安全、稳定的用户接入与认证策略,涵盖本地/远程认证、权限管理、密码策略、SSH、会话控制等关键配置要素。 1.密码策略与账户安全 从 IOS XE SD-WAN 17.3.1 起,Cisco 引入密码强化功能,用于统一用户密码的复杂度与有效性要求。密…

第十六节:第三部分:多线程:线程安全问题、取钱问题的模拟

线程安全问题介绍:取钱的线程安全问题 取钱的线程安全问题 取钱案例需求分析 线程安全问题出现的原因 代码:模拟线程安全问题(上述取钱案例) Account类(账户类) package com.itheima.day3_thread_safe;pu…

APE:大语言模型具有人类水平的提示工程能力

摘要 通过以自然语言指令作为条件输入,大型语言模型(LLMs)展现出令人印象深刻的通用计算能力。然而,任务表现严重依赖于用于引导模型的提示(prompt)质量,而最有效的提示通常是由人类手工设计的…

X86 CPU 工作模式

1.概述 1.实模式 实模式又称实地址模式,实,即真实,这个真实分为两个方面,一个方面是运行真实的指令,对指令的动作不作区分,直接执行指令的真实功能,另一方面是发往内存的地址是真实的&#xff…

Java设计模式之行为型模式(策略模式)介绍与说明

一、策略模式简介 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式让算法独立于使用它的客…

【BIOS+MBR 微内核手写实现】

本文基于BIOS+MBR的架构,从四部分讲解微内核是如何实现的: 1)搭建微内核编译调试环境 2)梳理微内核的代码结构:伪指令讲解 3)手写实现微内核框架,输出简单的字符串 4)讲解微内核启动阶段的具体运行过程 先完成内核工程创建,如下图 我们这里使用nasm风格的汇编编写,…

从C/C++迁移到Go:内存管理思维转变

一、引言 在当今高速发展的软件开发世界中,语言迁移已成为技术进化的常态。作为一名曾经的C/C开发者,我经历了向Go语言转变的全过程,其中最大的认知挑战来自内存管理模式的根本性差异。 我记得第一次接触Go项目时的困惑:没有析构函…

正确设置 FreeRTOS 与 STM32 的中断优先级

在裸机开发(非 RTOS)时,大多数 STM32 外设的中断优先级通常不需要手动配置,原因如下: ✅ 裸机开发中默认中断优先级行为 特点说明默认中断优先级为 0如果你不设置,STM32 HAL 默认设置所有外设中断为 0&…

EasyExcel之SheetWriteHandler:解锁Excel写入的高阶玩法

引言在 EasyExcel 强大的功能体系中,SheetWriteHandler 接口是一个关键的组成部分。它允许开发者在写入 Excel 的 Sheet 时进行自定义处理,为实现各种复杂的业务需求提供了强大的支持。通过深入了解和运用 SheetWriteHandler 接口,我们能够更…

Python单例模式魔法方法or属性

1.单例模式概念定义:单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只能有一个实例,并提供一个全局访问点来获取该实例。这种模式在需要控制资源访问、配置管理或协调系统操作时特别有用。核心特点:私有构造函数:防止外部通过…

【Kubernetes系列】Kubernetes 资源请求(Requests)

博客目录 引言一、资源请求的基本概念1.1 什么是资源请求1.2 请求与限制的区别 二、CPU 请求的深入解析2.1 CPU 请求的单位与含义2.2 CPU 请求的调度影响2.3 CPU 请求与限制的关系 三、内存请求的深入解析3.1 内存请求的单位与含义3.2 内存请求的调度影响3.3 内存请求的特殊性 …

大型语言模型中的自动化思维链提示

摘要 大型语言模型(LLMs)能够通过生成中间推理步骤来执行复杂的推理任务。为提示演示提供这些步骤的过程被称为思维链(CoT)提示。CoT提示有两种主要范式。一种使用简单的提示语,如“让我们一步一步思考”,…

Private Set Generation with Discriminative Information(2211.04446v1)

1. 遇到什么问题,解决了什么遇到的问题现有差分隐私生成模型受限于高维数据分布建模的复杂性,合成样本实用性不足。深度生成模型训练依赖大量数据,加入隐私约束后更难优化,且不保证下游任务(如分类)的最优解…

C++编程语言入门指南

一、C语言概述 C是由丹麦计算机科学家Bjarne Stroustrup于1979年在贝尔实验室开发的一种静态类型、编译式、通用型编程语言。最初被称为"C with Classes"(带类的C),1983年更名为C。它既具有高级语言的抽象特性,又保留了底层硬件操作能力&…

ZED相机与Foxglove集成:加速机器人视觉调试效率的实用方案

随着机器人技术的发展,实时视觉数据流的高效传输和可视化成为提升系统性能的重要因素。通过ZED相机(包括ZED 2i和ZED X)与Foxglove Studio平台的结合,开发者能够轻松访问高质量的2D图像、深度图和点云数据,从而显著提高…

目标检测新纪元:DETR到Mamba实战解析

🚀【实战分享】目标检测的“后 DEⱯ”时代:DETR/DINO/RT-DETR及新型骨干网络探索(含示例代码) 目标检测从 YOLO、Faster R-CNN 到 Transformer 结构的 DETR,再到 DINO、RT-DETR,近两年出现了许多新趋势&am…

【IOS】XCode创建firstapp并运行(成为IOS开发者)

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍XCode创建firstapp并运行 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…

class类和style内联样式的绑定 + 事件处理 + uniapp创建自定义页面模板

目录 一.class类的绑定 1.静态编写 2.动态编写 二.style内联样式的绑定 三.事件处理 1.案例1 2.案例2 四.uniapp创建自定义页面模板 1.为什么要这么做? 2.步骤 ①打开新建页面的界面 ②在弹出的目录下,新建模板文件 ③用HBuilderX打开该模板…

android 卡顿和丢帧区别

Android 卡顿(Jank)与丢帧(Frame Drop)的核心区别在于问题本质与用户感知,以下是分层解析: ️ 一、本质差异 维度卡顿(Jank)丢帧(Frame Drop)定义用户可感知…