掘金 人工智能 8小时前
微调篇-PEFT定制化LoRA模型配置
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了PEFT(Parameter-Efficient Fine-Tuning,高效参数微调)方法,旨在解决大型预训练模型训练成本高昂的问题。PEFT通过减少可训练参数数量,使得在消费级硬件上训练和存储大型模型成为可能。文章详细阐述了PEFT配置的设置方法,包括LoraConfig等,并展示了如何将PEFT应用于预训练模型。此外,还介绍了如何保存和加载PEFT模型,以及进行推理和进一步训练。

💡 PEFT方法通过减少可训练参数数量,降低了训练大型预训练模型的成本和难度,使其能够在消费级硬件上运行。

⚙️ PEFT配置是关键,它定义了PEFT方法如何应用于预训练模型。例如,LoraConfig用于LoRA方法,其中包含了模型的各种参数设置,如r值、目标模块等。

🛠️ 使用get_peft_model()函数,可以将PEFT配置应用于预训练模型,创建PeftModel。创建后,可以使用save_pretrained()方法保存模型,或使用push_to_hub方法将其上传到Hub。

💾 加载PEFT模型进行推理时,需要提供创建它的PeftConfig以及训练它的基础模型。可以通过PeftModel.from_pretrained()方法加载,也可以使用AutoPeftModelForCausalLM等便捷类。

前言

如今大型预训练模型规模庞大(通常有数十亿参数),这对训练提出了重大挑战,因为它们需要更多的存储空间和更强大的计算能力来处理所有这些计算。您需要访问强大的 GPU 或 TPU 才能训练这些大型预训练模型,这既昂贵,又没有普及到每个人,也不环保,而且不是很实用。PEFT 方法解决了许多这些挑战。PEFT 方法有几种类型(软提示、矩阵分解、适配器),但它们都专注于同一件事:减少可训练参数的数量。这使得在消费级硬件上训练和存储大型模型变得更容易。

PEFT 库旨在帮助您在免费或低成本的 GPU 上快速训练大型模型。在本教程中,您将学习如何设置配置,以将 PEFT 方法应用于预训练的基础模型进行训练。一旦 PEFT 配置设置完成,您可以使用任何您喜欢的训练框架(Transformer 的 Trainer 类、Accelerate、自定义 PyTorch 训练循环)。

PEFT 配置

在各自的 API 参考页面中了解有关您可以为每种 PEFT 方法配置的参数的更多信息。

配置存储了重要的参数,这些参数指定了应如何应用特定的 PEFT 方法。

例如,看看以下用于应用 LoRA 的 LoraConfig 和用于应用 p-tuning 的 PromptEncoderConfig(这些配置文件已经 JSON 序列化)。每当您加载 PEFT 适配器时,最好检查它是否具有关联的 adapter_config.json 文件,这是必需的。

LoraConfig

PromptEncoderConfig

{  "base_model_name_or_path": "facebook/opt-350m", #base model to apply LoRA to  "bias": "none",  "fan_in_fan_out": false,  "inference_mode": true,  "init_lora_weights": true,  "layers_pattern": null,  "layers_to_transform": null,  "lora_alpha": 32,  "lora_dropout": 0.05,  "modules_to_save": null,  "peft_type": "LORA", #PEFT method type  "r": 16,  "revision": null,  "target_modules": [    "q_proj", #model modules to apply LoRA to (query and value projection layers)    "v_proj"  ],  "task_type": "CAUSAL_LM" #type of task to train model on}

您可以通过初始化 LoraConfig 来创建自己的训练配置。

from peft import LoraConfig, TaskTypelora_config = LoraConfig(    r=16,    target_modules=["q_proj", "v_proj"],    task_type=TaskType.CAUSAL_LM,    lora_alpha=32,    lora_dropout=0.05)

PEFT 模型

有了 PEFT 配置,您现在可以将其应用于任何预训练模型,以创建 PeftModel。从 Transformers 库中的任何最先进的模型、自定义模型,甚至新的和不受支持的 Transformer 架构中进行选择。

在本教程中,加载一个基础模型 facebook/opt-350m 以进行微调。

from transformers import AutoModelForCausalLMmodel = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")

使用 get_peft_model() 函数从基础 facebook/opt-350m 模型和您之前创建的 lora_config 创建 PeftModel

from peft import get_peft_modellora_model = get_peft_model(model, lora_config)lora_model.print_trainable_parameters()"trainable params: 1,572,864 || all params: 332,769,280 || trainable%: 0.472659014678278"

当调用 get_peft_model() 时,基础模型将被_就地_修改。这意味着,如果在之前以相同方式修改过的模型上调用 get_peft_model(),则此模型将被进一步变异。因此,如果您想在之前调用过 get_peft_model() 之后修改您的 PEFT 配置,您首先必须使用 unload() 卸载模型,然后使用您的新配置调用 get_peft_model()。或者,您可以重新初始化模型以确保在应用新的 PEFT 配置之前处于全新的、未修改的状态。

现在您可以使用您喜欢的训练框架训练 PeftModel 了!训练完成后,您可以使用 save_pretrained() 在本地保存您的模型,或使用 push_to_hub 方法将其上传到 Hub。

# save locallylora_model.save_pretrained("your-name/opt-350m-lora")# push to Hublora_model.push_to_hub("your-name/opt-350m-lora")

要加载用于推理的 PeftModel,您需要提供用于创建它的 PeftConfig 以及训练它的基础模型。

from peft import PeftModel, PeftConfigconfig = PeftConfig.from_pretrained("ybelkada/opt-350m-lora")model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path)lora_model = PeftModel.from_pretrained(model, "ybelkada/opt-350m-lora")

默认情况下,PeftModel 设置为用于推理,但如果您想进一步训练适配器,您可以设置 is_trainable=True

lora_model = PeftModel.from_pretrained(model, "ybelkada/opt-350m-lora", is_trainable=True)

PeftModel.from_pretrained() 方法是加载 PeftModel 最灵活的方式,因为它与使用的模型框架无关(Transformers、timm、通用 PyTorch 模型)。其他类,如 AutoPeftModel,只是基础 PeftModel 的便捷包装器,并且可以更轻松地直接从 Hub 或本地 PEFT 权重存储位置加载 PEFT 模型。

from peft import AutoPeftModelForCausalLMlora_model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")

查看 AutoPeftModel API 参考,以了解有关 AutoPeftModel 类的更多信息。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

PEFT 预训练模型 微调 LoRA
相关文章