首页 > 其他分享 >智慧之锤|如何通过有监督微调锻造大模型

智慧之锤|如何通过有监督微调锻造大模型

时间:2024-12-11 10:25:08浏览次数:4  
标签:训练 之锤 模型 微调 RLHF 锻造 参数 量化

作者:京东物流 李雪婷

本文为《大规模语言模型-从理论到实践》 第五章有监督微调的学习笔记,在介绍基本内容的同时会补充一些扩展知识和案例来帮助大家更好地理解该章。

一、前言

大模型调整的历程经历了显著的演变,从最初的“预训练-微调”范式开始,模型首先在大规模无监督数据上进行预训练,然后在特定任务上通过有监督微调来优化性能。随着计算能力和数据集的扩展,模型规模迅速扩大,从数亿参数增长到数千亿参数,推动了如GPT-3等模型的出现,这些模型展示了在多任务环境中的优越性能。这种规模的增长也带来了少样本和零样本学习的能力,降低了对大规模标注数据的依赖。近年来,指令微调对齐技术的引入使模型能够更好地理解和执行人类指令,同时确保输出符合人类价值观。多模态模型的兴起进一步拓宽了大模型的应用范围,使其能够处理文本、图像等多种数据类型。为应对大模型微调的计算开销,高效微调技术如参数高效微调(PEFT)低秩适应(LoRA)被提出,允许在不修改大部分参数的情况下实现高效微调。这些发展反映了大模型在技术和应用上的持续进步,极大地推动了人工智能在各个领域的广泛应用。

什么是微调?

Fine-tuning 指在已经预训练好的大型语言模型基础上(一般称为“基座模型”),使用特定的数据集进行进一步的训练,让模型适应特定任务或领域。

 


 

二、提示学习和语境学习

1. 提示学习

步骤:

•基于模版添加提示:x ➡️ x' •答案搜索:在答案空间总搜索得分最高输出 •基于规则进行输出映射

 


 

2. 语境学习

核心:类比中学习,不做参数更新,仅执行向前推理

缺点:对性能敏感(模版、事例选择、排列顺序)

 


 

 

三、微调技术

全量微调 vs LoRA vs QLoRA

 


 

全量微调困境

1)参数量大:计算量大、耗时长(计算资源和储存空间)

2)性能问题:直接修改预训练模型所有参数会破坏模型原始性能;实时性应用效果差(微调会增加推理阶段的计算延迟)

3)存储需求大:不论是参数,还是梯度过程都需要存储在GPU中,对GPU显存需求大;保存模型,对硬盘内存要求大

 

1. LoRA (Low-rank Adaptation)

 


 

前提假设:参数更新主要在一个低维子空间,如果参数更新发生在高维空间,可能会导致重要信息遗漏和LoRA方法失效。 主要原理:增加一个小网络(低阶矩阵分解),通过只对小网络进行更新的方式进行微调;保持原始模型参数不变;只训练额外增加的部分,节省模型优化的梯度和优化器状态的现存占用。 重要参数: 1)两个矩阵:B初始化为0,A是随机初始化矩阵,服从正态分布;这样设置新增的部分 ∆W = BA 对原始权重影响为0 2)两个核心参数:r和参数量正比,alpha是放缩系数,参数更新量∆W 会与 α/r 相乘后再与原本的模型参数相加

核心问题

1)为什么要初始化正态分布?

①确保初始梯度的有效传播:避免梯度消失或者爆炸

②提供足够的随机性:能够探索更广泛的参数空间,增加模型找到最优解的可能

③平衡训练初期的影响:对预训练权重的影响为0,避免破坏预训练模型初始性能

2)为什么一个初始化正态分布另一个初始化为0?

①如果全部为0,容易导致梯度缺失

②如果A和B全部正态,模型训练开始会有比较大偏移值∆W ,难以收敛

损失函数(回归):通常是均方误差,使得W‘=BA和∆W越近越好

3)参数选择和模型效果的关系?

①QKVO应用:可以用到单个上,但是最好的效果是用到每一个参数矩阵上(当GPU比较大的时候,可以指定参数target_modules=[‘q_proj’ ,‘k_proj’, ‘v_proj’, ‘o_proj’, ‘gate_proj’, ‘up_proj’]),用小一点的秩。

②最优r的选择:不一定越多越好;初始一般r从8开始,tips是alpha设置成r的两倍(16),缩放因子scaling=alpha/r=2(权重远大,影响越大),scaling一是可以缩放更新幅度,确保低秩矩阵的更新对模型参数的影响在不同的 ( r ) 值下保持一致,其次可以稳定训练,通过调整更新幅度,避免因过大的更新导致模型不稳定。

(如下图:几个组合中,表现最好的是在qkvo都应用,同时r=2,此时应用层多,但是秩的选择却很低)

 


 

