大模型训练之加速篇 -> peft(Lora->ReLORA->Vera->Dora->LISA->Lora+->Lora-GA) -> accelerator -> deepspeed (Zero)

HUGGINFACE PEFT库:

实现LORA, prefix-tuning. prompttuning, AdaLoRA, LLaMA-Adapter训练的库

HUGGINFACE accelerator库:

是一个将pytorch模型迁移到CPU/GPU/Multi-GPUs/TPU/Fp16/bf16模式下训练的一个标准库
在这里插入图片描述

DeepSpeed

Pytorch的分布式并行计算框架(Distributed Data Parallel,简称DDP),它也仅仅是能将数据并行,放到各个GPU的模型上进行训练。
DeepSpeed,它就能实现这个拆散功能,它通过将模型参数拆散分布到各个GPU上,以实现大型模型的计算,弥补了DDP的缺点,非常方便,这也就意味着我们能用更少的GPU训练更大的模型,而且不受限于显存。

Zero

zero 1 2 3

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
发表在SC 20,DeepSpeed项目最初就是论文中ZeRO方法的官方实现。
ZeRO-Offload: Democratizing Billion-Scale Model Training发表在ATC 21
ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning 发表在SC 21,同样是进行offload,ZeRO-Offload更侧重单卡场景,而ZeRO-Infinity则是典型的工业界风格,奔着极大规模训练去了。
参考资料:https://zhuanlan.zhihu.com/p/428117575
deepspeed就是主要使用了这种方式

Lora

LoRA 发现再微调 LLMs 时,更新矩阵(update matrix)往往特别 sparse,也就是说 update matrix 是低秩矩阵。LoRA 的作者根据这一特点将 update matrix reparametrize 为两个低秩矩阵的积积BA 。
其中W=[d
k],,A 和 B 的秩为 r,且 r远远小于min(d, k)。如此一来,A+B 的参数量将大大小于W .

LoRA 的论文:
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
https://arxiv.org/pdf/2106.09685.pdf

借助 Huggingface PEFT 框架,使用 LoRA 微调 mt0:
https://github.com/huggingface/peft/blob/main/examples/conditional_generation/peft_lora_seq2seq.ipynb

在这里插入图片描述

Vera

VERA: VECTOR-BASED RANDOM MATRIX ADAPTATION

在这里插入图片描述在这里插入图片描述

Dora

DoRA 的论文:
DoRA: Weight-Decomposed Low-Rank Adaptation

在这里插入图片描述

LISA:

LISA: Layerwise Importance Sampling for Memory-Efficient Large Language Model Fine-Tuning
在LoRA和全参数微调中,各层的权值范数分布都存在偏斜现象,这意味着不同层在大规 模LLM训练中的重要性不同。
• 本文提出逐层重要性采样的AdamW (LISA)算法,一种简单的优化方法,能够扩展到70 B以上 的LLMs,具有与LoRA更少或类似的内存成本。
• 本文证明了LISA在现代llm微调任务中的有效性,在MT-Bench中以8% - 36%优于LoRA,并表现 出更好的收敛行为。在某些设置下,LISA的性能甚至超过了全参数训练。在不同规模的模型(7 B- 70 B)和不同的任务(包括指令遵循、医疗QA和数学问题)中可以观察到类似的性能增益。

在这里插入图片描述
与LoRA中的中间层相比,嵌入层(GPT2的wte和wpe层)或语言模型(LM)头层的权重更新占比更 大,通常是数百倍。然而,这种现象在全参数训练的时候并不突出。
这一观察表明,LoRA和全参数训练的权重更新重点有显著差异,这可以归因于它们所学知识的差异。 例如,在嵌入层中,具有相似含义的标记,即同义词,可以投影到相同的嵌入空间并转换为相似的嵌 入。LoRA可以捕捉语言的这种相似性,并在低维空间中对它们进行“分组”,从而及时识别和优化语言含义的常见特征。代价是LoRA固有的低秩空间限制了其有限的表示能力。其他可能的解释也可以证明这种现象。尽管对这一观察结果有各种解释,但有一个事实仍然很清楚:LoRA的分层重要性值与完全参数调优不同。

算法的核心在于:
始终更新底embedding和顶层linear head,
随机更新少量中间attention层,例如2-4层
在这里插入图片描述

PiSSA:

Principal Singular Values and Singular Vectors Adaptation of Large Language Models

在这里插入图片描述
图 1)从左到右依次为全参数微调、LoRA、以及 PiSSA。蓝色代表冻结的参数,橘黄色代表可训练参数及它们的初始化方式。相比全参数微调,LoRA 和 PiSSA 都大幅节省了可训练参数量。对于相同输入,这三种方法的初始输出完全相等。然而,PiSSA 冻结模型的次要成分,直接微调主成分(前 r 个奇异值和奇异向量);而 LoRA 可看作冻结模型的主要部分,而去微调 noise 部分。

AdaLoRA:

让模型学习SVD分解的近似。在损失函数中增加了惩罚项,防止矩阵P和Q偏离正交性太远,以实现稳定训练
ADALORA: ADAPTIVE BUDGET ALLOCATION FOR PARAMETER-EFFICIENT FINE-TUNING

RSLoRA:rank-stabilized LoRA

A Rank Stabilization Scaling Factor for Fine-Tuning with LoRA
通过动态调整低秩矩阵的秩和缩放系数来进行适配。这种动态调整机制可以在训练过程中根据数据分布和模型需求进行优化,保持模型的稳定性,避免过拟合或欠拟合

LoRA+:

为了使LoRA的效果尽可能接近最优,权重B的学习率应该要大于权重A的学习率。
LoRA+ 提高了1% ‑ 2%的性能和高达两倍的微调速度,而计算成本与 LoRA 相同。
LoRA+: Efficient Low Rank Adaptation of Large Models
https://kexue.fm/archives/10001
在这里插入图片描述
基于两点假设:
1、数值稳定:模型每一层的输出值都应该是数值稳定的,跟网络宽度无关;

A,B之一要选择全零初始化,但这不大重要,我们只需要意识到1/n,1/r的方差可以让XA,XAB都保持数值稳定性,那么就可以猜测训练完成后的A,B,很可能也近似地也有1/n,1/r的方差。鉴于r≪n,所以这等价于说A的分量绝对值会明显小于B的分量绝对值,这就是A,B不对称性的源头

2、贡献相当:为了使LoRA最优,A,B两个矩阵对效果应该有同等程度的贡献。
在这里插入图片描述

LoRA-GA:

得到Lora的AB矩阵的初始化方法
LoRA-GA: Low-Rank Adaptation with Gradient Approximation
W=(W0−A0B0)+AB, 也就是说将固定不变的权重从W0换为W0−A0B0,同样可以满足初始W等于W0这一条件。
即初始状态的LoRA与全量微调是等价的,那么我们是否还可以调整A0和B0,使得LoRA和全量微调在后续训练中也尽可能近似?
比如最简单地,让经过第一步优化后的W1尽可能相等?
越仔细回味,我们会越发现这个优化点是如此“直击本质”——LoRA的目标不就是“以小搏大”,希望能接近全量微调的效果吗?既然如此,尽可能对齐全量微调的后续更新结果,不就是最正确的改进方向?从逼近的角度来看,“W的初始值等于W0
”相当于全量微调的零阶近似,保持后面的W1,W2,⋯接近,则相当于是更高阶的近似,是合情合理的选择,所以笔者看完摘要后就有种“就是它了”的强烈感觉。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值