PEFT 文档

调谐器

Hugging Face's logo
加入 Hugging Face 社区

并访问增强文档体验

即可开始

调音器

调音器(或适配器)是一个模块,可以插入到 torch.nn.Module 中。BaseTuner 基类用于其他调音器,并为准备适配器配置和使用适配器模块替换目标模块提供共享方法和属性。BaseTunerLayer 是适配器层的基类。它提供管理适配器(例如激活和禁用适配器)的方法和属性。

BaseTuner

peft.tuners.tuners_utils.BaseTuner

< >

( model peft_config: Union[PeftConfig, dict[str, PeftConfig]] adapter_name: str low_cpu_mem_usage: bool = False )

参数

  • model (torch.nn.Module) - 将适配器调谐器层附加到的模型。
  • forward (Callable) - 模型的前向方法。
  • peft_config (Union[PeftConfig, dict[str, PeftConfig]]) — 配置适配器对象,它应当是 strPeftConfig 对象的字典。还可以传递 PeftConfig 对象,并且将创建具有默认名称 adapter 的新适配器,或者使用键 adapter_name 创建一个新字典和该 peft 配置的值。
  • config (dict[str, Any]) — 模型配置对象,它应当是 strAny 对象的字典。
  • targeted_module_names (list[str]) — 目标模块名称的列表,已实际适配。如果你想快速进行二次检查以确保 config.target_modules 已正确指定,这会非常有用。

为所有可注入到 torch.nn.Module 中的调谐器提供公共方法和属性的基本调谐器模型

要在增加一个新的 Tuner 类,需要覆写以下方法

  • _prepare_adapter_config:一个私有方法,以便最终准备适配器配置,例如,在字段 target_modules 缺失的情况下。
  • _create_and_replace:一个私有方法,用于创建目标模块并将其替换为适配器模块。
  • _check_target_module_exists:一个私有辅助方法,用于检查传递的模块的键名是否与适配器配置中的任何目标模块匹配。

最简单的做法是查看 peft.tuners.lora.LoraModel 类中的做法。

disable_adapter_layers

< >

( )

立即禁用所有适配器。

enable_adapter_layers

< >

( )

启用所有当前的适配器

获取模型配置

< >

( 模型: nn.Module )

参数

  • model (nn.Module) - 要从中获取配置的模型。
  • default (dict|None, 可选) - 如果模型没有 config 属性,则返回什么。

此方法以字典形式从模型中获取配置。如果模型没有属性配置,则此方法返回一个默认配置。

inject_adapter

  • 模型 (nn.Module) — 要微调的模型。
  • adapter_name (str) — 适配器名称。
  • autocast_adapter_dtype (bool可选) — 是否自动转换适配器数据类型。默认为 True
  • low_cpu_mem_usage (bool可选,默认为 False) — 在元设备上创建适配器权重。有助于加快加载过程。

创建适配器层,并用适配器层替换目标模块。如果传递了非提示式调优适配器类,peft.mapping.get_peft_model 将在后台调用此方法。

相对应的 PEFT 配置将直接从 BaseTuner 类的 peft_config 属性中检索。

merge_adapter

< >

( adapter_names: 可选[str] 列表 = 无 )

参数

  • safe_merge布尔可选)—如为 True,合并操作将在原始权重的副本中执行,并在合并权重之前检查 NaN。如果你想检查合并操作是否将产生 NaN,这很有用。默认为 False
  • adapter_names (list[str], 可选) — 应该合并的适配器名称列表。如果为 None,将合并所有激活的适配器。默认为 None

此方法将适配器层合并到基本模型中。

合并适配器可以提高前向传递的速度。适配器权重的副本仍保存在内存中,这对于取消合并适配器是必需的。为了合并适配器权重而不将它们保存在内存中,请调用 merge_and_unload

取消合并适配器

< >

( )

此方法取消合并基本模型中的所有已合并的适配器层。

BaseTunerLayer

类型 peft.tuners.tuners_utils.BaseTunerLayer

< >

( )

参数

  • active_adapters (Union[Liststr, str], optional) — 活跃适配器的名称。

提供了与所有调谐器共用的通用方法和属性的调谐器图层混合。

delete_adapter

< >

( adapter_name: str )

参数

  • adapter_name (str) — 要删除的适配器的名称

从该层删除适配器

应该对所有适配器层执行此操作,否则我们将得到不一致的状态。

此方法还将设定一个新的活动适配器,如果删除的适配器是一个活动适配器。重要的是以一种确定性的方式来选择新的适配器,以便在所有层上选择相同的适配器。

enable_adapters

< >

( enabled: bool )

参数

  • enabled (布尔值) — True 表示启用适配器,False 表示禁用适配器

切换启用和禁用适配器

负责设置适配器权重的requires_grad标志。

get_base_layer

< >

( )

(递归) 获取 base_layer。

在 tuner 层封装另一 tuner 层的情况下,这是必需的。

set_adapter

< >

( adapter_names: str | list[str] )

参数

  • adapter_name (strList[str]) — 要激活的适配器的名称。

设置有效的适配器。

此外,此函数会将指定的适配器设置成可训练(即 requires_grad=True)。如不希望这样做,请使用以下代码。

>>> for name, param in model_peft.named_parameters():
...     if ...:  # some check on name (ex. if 'lora' in name)
...         param.requires_grad = False
< > GitHub 上进行更新