PEFT documentation

Llama-Adapter

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Llama-Adapter

LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention

Llama-Adapter 是一种专为将 Llama 转化为指令遵循模型而设计的 PEFT 方法。Llama 模型本身保持冻结,仅学习一组前缀于输入指令 token 之前的适配提示。由于在模型中插入随机初始化的模块可能导致模型丢失部分已有知识,Llama-Adapter 采用零初始化注意力与零门控机制,逐步将指令提示融入模型。

该论文的摘要如下:

我们提出了 LLaMA-Adapter,一种轻量级的适配方法,用于高效地将 LLaMA 微调为指令遵循模型。使用 52K 个 self-instruct 演示样本,LLaMA-Adapter 仅在冻结的 LLaMA 7B 模型上引入了 1.2M 个可学习参数,并且在 8 块 A100 GPU 上微调的成本不到一小时。具体而言,我们采用了一组可学习的适配提示,并将其前置到较高 Transformer 层的输入文本 token 之前。然后,我们提出了一种带有零门控的零初始化注意力机制,该机制自适应地将新的指令线索注入 LLaMA,同时有效保留其预训练知识。通过高效训练,LLaMA-Adapter 生成了高质量的响应,其表现与完全微调 7B 参数的 Alpaca 相当。此外,我们的方法可以简单地扩展到多模态输入,例如图像,用于图像条件化的 LLaMA,并在 ScienceQA 上实现了卓越的推理能力。我们在 https://github.com/ZrrSkywalker/LLaMA-Adapter 发布了我们的代码。

基准测试概览

API

AdaptionPromptConfig

类 peft.AdaptionPromptConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetarget_modules: str = Noneadapter_len: int = Noneadapter_layers: int = None )

存储 AdaptionPromptModel 的配置。

AdaptionPromptModel

类 peft.AdaptionPromptModel

< >

( modelconfigs: dictadapter_name: str )

实现了 https://huggingface.co/papers/2303.16199 中描述的自适应提示(adaption prompts)。

前 L 个注意力模块被替换为 AdaptedAttention 模块,这些模块封装了原始模块,但插入了带有门控机制(用于零初始化)的可训练提示。

关于多适配器模式的说明:

  • 我们通过维护一个以适配器名称为索引的 AdaptedAttention 模块字典,来存储不同适配器的状态。
  • 每次切换适配器时,我们都会从模型中移除当前活动适配器的模块,将它们存储在字典中,并用新适配器的模块进行替换。
  • 为避免状态重复且可能不一致,当前激活的适配器始终会从字典中移除。
  • 禁用适配器还会导致这些模块从模型中被移除。

add_adapter

< >

( adapter_name: strconfig: AdaptionPromptConfig )

添加具有指定名称和配置的适配器。

delete_adapter

< >

( adapter_name: str )

删除具有指定名称的适配器。

disable_adapter_layers

< >

( )

通过替换 AdaptedAttention 模块来禁用适配器层。

enable_adapter_layers

< >

( )

通过换入缓存的 AdaptedAttention 模块来启用适配器层。

set_adapter

< >

( adapter_name: strinference_mode: bool = False )

将模型设置为使用指定名称的适配器。

Update on GitHub