
回复
本文介绍大模型微调方法中的QLoRA。
QLoRA由华盛顿大学UW NLP小组的成员于2023年提出发,旨在进一步降低微调大模型的微调成本,因为对于上百亿参数量的模型,LoRA微调的成本还是很高。
感兴趣的小伙伴可以去阅读一下原文:https://arxiv.org/pdf/2305.14314
上图为QLoRA的训练过程图,QLoRA更多的是在工程上进行了量化和优化,从图中可知,主要有4个部分的改进:
QLoRA的一个重要的改进和核心工作则是将量化的思想和LoRA的低秩适配器的思想结合到一起拿来对大模型进行微调,因此单独拎出来说,实现的代码如下:
if checkpoint_dir is not None:
print("Loading adapters from checkpoint.")
model = PeftModel.from_pretrained(model, join(checkpoint_dir, 'adapter_model'), is_trainable=True)
else:
print(f'adding LoRA modules...')
modules = find_all_linear_names(args, model)
config = LoraConfig(
r=args.lora_r,
lora_alpha=args.lora_alpha,
target_modules=modules,
lora_dropout=args.lora_dropout,
bias="none",
task_type="CAUSAL_LM",
)
model = get_peft_model(model, config)
find_all_linear_names
:找到所有的全连接层get_peft_model
:在所有全连接层中插入LoRA模块
本文转载自公众号瓦力算法学研所,作者:喜欢瓦力的卷卷