训练、微调与数据面试题图文讲义4780 字

大模型PEFT库中使用LoRA技巧面试题

·全库 146 / 611

《大模型PEFT库中使用LoRA技巧面试题》共 14 页、0.5 万字,通篇围绕 LoRA、显存、推理、量化 展开,归在「训练、微调与数据」这一层。

覆盖LoRA显存推理量化微调Attention

适合要自己训模型、或者判断这一版该不该训的人

目录骨架(1 节)
  1. 六、使用 LoRA 对大模型进行推理,如何进行加载?

原 PDF 已逐页还原成图,共 14 页,这里先放前 3 页。右侧文字由 OCR 按版面重排,可能有个别错字,以图为准;点图可全屏放大。

本讲义目录 · 3 页
  1. 01如何使用 PEFT 库中 LoRA?
  2. 02二、如何配置 LoraConfig?
  3. 033.2 模型显存占用的部分有哪些?
011 / 3
第 1 页
第 1 页

如何使用 PEFT 库中 LoRA?

• 如何使用 PEFT 库中 LoRA?

  • 二、如何配置 LoraConfig?
  • 三、模型加入 PEFT 策略
  • 3.1 模型加载策略有哪些?
  • 3.2 模型显存占用的部分有哪些?
  • 3.3 模型显存占用优化策略?
  • 3.3.1 8bit 量化优化策略?
  • 3.3.2 梯度检查优化策略?
  • 3.4 如何向模型加入 PEFT 策略?
  • 四、PEFT 库中 LoRA 模块代码介绍
  • 4.1 PEFT 库中 LORA 模块整体实现思路
  • 4.2 PEFT 库中 LORA 模块 _find_and_replace ()实现思路
  • 4.3 PEFT 库中 Lora 层的实现思路
  • 4.3.1 基类 LoraLayer 实现
  • 4.3.2 Linear 实现
  • 五、使用 LoRA 对大模型进行高效参数微调,如何进行存储?
  • 六、使用 LoRA 对大模型进行推理,如何进行加载?
  • 七、huggingface 大模型如何加载多个 LORA 并随时切换?

一、前言

本文章主要介绍使用 LORA 对大模型进行高效参数微调,涉及内容: 1. PEFT 库中 LoRA 模块使用; 2. PEFT 库中 LORA 模块代码介绍; 3. 在推理时如何先进行 weight 的合并在加载模型进行推理;

# 以下配置可能会随时间变化,出了问题就去 issue 里面刨吧 # 要相信你不是唯一一个大冤种!

accelerate appdirs loralib bitsandbytes black

blackLjupyter ]

datasets fire transformers>=4.28.0

022 / 3
第 2 页
第 2 页

二、如何配置 LoraConfig?

git+https://github.com/huggingface/peft.git sentencepiece gradio

wandb cpm-kernel

二、如何配置 LoraConfig?

#设置超参数及配置

LORA ALPHA = 16 LORA DROPOUT = 0.05 TARGET_MODULES = L

config = LoraConfig ( r=LORA R, lora_alpha=LORA_ALPHA, target_modules=TARGET_MODULES, lora_dropout=LORA_DROPOUT, bias="none”, task_type="CAUSAL_LM",

  • 参数介绍:
  • r:lora 的秩,矩阵 A 和矩阵 B 相连接的宽度,r<<d;
  • lora_alpha:归一化超参数,lora 参数 AWx 被以 ar 归一化,以便减少改变 rr 时需要重新训练的计算
  • target_modules: lora 的目标位置;
  • merge_weights:eval 模式中,是否将 lora 矩阵的值加到原有 WO 的值上;
  • lora_dropout: lora 层的 dropout 比率;
  • fan_in_fan_out:只有应用在 Conv1D 层时置为 True,其他情况 False;
  • bias:是否可训练 bias,none:均不可;all:均可;lora_only:只有 lora 部分的 bias 可训练;
  • task_type:这是 LoraConfig 的父类 PeftConfig 中的参数,设定任务的类型;
  • modules_to_save:除了 lora 部分之外,还有哪些层可以被训练,并且需要保存; 注意:target_modules 中的作用目标名在不同模型中的名字是不一样的。query_key_value 是在

ChatGLM 中的名字

三、模型加入 PEFT 策略 3.1 模型加载策略有哪些?

模型加载虽然很简单,这里涉及到 2 个时间换空间的大模型显存压缩技巧,主要说下 load_in_8bit 和 prepare_model_for_int8_training。

033 / 3
第 3 页
第 3 页

3.2 模型显存占用的部分有哪些?

from peft import get_peft_model, LoraConfig, prepare_model_for_int8_training, set_peft_model_state_dict from transformers import AutoTokenizer, AutoModel

model = AutoModel.from pretrained ( “THUDM/chatglm3-6b”,load_in_8bit=True, torch_dtype=torch. float16,

tokenizer = AutoTokenizer.from pretrained (

“THUDM/chatglm3-6b",trust_remote_code=lrue

model = prepare_model_for_int8_

3.2 模型显存占用的部分有哪些?

这里需要介绍一下两个模型显存占用的部分: 1. 静态显存基本由模型参数量级决定; 2. 动态显存在向前传播的过程中每个样本的每个神经元都会计算激活值并存储,用于向后传播时的梯度计算, 这部分和 batchsize 以及参数量级相关;

3.3 模型显存占用优化策略?

模型显存占用有以下两种方式: 1.8bit 量化优化。该方式只要用于优化静态显存; 2. 梯度检查优化。该方式只要用于优化动态显存;

3.3.1 8bit 量化优化策略?

参考:https://huggingface.co/blog/hf-bitsandbytes-integration

from_pretrained 中的 load_in_8bit 参数是 bitsandbytes 库赋予的能力,会把加载模型转化成混合 8bi 的量化模型, 注意这里的 8bit 模型量化只用于模型推理,通过量化 optimizer state 降低训练时显存的时 8bi 优化器是另一个功能 不要搞混哟~ 模型量化本质是对浮点参数进行压缩的同时,降低压缩带来的误差。8-bit quantization 是把原始 FP32 (4 字节) 压缩到 Int8 (1 字节)也就是 1/4 的显存占用。如上加载后会发现除 lora 层外的多数层被转化成 int 类型如下

training (model)

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求