4)LoRA应用层的选择?

①全连接层:包含大量参数(减少需要微调的参数数量);计算量大(低秩近似可以有效降低计算复杂度)

②注意力层:QKV对模型性能影响重大(低秩近似可以显著影响模型的表达能力);投影矩阵包含大量参数(减少参数数量,降低计算和存储需求)

③嵌入层:高维向量来降低维度;提升训练效率

 

2. QLoRA(Quantized Low-Rank Adaptation)

核心原理:在LoRA基础上,进一步减少forward中的现存占用,先将预训练模型量化到4-bit,再添加一组可学习的低秩适配器权重。 三种解决措施:4-bit NormalFloat、双重量化、分页优化器。 量化定义:降低模型计算复杂度和储存需求的技术,核心思想是将模型的权重和激活值从高精度表示转换为低精度表示,从而在减少计算和内存使用的同时尽量保持模型性能,分为权重量化(将模型权重从高精度表示转换为低精度表示)和激活量化(将模型激活值从高精度表示转换为低精度表示)。

解决措施

1)4-bit NormalFloat

①步骤:

•数据标准化:   •计算分位数:共需要2^4+1=17个分位数 •计算量化值 •数据映射:将标准化后的数据映射到最近的量化值

②缺点:数据缩放,分位数离散化每一步骤都导致了误差累积,且4-bit量化只能选择16个离散值之一,误差进一步增加

③优点:高效存储,数据压缩提高存储和传输效率

2)双重量化

①原理:两次量化,降低内存需求

②步骤:使用8-bit对初识量化结果进一步压缩,通过减少位宽来进一步减少储存空间同时保持数据准确性

3)分页优化器

①原理:解决内存峰值,动态将不常用的数据或者参数调出到较慢的储存中去(CPU)

②步骤:

•方案选择:对称量化(QLoRA,使用统一的缩放因子和零点)和非对称量化(针对每个权重或激活值使用不同的缩放因子和零点) •计算scale和zero-point:用于将浮点数映射到整数范围 •公式应用:将浮点数转化为整数表示

量化方案对比

对称量化假设数据分布对称,因此只需要考虑一个缩放因子(absmax),非对称量化考虑了数据的实际最大最小值,适用于数据分布不对称的情况。

1)对称量化(QLoRA中使用)

①原理:使用绝对值的最大值进行标准化,将数据映射到 [-127,127]

②步骤:

•分块 •计算量化常数:对每个块求absmax,   •应用量化:   •反量化:   ,和原始非常接近来验证

2)非对称量化

①步骤:

•确定最大最小值,如果量化到8位 •计算scaling和zero-point:   •数值转换:   •验证量化效果(反量化):存在细微误差,但基本保持原始分布

3)分块量化(Chunk-based Quantization):通过将张量划分为较小的块,分别对每个块进行量化,从而提高量化后的精度和模型性能。

①作用:

•提高精度:当数值范围较大,统一量化常数无法精确表示所有值,通过分块可以让每个块的范围相对较小,提高量化精度 •减少量化误差:全局量化可能忽略数据统计差异,分块能够让每个块独立确定最适合的量化常数,减少全局量化带来的误差积累 •适应不同数据分布:适应极端值

②适用场景:模型部署在资源受限的环境,且量化精度对模型性能有较大影响;或有较大动态范围和复杂分布的数据时。

 

四、指令微调

构建指令数据:手动 OR 自动

•手动:高质量且多样 •自动:流程图如下

 


 

五、DeepSpeed Chat

一种快速(整个训练只需要通过一行命令完成)、经济实惠、可扩展且开放的系统框架,可实现端到端强化学习人类反馈(RLHF)训练实验,从而生成多种模式高质量ChatGPT式模型。

1. 核心功能

1)简化ChatGPT类型模型训练和强化推理的体验:只需一个脚本实现多个步骤;还提供一个易于使用的推理API,用于用户在模型训练后测试对话式交互

2)RLHF模块:复刻了instruct GPT论文中的训练模式,包括监督微调、奖励模型微调和RLHF;此外还提供数据抽象和混合功能,支持使用多个不同来源的数据源进行训练

3)RLHF系统:将训练和推理引擎整合到一个统一的混合引擎(DeepSpeed-HE)中用于RLHF训练。能够无缝地在推理和训练模式之间切换

2. RLHF流程

1)监督微调(SFT):使用精选人类回答来微调预训练的语言模型以应对多种查询

2)奖励模型微调:使用一个包含人类对同一查询的多个答案打分的数据集来训练一个独立的(通常比SFT小的)的奖励模型(RW)

3)RLHF训练:利用PPO算法(Proximal Policy Optimization 近端策略优化)利用RW模型的奖励反馈进一步微调SFT模型。PPO的目标函数是限制策略比率变动,避免策略更新过大导致性能不稳定。

 

