PEFT 文档

调谐器

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

调谐器

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

BaseTuner

class 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) — 模型的 forward 方法。
  • 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:一个私有辅助方法,用于检查传递的模块的键名是否与 adapter_config 中的任何目标模块匹配。

最简单的方法是检查在 peft.tuners.lora.LoraModel 类中完成的操作。

disable_adapter_layers

< >

( )

就地禁用所有适配器。

enable_adapter_layers

< >

( )

就地启用所有适配器

get_model_config

< >

( model: nn.Module )

参数

  • model (nn.Module) — 从模型获取配置。
  • default (dict|None, 可选) —: 如果模型没有 config 属性,则返回的内容。

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

inject_adapter

< >

( model: nn.Module adapter_name: str autocast_adapter_dtype: bool = True low_cpu_mem_usage: bool = False )

参数

  • model (nn.Module) — 要调优的模型。
  • adapter_name (str) — 适配器名称。
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器 dtype。 默认为 True
  • low_cpu_mem_usage (bool, optional, 默认为 False) — 在 meta 设备上创建空的适配器权重。这对于加速加载过程很有用。

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

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

merge_adapter

< >

( adapter_names: Optional[list[str]] = None )

参数

  • safe_merge (booloptional) — 如果为 True,合并操作将在原始权重的副本中执行,并在合并权重之前检查 NaNs。如果您想检查合并操作是否会产生 NaNs,这将非常有用。默认为 False
  • adapter_names (list[str]optional) — 应该合并的适配器名称列表。如果为 None,则将合并所有活动的适配器。默认为 None

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

合并适配器可以加快前向传播的速度。适配器权重的副本仍然保存在内存中,这是取消合并适配器所必需的。为了在不将适配器权重保存在内存中的情况下合并它们,请调用 merge_and_unload

unmerge_adapter

< >

( )

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

BaseTunerLayer

class peft.tuners.tuners_utils.BaseTunerLayer

< >

( )

参数

  • is_pluggable (booloptional) — 适配器层是否可以插入到任何 pytorch 模块
  • active_adapters (Union[Liststr, str],optional) — 活动适配器的名称。

一个 tuner 层 mixin,为所有 tuner 提供通用方法和属性。

delete_adapter

< >

( adapter_name: str )

参数

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

从层中删除适配器

应该在所有适配器层上调用此方法,否则我们将得到不一致的状态。

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

enable_adapters

< >

( enabled: bool )

参数

  • enabled (bool) — 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 上更新