微信扫码
添加专属顾问
我要投稿
介绍PISSA前,先简单过一下LLMs微调经常采用的LoRA(Low-Rank Adaptation)微调的方法,LoRA 假设权重更新的过程中有一个较低的本征秩,对于预训练的权重参数矩阵,( 为上一层输出维度, 为下一层输入维度),使用低秩分解来表示其更新:
在训练过程中,冻结不更新,、 包含可训练参数。
则 LoRA 的前向传递函数为:
初始化时,常将低秩矩阵高斯初始化,初始化为0。这样在训练初期AB接近于零,不会影响模型的输出。
从图中可以看出,PISSA和LoRA主要的区别是初始化方式不同:
初始化A和B矩阵:使用主要的奇异值和奇异向量初始化两个可训练的矩阵:
构建残差矩阵:使用残差奇异值和奇异向量构建残差矩阵:
import torch
from peft import LoraConfig, get_peft_model
from transformers import AutoTokenizer, AutoModelForCausalLM
from trl import SFTTrainer
from datasets import load_dataset
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer.pad_token_id = tokenizer.eos_token_id
lora_config = LoraConfig(
# init_lora_weights="pissa", # Configure the initialization method to "pissa", which may take several minutes to execute SVD on the pre-trained model.
init_lora_weights="pissa_niter_4", # Initialize the PiSSA with fast SVD, which completes in just a few seconds.
)
peft_model = get_peft_model(model, lora_config)
peft_model.print_trainable_parameters()
dataset = load_dataset("imdb", split="train[:1%]")
trainer = SFTTrainer(
model=peft_model,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=128,
tokenizer=tokenizer,
)
trainer.train()
peft_model.save_pretrained("pissa-llama-2-7b")
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf", torch_dtype=torch.bfloat16, device_map="auto"
)
# Performs SVD again to initialize the residual model and loads the state_dict of the fine-tuned PiSSA modules.
peft_model = PeftModel.from_pretrained(model, "pissa-llama-2-7b")
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf", torch_dtype=torch.bfloat16, device_map="auto"
)
# No SVD is performed during this step, and the base model remains unaltered.
peft_model = PeftModel.from_pretrained(model, "pissa-llama-2-7b-lora")
PISSA是一种高效的微调方法,它通过奇异值分解提取大型语言模型中的关键参数,并仅对这些参数进行更新,以实现与全参数微调相似的性能,同时显著降低计算成本和参数数量。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-12-14
我微调了一个LangChain专家模型,离Vibe Agent又近了一步
2025-12-11
左脚踩右脚:大模型的有趣且简单的微调方式“SHADOW-FT”
2025-12-11
大模型训练的高效内存解决方案:流水线感知的细粒度激活卸载,实现显存开销与吞吐性能的联合最优
2025-12-08
一杯咖啡成本搞定多模态微调:FC DevPod + Llama-Factory 极速实战
2025-12-04
OpenAI公开新的模型训练方法:或许能解决模型撒谎问题,已在GPT-5 thiking验证
2025-11-23
微调Rerank模型完整指南
2025-11-22
大模型微调全流程实战指南:基于IPO框架的深度解析与优化
2025-11-21
AI基础 | Qwen3 0.6B 微调实现轻量级意图识别
2025-10-12
2025-10-14
2025-10-21
2025-09-24
2025-09-20
2025-09-25
2025-11-05
2025-11-05
2025-11-21
2025-12-04