Transformers 文档
PEFT
并获取增强的文档体验
开始使用
PEFT
PeftAdapterMixin 提供来自 PEFT 库的函数,用于管理 Transformers 的适配器。此 mixin 目前支持 LoRA、IA3 和 AdaLora。前缀调优方法(提示调优、提示学习)不受支持,因为它们无法注入到 torch 模块中。
一个类,包含所有用于加载和使用 PEFT 库中支持的适配器权重的函数。有关适配器以及在基于 Transformer 的模型上注入适配器的更多详细信息,请查看 PEFT 库的文档: https://huggingface.co/docs/peft/index
目前支持的 PEFT 方法均为非前缀调优方法。以下是任何人都可以使用此 mixin 类加载、训练和运行的支持的 PEFT 方法列表
- 低秩适配器 (LoRA): https://huggingface.co/docs/peft/conceptual_guides/lora
- IA3: https://huggingface.co/docs/peft/conceptual_guides/ia3
- AdaLora: https://arxiv.org/abs/2303.10512
其他 PEFT 模型,例如提示调优、提示学习不在本范围之内,因为这些适配器不可“注入”到 torch 模块中。要使用这些方法,请参阅 PEFT 库的使用指南。
使用此 mixin,如果安装了正确的 PEFT 版本,则可以
- 加载存储在本地路径或远程 Hub 存储库中的适配器,并将其注入到模型中
- 在模型中附加新适配器,并使用 Trainer 或您自己的方法训练它们。
- 附加多个适配器并迭代激活/停用它们
- 激活/停用模型中的所有适配器。
- 获取活动适配器的
state_dict
。
load_adapter
< source >( 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.Dict[str, typing.Any] = None adapter_state_dict: typing.Optional[typing.Dict[str, ForwardRef('torch.Tensor')]] = None low_cpu_mem_usage: bool = False is_trainable: bool = False adapter_kwargs: typing.Optional[typing.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 (
str
或Dict[str, Union[int, str, torch.device]]
或int
或torch.device
, 可选) — 指定每个子模块应放置位置的映射。它不需要细化到每个参数/缓冲区名称,一旦给定的模块名称在其中,它的每个子模块都将被发送到同一设备。如果我们只传递模型将分配到的设备(例如,"cpu"
,"cuda:1"
,"mps"
, 或 GPU 序号 rank,如1
),设备映射会将整个模型映射到此设备。传递device_map = 0
意味着将整个模型放在 GPU 0 上。要让 Accelerate 自动计算最佳
device_map
,请设置device_map="auto"
。有关每个选项的更多信息,请参阅 设计设备映射。 - max_memory (
Dict
, 可选) — 设备标识符到最大内存的字典。如果未设置,则默认为每个 GPU 的最大可用内存和可用 CPU RAM。 - offload_folder (
str
或os.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
< source >( adapter_config adapter_name: typing.Optional[str] = None )
如果您不熟悉适配器和 PEFT 方法,我们邀请您在 PEFT 官方文档中阅读更多相关信息: https://huggingface.co/docs/peft
为当前模型添加全新的适配器以进行训练。如果未传递适配器名称,则会为适配器分配默认名称,以遵循 PEFT 库的约定(在 PEFT 中,我们使用“default”作为默认适配器名称)。
set_adapter
< source >( adapter_name: typing.Union[typing.List[str], str] )
如果您不熟悉适配器和 PEFT 方法,我们邀请您在 PEFT 官方文档中阅读更多相关信息: https://huggingface.co/docs/peft
通过强制模型使用该适配器并禁用其他适配器来设置特定的适配器。
如果您不熟悉适配器和 PEFT 方法,我们邀请您在 PEFT 官方文档中阅读更多相关信息: https://huggingface.co/docs/peft
禁用所有连接到模型的适配器。这将导致仅使用基础模型进行推理。
如果您不熟悉适配器和 PEFT 方法,我们邀请您在 PEFT 官方文档中阅读更多相关信息: https://huggingface.co/docs/peft
启用连接到模型的适配器。
如果您不熟悉适配器和 PEFT 方法,我们邀请您在 PEFT 官方文档中阅读更多相关信息: https://huggingface.co/docs/peft
获取模型当前活动的适配器。在多适配器推理(组合多个适配器进行推理)的情况下,返回所有活动适配器的列表,以便用户可以相应地处理它们。
对于以前的 PEFT 版本(不支持多适配器推理),module.active_adapter
将返回单个字符串。
get_adapter_state_dict
< source >( adapter_name: typing.Optional[str] = None state_dict: typing.Optional[dict] = None )
如果您不熟悉适配器和 PEFT 方法,我们邀请您在 PEFT 官方文档中阅读更多相关信息: https://huggingface.co/docs/peft
获取适配器状态字典,该字典应仅包含指定 adapter_name 适配器的权重张量。如果未传递 adapter_name,则使用活动的适配器。