大模型训练之加速篇 -> peft(Lora->ReLORA->Vera->Dora->LISA) -> 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层
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于LoRA对ChatGLM进行微调实验python源码+训练好的模型+项目说明.zip 使用LoRA对ChatGLM进行微调。整体的结构非常简单,构造好相应格式的数据后就可以开始训练训练好的实体识别LoRA权重已经位于checkpoint下。 # 依赖 linux操作系统为Ubantu,GPU为A40-48G显存。 ```python mpi4py transformers==4.28.1 peft==0.3.0 icetk deepspeed==0.9.2 accelerate cpm_kernels sentencepiece==0.1.99 peft=0.3.0 torch=2.0.0 ``` # 说明 ## 目录结构 ```python --checkpoint:保存模型 ----msra:数据集名称 --------train_deepspeed ------------adapter_model ----------------adapter_config.json ----------------adapter_model.bin ----------------train_args.json --------train_trainer ------------adapter_model ----------------adapter_config.json ----------------adapter_model.bin ----------------train_args.json --model_hub:预训练模型 ----chatglm-6b:预训练模型位置 --data:数据 ----msra:数据集名称 --------instruct_data:指令数据 ------------dev.txt ------------train.txt --------ori_data:原始数据 --chat_ner.py:闲聊 --train_deepspeed.py:使用原生deepspeed训练 --train_trainer.py: 使用transformers的Trainer进行训练 --test.py:测试训练好的模型 --predict.py:预测 --test_chatglm_6b.py:测试原始的chatglm-6b --process.py:处理数据为instruct_data --dataset.py:加载数据为相应的格式 --deepspeed.json:deepspeed配置文件,用于trasnformers的Trainer --config_utils.py:用于用字典定义配置,并接收命令行参数 ``` chatglm-6b下面数据是这样,除权重外已经放在model_hub/chatglm-6b下: 数据格式 这里我们以命名实体识别任务为例,数据在data/msra下,其中ori_data为原始数据,instruct_data为处理后的数据,数据格式为一条一个样本,具体是: ```python {"instruct": "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用\n分隔。如果没有结果,回答'没有'。", "query": "文本:因有关日寇在京掠夺文物详情,藏界较为重视,也是我们收藏北京史料中的要件之一。", "answer": "日_地名\n京_地名\n北京_地名"} ``` 可以按照自己的任务自行构建。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值