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 state_dict: Optional[dict[str, torch.Tensor]] = None )

参数

  • model (torch.nn.Module) — 将要附加适配器微调器层的模型。
  • forward (Callable) — 模型的前向方法。
  • peft_config (Union[PeftConfig, dict[str, PeftConfig]]) — 适配器配置对象,它应该是一个从 `str` 到 `PeftConfig` 对象的字典。也可以传递一个 PeftConfig 对象,此时将使用默认名称 `adapter` 创建一个新的适配器,或者创建一个以 `adapter_name` 为键、以该 peft 配置为值的新字典。
  • config (dict[str, Any]) — 模型配置对象,它应该是一个从 `str` 到 `Any` 对象的字典。
  • targeted_module_names (list[str]) — 实际被适配的模块名称列表。可用于快速检查 `config.target_modules` 是否被正确指定。
  • targeted_parameter_names (list[str]) — 实际被适配的参数名称列表。可用于快速检查 `config.target_parameters` 是否被正确指定。

一个基础微调器模型,为所有可注入到 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 state_dict: Optional[dict[str, torch.Tensor]] = None )

参数

  • model (nn.Module) — 要被微调的模型。
  • adapter_name (str) — 适配器名称。
  • autocast_adapter_dtype (bool, *可选*) — 是否自动转换适配器的数据类型。默认为 `True`。
  • low_cpu_mem_usage (bool, `可选`, 默认为 `False`) — 在元设备上创建空的适配器权重。有助于加快加载过程。
  • state_dict (dict, *可选*, 默认为 `None`) — 如果在此处传递了 state_dict,将根据 state_dict 的条目注入适配器。当 PEFT 方法的确切 `target_modules` 未知时(例如,因为检查点是在没有元数据的情况下创建的),这可能很有用。请注意,state_dict 中的值不被使用,只使用键来确定应该被适配的正确层。

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

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

merge_adapter

< >

( adapter_names: Optional[list[str]] = None safe_merge: bool = False )

参数

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

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

合并适配器可以加速前向传播。适配器权重的副本仍保留在内存中,这是取消合并适配器所必需的。为了合并适配器权重而不将其保留在内存中,请调用 `merge_and_unload`。

unmerge_adapter

< >

( )

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

BaseTunerLayer

class peft.tuners.tuners_utils.BaseTunerLayer

< >

( )

参数

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

一个为所有微调器提供通用方法和属性的微调器层混合类(mixin)。

delete_adapter

< >

( adapter_name: str )

参数

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

从层中删除一个适配器

此操作应在所有适配器层上调用,否则会导致状态不一致。

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

enable_adapters

< >

( enabled: bool )

参数

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

切换适配器的启用和禁用状态

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

get_base_layer

< >

( )

(递归地)获取 base_layer。

这对于微调器层包装另一个微调器层的情况是必需的。

set_adapter

< >

( adapter_names: str | list[str] )

参数

  • adapter_name (str or List[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 上更新