网站建设行业如何,开o2o网站需要什么手续,wordpress 绑定手机版,西安市城乡建设管理局网站在《大语言模型之七- Llama-2单GPU微调SFT》和《大语言模型之十三 LLama2中文推理》中我们都提到了LoRA#xff08;低秩分解#xff09;方法#xff0c;之所以用低秩分解进行参数的优化的原因是为了减少计算资源。
我们以《大语言模型之四-LlaMA-2从模型到应用》一文中的图…在《大语言模型之七- Llama-2单GPU微调SFT》和《大语言模型之十三 LLama2中文推理》中我们都提到了LoRA低秩分解方法之所以用低秩分解进行参数的优化的原因是为了减少计算资源。
我们以《大语言模型之四-LlaMA-2从模型到应用》一文中的图3 LLama-2 图例过程为例说明内存的消耗。首先是有32层的Transformer它们每层的内存占用如下图 图中有六个大矩阵是打了勾的原始的LLama2中矩阵的维度是4096*4096单精度是float4字节那么一个矩阵的消耗将是64MB七个矩阵大约是448MB共计三十二层那么总计消耗的内存将约16GB在训练的时候还要计算梯度和学习率需要的内存量将是翻倍的大小。例如参数量为1750亿Bloom的其推理需要约350GB内存。
所以有没有什么办法能够减少内存和算力的需求进行微调呢降低精度混合精度、单精度和量化是一些方法最新的研究通过微调部分参数来达到精调模型。传统的迁移学习会冻结模型所有权重参数然后添加额外的迁移学习层来实现迁移学习的任务这种方法的缺点是 由此针对大语言模型的PEFT的方法被提出来这里主要是介绍LoRA方法因为在《大语言模型之十三 LLama2中文推理》合并模型使用的就是这种方法。 LoRA是微软开源的方法原始paper其核心思想是减少冗余信息
矩阵的秩度量的就是矩阵的行列之间的相关性。为了求矩阵A的秩我们是通过矩阵初等变换把A化为阶梯型矩阵若该阶梯型矩阵有r个非零行那A的秩rank(A)就等于r。 如果矩阵的各行或列是线性无关的矩阵就是满秩的也就是秩等于行数。
如果X是一个m行n列的数值矩阵rank(X)是X的秩假如rank (X)远小于m和n则我们称X是低秩矩阵上一篇博客的LoRA采用的方法中原矩阵是40964096将其分为409664和64*4096的两个矩阵这两个矩阵的秩远小于原矩阵 。低秩矩阵每行或每列都可以用其他的行或列线性表出可见它包含大量的冗余信息。利用这种冗余信息可以对缺失数据进行恢复也可以对数据进行特征提取。
LoRA
微软的LoRA方法的核心思想如下图所示预训练的权重用 W W W表示而需要新训练的矩阵用 A A A和 B B B表示各层的输出最终变为 h W 0 x Δ W x W 0 x B A x hW_0x\Delta WxW_0 xBAx hW0xΔWxW0xBAx 在《大语言模型之十三 LLama2中文推理》基座模型和LoRA 微调模型merge的操作就是实现上述公式的功能。 在大语言模型之十三 LLama2中文推理》中各层Attention的 W q , W k , W v W_q, W_k,W_v Wq,Wk,Wv的维度是 4096 ∗ 4096 4096*4096 4096∗4096而A和B的权重参数量分别是 4096 ∗ 64 4096*64 4096∗64和 64 ∗ 4096 64*4096 64∗4096即采用了秩为64为什么选择这个秩的子矩阵训练。 代码对应的二者实现如下
def regular_forward_matmul(x,W):h x W
return hdef lora_forward_matmul(x, W, W_A, W_B):h x W # regular matrix multiplicationh x *(W_A W_B) * alpha # use scaled LoRA weights
return hB A BA BA矩阵使用了秩和alpha两个超参数进行了缩放其目的是控制 B A BA BA矩阵对原始的权重 W 0 W_0 W0的影响LoRA论文做了很多实验尝试不同的秩r如下图所示这表明可以采用秩很小的矩阵而且q/k/v也并不需要都进行重训练尽管上一篇博客对所有参数都进行了重新训练这也意味着单GPU重训练内存是不够的。 在《大语言模型之七- Llama-2单GPU微调SFT》中使用参数如下其只对q和v权重进行了跟新而k是freeze的另外秩等于8参数量从4096*4096变为了8*4096*2这也极大减少了参数量。
from peft import LoraConfig, get_peft_model# LoRA attention dimension 64 8
lora_r 8# Alpha parameter for LoRA scaling 16,32
lora_alpha 32# Dropout probability for LoRA layers 0.1 0.05
lora_dropout 0.1peft_config LoraConfig(rlora_r,lora_alphalora_alpha,target_modules[q_proj,v_proj],lora_dropoutlora_dropout,biasnone,task_typeCAUSAL_LM
)
看懂这篇博客以及《大语言模型之七- Llama-2单GPU微调SFT》那么就可以在《大语言模型之十三 LLama2中文推理》所述合并的模型基础上进行微调训练。