Transformers 文档

PEFT

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

PEFT

PeftAdapterMixin 提供了来自 PEFT 库的函数,用于管理 Transformers 的适配器。该 mixin 目前支持 LoRA、IA3 和 AdaLora。前缀调整方法(提示调整、提示学习)不受支持,因为它们无法注入到 torch 模块中。

class transformers.integrations.PeftAdapterMixin

< >

( )

一个包含所有用于加载和使用 PEFT 库支持的适配器权重的函数的类。有关适配器及其在 Transformer 模型中注入的更多详细信息,请查看 PEFT 库的文档:https://huggingface.co/docs/peft/index

目前支持的 PEFT 方法是所有非前缀调整方法。以下是任何人都可使用此 mixin 类加载、训练和运行的支持的 PEFT 方法列表:

其他 PEFT 模型,如提示调整、提示学习,不在讨论范围内,因为这些适配器无法“注入”到 torch 模块中。要使用这些方法,请参考 PEFT 库的使用指南。

使用此 mixin,如果安装了正确的 PEFT 版本,可以:

  • 加载存储在本地路径或远程 Hub 仓库中的适配器,并将其注入模型
  • 在模型中附加新的适配器,并使用 Trainer 或自行训练它们
  • 附加多个适配器并迭代地激活/停用它们
  • 激活/停用模型中的所有适配器
  • 获取活动适配器的 `state_dict`

load_adapter

< >

( peft_model_id: typing.Optional[str] = None adapter_name: typing.Optional[str] = None revision: typing.Optional[str] = None token: typing.Optional[str] = None device_map: typing.Optional[str] = 'auto' max_memory: typing.Optional[str] = None offload_folder: typing.Optional[str] = None offload_index: typing.Optional[int] = None peft_config: typing.Optional[dict[str, typing.Any]] = None adapter_state_dict: typing.Optional[dict[str, 'torch.Tensor']] = None low_cpu_mem_usage: bool = False is_trainable: bool = False adapter_kwargs: typing.Optional[dict[str, typing.Any]] = None )

参数

  • peft_model_id (str, 可选) — 在 Hub 上查找的模型的标识符,或者是到保存的适配器配置文件和适配器权重的本地路径。
  • adapter_name (str, 可选) — 要使用的适配器名称。如果未设置,将使用默认适配器。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,因为我们使用基于 git 的系统在 huggingface.co 上存储模型和其他工件,所以 `revision` 可以是 git 允许的任何标识符。

    要测试您在 Hub 上创建的拉取请求,可以传递 `revision="refs/pr/<pr_number>"`。

  • token (str, `可选`) — 是否使用身份验证令牌加载远程文件夹。对于加载 HuggingFace Hub 上的私有仓库很有用。您可能需要调用 `huggingface-cli login` 并粘贴您的令牌以进行缓存。
  • device_map (strdict[str, Union[int, str, torch.device]]inttorch.device, 可选) — 指定每个子模块应放置位置的映射。它不需要细化到每个参数/缓冲区名称,一旦给定的模块名称在其中,其所有子模块都将被发送到同一设备。如果我们只传递模型将分配到的设备(例如,`"cpu"`、`"cuda:1"`、`"mps"` 或 GPU 序数排名如 `1`),设备映射会将整个模型映射到此设备。传递 `device_map = 0` 意味着将整个模型放在 GPU 0 上。

    要让 Accelerate 自动计算最优化的 `device_map`,请设置 `device_map="auto"`。有关每个选项的更多信息,请参阅设计设备映射

  • max_memory (Dict, 可选) — 一个从设备标识符到最大内存的字典。如果未设置,将默认为每个 GPU 的最大可用内存和可用的 CPU RAM。
  • offload_folder (stros.PathLike, `可选`) — 如果 `device_map` 包含任何值 `"disk"`,则为我们将卸载权重的文件夹。
  • offload_index (int, `可选`) — 要传递给 `accelerate.dispatch_model` 方法的 `offload_index` 参数。
  • peft_config (dict[str, Any], 可选) — 要添加的适配器的配置,支持的适配器是非前缀调整和适应提示方法。当用户直接传递 PEFT 状态字典时使用此参数。
  • adapter_state_dict (dict[str, torch.Tensor], 可选) — 要加载的适配器的状态字典。当用户直接传递 PEFT 状态字典时使用此参数。
  • low_cpu_mem_usage (bool, 可选, 默认为 False) — 在加载 PEFT 适配器时减少内存使用。这应该也能加快加载过程。需要 PEFT 版本 0.13.0 或更高。
  • is_trainable (bool, 可选, 默认为 False) — 适配器是否应可训练。如果为 False,适配器将被冻结,只能用于推理。
  • adapter_kwargs (dict[str, Any], 可选) — 传递给适配器配置的 `from_pretrained` 方法和 `find_adapter_config_file` 方法的其他关键字参数。

从文件或远程 Hub 文件夹加载适配器权重。如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

需要 peft 作为后端来加载适配器权重。

add_adapter

< >

( adapter_config adapter_name: typing.Optional[str] = None )

参数

  • adapter_config (~peft.PeftConfig) — 要添加的适配器的配置,支持的适配器是非前缀调整和适应提示方法
  • adapter_name (str, 可选, 默认为 "default") — 要添加的适配器的名称。如果未传递名称,则会为适配器分配一个默认名称。

如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

为当前模型添加一个全新的适配器用于训练。如果未传递适配器名称,则会为适配器分配一个默认名称,以遵循 PEFT 库的约定(在 PEFT 中,我们使用“default”作为默认适配器名称)。

set_adapter

< >

( adapter_name: typing.Union[list[str], str] )

参数

  • adapter_name (Union[list[str], str]) — 要设置的适配器的名称。也可以是一个字符串列表,用于设置多个适配器。

如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

通过强制模型使用指定的适配器并禁用其他适配器来设置特定适配器。

disable_adapters

< >

( )

如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

禁用附加到模型的所有适配器。这会导致仅使用基础模型进行推理。

enable_adapters

< >

( )

如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

启用附加到模型的适配器。

active_adapters

< >

( )

如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

获取模型当前活动的适配器。在多适配器推理(组合多个适配器进行推理)的情况下,返回所有活动适配器的列表,以便用户可以相应地处理它们。

对于旧版 PEFT(不支持多适配器推理),`module.active_adapter` 将返回单个字符串。

get_adapter_state_dict

< >

( adapter_name: typing.Optional[str] = None state_dict: typing.Optional[dict] = None )

参数

  • adapter_name (str, 可选) — 要从中获取状态字典的适配器的名称。如果未传递名称,则使用活动的适配器。
  • state_dict (torch.Tensor 的嵌套字典, 可选) — 模型的状态字典。将默认为 `self.state_dict()`,但如果恢复模型的状态字典时需要采取特殊预防措施(如使用模型并行时),可以使用此参数。

如果您不熟悉适配器和 PEFT 方法,我们邀请您阅读 PEFT 官方文档:https://huggingface.co/docs/peft

获取适配器状态字典,该字典应仅包含指定 adapter_name 适配器的权重张量。如果未传递 adapter_name,则使用活动的适配器。

< > 在 GitHub 上更新