如何在GPT文本摘要任务中同时使用LoRA与Prompt Tuning?
如何同时在PEFT中应用LoRA与Prompt Tuning技术
背景
- LoRA:在Transformer结构中插入并学习权重矩阵降维得到的秩分解矩阵,实现模型轻量化训练。
- Prompt Tuning:通过在模型内部编码学习软提示词,替代人工指定的硬提示,轻量化效果优于硬提示方案。
两者均可通过Hugging Face PEFT模块实现,但get_peft_model函数仅支持传入单个配置参数。要同时应用两种技术,需通过PEFT模型叠加的方式实现。
实现方案
先基于基础模型应用其中一种PEFT配置,得到的PEFT模型可作为新的基础模型,再应用另一种PEFT配置,最终得到集成两种技术的模型。
示例代码
from peft import get_peft_model, TaskType, LoraConfig, PromptTuningConfig, PromptTuningInit import os # 定位tokenizer路径 tokenizer_path = "" for path, dirs, files in os.walk('/root/.cache/huggingface/hub/models--kakaobrain--kogpt'): for file in files: if file.endswith('tokenizer.json'): tokenizer_path = path break if tokenizer_path: break print(tokenizer_path) # 定义Prompt Tuning配置 prompt_config = PromptTuningConfig( task_type=TaskType.CAUSAL_LM, num_virtual_tokens=10, prompt_tuning_init=PromptTuningInit.TEXT, prompt_tuning_init_text="Read the following and summarize:", tokenizer_name_or_path=tokenizer_path ) # 定义LoRA配置 lora_config = LoraConfig( task_type=TaskType.CAUSAL_LM, r=8, lora_alpha=32, lora_dropout=0.1, target_modules=['q_proj', 'v_proj'] ) # 第一步:给基础模型添加LoRA lora_peft_model = get_peft_model(base_model, lora_config) # 第二步:在LoRA模型上叠加Prompt Tuning combined_peft_model = get_peft_model(lora_peft_model, prompt_config) # 验证可训练参数(会显示两种技术的总可训练参数) combined_peft_model.print_trainable_parameters()
关键说明
- 叠加顺序无强制要求,也可先应用Prompt Tuning再叠加LoRA,效果一致。
- 两种技术的可训练参数会被合并,通过
print_trainable_parameters()可确认配置已生效。
内容的提问来源于stack exchange,提问作者cykim
相关产品推荐
相关产品推荐

