PEFT 文档
调谐器
并获得增强的文档体验
开始使用
调谐器
调谐器(或适配器)是可以插入 torch.nn.Module
的模块。 BaseTuner
是其他调谐器的基类,并提供共享方法和属性,用于准备适配器配置以及用适配器模块替换目标模块。 BaseTunerLayer
是适配器层的基类。 它提供了用于管理适配器的方法和属性,例如激活和禁用适配器。
BaseTuner
class peft.tuners.tuners_utils.BaseTuner
< source >( 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]]
) — 适配器配置对象,它应该是一个从str
到PeftConfig
对象的字典。 也可以传递一个 PeftConfig 对象,并将使用默认名称adapter
创建一个新的适配器,或者创建一个以adapter_name
为键和 peft 配置值为值的新字典。 - config (
dict[str, Any]
) — 模型配置对象,它应该是一个从str
到Any
对象的字典。 - 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
类中完成的操作。
就地禁用所有适配器。
就地启用所有适配器
get_model_config
< source >( model: nn.Module )
此方法以字典形式从模型获取配置。 如果模型没有 config 属性,则此方法返回默认配置。
inject_adapter
< source >( model: 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
< source >( adapter_names: Optional[list[str]] = None )
此方法将适配器层合并到基础模型中。
合并适配器可以加快前向传播的速度。适配器权重的副本仍然保存在内存中,这是取消合并适配器所必需的。为了在不将适配器权重保存在内存中的情况下合并它们,请调用 merge_and_unload
。
此方法从基础模型中取消合并所有已合并的适配器层。
BaseTunerLayer
class peft.tuners.tuners_utils.BaseTunerLayer
< source >( )
一个 tuner 层 mixin,为所有 tuner 提供通用方法和属性。
从层中删除适配器
应该在所有适配器层上调用此方法,否则我们将得到不一致的状态。
如果删除的适配器是活动适配器,则此方法还将设置一个新的活动适配器。重要的是,新适配器的选择方式必须是确定性的,以便在所有层上选择相同的适配器。
切换适配器的启用和禁用
负责设置适配器权重的 requires_grad 标志。
set_adapter
< source >( adapter_names: str | list[str] )
设置活动适配器。
此外,此函数会将指定的适配器设置为可训练的(即,requires_grad=True)。如果不需要这样做,请使用以下代码。