调音器
调音器(或适配器)是一个模块,可以插入到 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]]
) — 配置适配器对象,它应当是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:一个私有辅助方法,用于检查传递的模块的键名是否与适配器配置中的任何目标模块匹配。
最简单的做法是查看 peft.tuners.lora.LoraModel
类中的做法。
立即禁用所有适配器。
启用所有当前的适配器
获取模型配置
< 源代码 >( 模型: nn.Module )
此方法以字典形式从模型中获取配置。如果模型没有属性配置,则此方法返回一个默认配置。
创建适配器层,并用适配器层替换目标模块。如果传递了非提示式调优适配器类,peft.mapping.get_peft_model
将在后台调用此方法。
相对应的 PEFT 配置将直接从 BaseTuner 类的 peft_config
属性中检索。
merge_adapter
< 源代码 > ( adapter_names: 可选[str] 列表 = 无 )
此方法将适配器层合并到基本模型中。
合并适配器可以提高前向传递的速度。适配器权重的副本仍保存在内存中,这对于取消合并适配器是必需的。为了合并适配器权重而不将它们保存在内存中,请调用 merge_and_unload
。
此方法取消合并基本模型中的所有已合并的适配器层。
BaseTunerLayer
提供了与所有调谐器共用的通用方法和属性的调谐器图层混合。
从该层删除适配器
应该对所有适配器层执行此操作,否则我们将得到不一致的状态。
此方法还将设定一个新的活动适配器,如果删除的适配器是一个活动适配器。重要的是以一种确定性的方式来选择新的适配器,以便在所有层上选择相同的适配器。
切换启用和禁用适配器
负责设置适配器权重的requires_grad标志。
set_adapter
< 源代码 > ( adapter_names: str | list[str] )
设置有效的适配器。
此外,此函数会将指定的适配器设置成可训练(即 requires_grad=True)。如不希望这样做,请使用以下代码。