3. DeepSpeed-HE

通过Actor model启用eval和train模式,两个引擎间的过渡是无缝的,选择不同的优化来运行模型提高整个系统的吞吐量;

ZeRO用于训练过程中将模型状态分割到不同GPU上,实现超线性扩展;ZeRO和LoRA结合,在混合引擎中彼此兼容,提高训练效率。

 


 

 

本书其余章节指路: 第一章&第二章

标签:训练,之锤,模型,微调,RLHF,锻造,参数,量化
From: https://www.cnblogs.com/Jcloud/p/18598770

相关文章

  • 参数高效微调:MoRA与LoRA的比较及应用分析
    概述参数高效微调的背景,接着详细介绍MoRA的方法及其与LoRA和全微调的比较,最后讨论MoRA在特定任务中的表现在机器学习,尤其是处理大型语言模型(LLM)时,参数高效微调(Parameter-EfficientFine-Tuning,PEFT)是一种重要的技术,这种技术旨在减少微调过程中所需更新的模型参数数量。传......
  • OpenAI发布强化学习微调技术
    前排提示,文末有大模型AGI-CSDN独家资料包哦!OpenAI在12天产品发布活动的第二天,推出基于强化学习的模型微调技术(ReinforcementFine-tuning,简称RFT)。这项技术将帮助开发者和机构用少量数据打造专业领域的AI模型。技术创新亮点•强化学习算法:不同于传统监督式微调,采用强化......
  • 人工智能大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲
    LLaMA-Factory——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型,并且提供了丰富的训练算法,包括增量预训练、多模态指令监督微调、奖励模型训练等。LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的情况下,在本地完成上百种预......
  • Qwen2大模型微调入门实战(附完整代码)
    Qwen2(https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct/summary)是通义千问团队最近开源的大语言模型,由阿里云通义实验室研发。前排提示,文末有大模型AGI-CSDN独家资料包哦!以Qwen2作为基座大模型,通过指令微调的方式做高精度文本分类,是学习LLM微调的入门任务。在......
  • 大模型微调知识全景
    大模型微调知识全景文章目录大模型微调知识全景一、大模型开发全流程二、什么是大模型微调三、为什么需要大模型微调四、大模型微调的方法有哪些4.1FFT的缺点4.2PEFT的优点4.3PEFT的分类五、各类微调方法的原理是什么5.1In-ContextLearning5.2SoftPromptTun......
  • 从零开始训练大模型全面指南:预训练、指令微调、奖励模型、强化学习
    在这篇文章中,我们将尽可能详细地梳理一个完整的LLM训练流程。包括模型预训练(Pretrain)、Tokenizer训练、指令微调(InstructionTuning)、奖励模型(RewardModel)和强化学习(RLHF)等环节。前排提示,文末有AI大模型CSDN独家资料包哦!文章目录1\.预训练阶段(PretrainingStage)1.......
  • RAG vs 微调:大模型知识的进化之路
    2024年,大模型应用落地迎来全面提速。越来越多的企业在加大对大模型的投入,抢抓变革机遇,加速应用落地。大模型应用落地绕不开的两个关键词“RAG”和“微调”。那么什么是RAG?什么是大模型微调?大模型项目建设中RAG和微调如何选择?前排提示,文末有大模型AGI-CSDN独家资料包哦!什......
  • 千问 Qwen2.5-7B-Instruct 模型微调后“变身”Claude:是前世记忆还是数据版权?
    在微调阿里巴巴的开源大模型Qwen2.5-7B-Instruct时,我意外发现了一个令人震惊的现象:原本明确标识自己为“千问”的模型,在经过短时间微调后,居然声称自己是Anthropic的模型Claude。一个阿里推出的模型在微调后却自称为Anthropic的产品,确实让人感到意外和疑惑。千问与Claude......
  • 书生大模型第四期 | 基础岛 task5 XTuner 微调个人小助手认知任务(包含swanlab可视化
    目录环境配置与数据准备**步骤0.使用conda先构建一个Python-3.10的虚拟环境****步骤1.**安装XTuner验证安装修改提供的数据**步骤0.**创建一个新的文件夹用于存储微调数据**步骤1.**编辑&执行脚本**步骤3.**查看数据训练启动**步骤0.**复制模型**步骤......
  • Step-05 SFT微调一个2-Classification模型
    一、B二、E微调(finetuning)过程中主要调整输出层(例如替换为二分类头)以适应具体任务。是否需要冻结其他层的参数取决于任务的需求:仅替换输出头:可用于轻微调整模型,使其专注于新任务的分类。部分冻结层:通过冻结Transformer主体参数(阻止梯度更新)保持预训练时学到的基础知识,......