适配器实现
以下类定义了所有适配器方法的通用接口。 它们还包含所有适配器实现共享的逻辑。 所有新添加的适配器方法都应从这些类之一继承。
- class adapters.AdapterLayerBase
所有需要逐层模块的自适应方法的基础类。
确保在派生类中重写 'adapter_modules_name' 属性。
- abstract add_adapter(adapter_name: str, layer_idx: int) bool
向该层添加一个新的适配器模块。
- Parameters
adapter_name (str) – 要添加的新适配器的名称。
layer_idx (int) – 适配器层的索引(应在首次添加适配器时设置一次并保持固定)。
- Returns
如果适配器已添加则为True,否则为False。
- Return type
布尔值
- average_adapter(adapter_name: str, input_adapters: Dict[str, float], combine_strategy, **kwargs) bool
将一组适配器模块平均合并为一个新的适配器模块。
- Parameters
adapter_name (str) – 要添加的新(平均)适配器模块的名称。
input_adapters (Dict[str, float]) - 适配器名称及其对应权重的字典。
combine_strategy (str) – The strategy to combine the adapters. Available strategies depend on the used adapter method, see: https://docs.adapterhub.ml/adapter_composition.html#merging-adapters
**kwargs – 特定于combine_strategy的额外参数。例如,LoRA的svd_rank。
- Returns
如果适配器已添加则为True,否则为False。
- Return type
布尔值
- delete_adapter(adapter_name: str)
从层中删除一个适配器模块。
- Parameters
adapter_name (str) – 要删除的适配器名称。
- enable_adapters(adapter_setup: AdapterCompositionBlock, unfreeze_adapters: bool, unfreeze_fusion: bool)
启用/禁用层内的一组适配器模块。
- Parameters
adapter_setup (AdapterCompositionBlock) – 用于启用/禁用的适配器设置。
unfreeze_adapters (bool) – 是否解冻适配器。
- freeze_adapter(adapter_name: str, freeze: bool = True)
冻结/解冻一个适配器模块。
- Parameters
adapter_name (str) – 要冻结/解冻的适配器名称。
freeze (bool, optional) – 是否冻结适配器。默认为True。
- get_adapter(adapter_name: str) Module
返回具有给定名称的适配器模块。
- Parameters
adapter_name (str) – 适配器模块的名称。
- pre_save_adapters()
在将适配器保存到磁盘之前调用。
- class adapters.ComposableAdapterLayerBase(*args, **kwargs)
支持组合的所有适配器方法的基类。
确保在派生类中重写 'adapter_modules_name' 和 'supported_compositions' 属性以及所有抽象方法。可以将 'allow_multi_parallelize' 设置为 True,以允许输入被多次独立并行化。当存在多个通过适配器层的并行输入流时(例如在LoRA中),这非常有用。
- check_composition_valid(parent: AdapterCompositionBlock, child: AdapterCompositionBlock, lvl: int)
检查给定的组合是否有效。
- Parameters
parent (AdapterCompositionBlock) – 父级组合块。
child (AdapterCompositionBlock) – 子组合块。
lvl (int) – 组合深度。
- Raises
ValueError – 如果组合无效。
- compose(adapter_setup: Union[AdapterCompositionBlock, str], state: NamedTuple) NamedTuple
递归调用组合块前向方法的主要组合前向方法。 该方法应由派生类的前向方法调用。
- Parameters
adapter_setup (Union[AdapterCompositionBlock, str]) – 要使用的适配器设置。
state (NamedTuple) – 当前状态。
- Returns
通过适配器设置转发后的状态。
- Return type
NamedTuple
- compose_average(adapter_setup: Average, state: NamedTuple, lvl: int = 0)
用于平均多个适配器的输出表示。
- compose_batch_split(adapter_setup: BatchSplit, state: NamedTuple, lvl: int = 0)
用于沿批次大小维度分割为多个适配器。
- compose_fuse(adapter_setup: Fuse, state: NamedTuple, lvl: int = 0)
用于通过adapter融合来融合多个适配器。注意:此方法没有默认实现。
- compose_multi_task(adapter_setup: MultiTask, state: NamedTuple, lvl: int = 0)
用于根据task_ids拆分为多个适配器。
- compose_parallel(adapter_setup: Parallel, state: NamedTuple, lvl: int = 0)
用于在同一输入上并行执行适配器。这意味着在将输入馈送到适配器之前会重复N次(其中N是适配器的数量)。
- abstract compose_single(adapter_setup: str, state: NamedTuple, lvl: int = 0) NamedTuple
通过给定的单个适配器转发给定状态。
- Parameters
adapter_setup (str) – 适配器的名称。
state (NamedTuple) – 需要转发的状态。
lvl (int, optional) – 组合深度。默认为0。
- Returns
通过适配器转发后的状态。
- Return type
命名元组
- compose_split(adapter_setup: Split, state: NamedTuple, lvl: int = 0)
用于沿序列长度维度分割为多个适配器。注意:此方法没有默认实现。
- compose_stack(adapter_setup: Stack, state: NamedTuple, lvl: int = 0) NamedTuple
用于顺序堆叠多个适配器。
- abstract mean(states: List[NamedTuple], weights: Tensor) NamedTuple
根据给定的权重沿批次大小维度对状态进行平均。例如,Average组合块会使用此功能。重要提示:所有派生类都必须实现此功能。
- Parameters
states (List[NamedTuple]) – 需要求平均值的状态列表。
weights (torch.Tensor) – 平均权重值。
- Returns
平均状态。
- Return type
NamedTuple
- abstract pad_and_concat(states: List[NamedTuple]) NamedTuple
将给定的状态沿批次大小维度进行拼接。如有必要,在拼接前会对状态进行填充。例如,BatchSplit和Parallel组合块会使用此功能。重要提示:所有派生类都必须实现此功能。
- Parameters
states (List[NamedTuple]) – 需要连接的状态列表。
- Returns
连接后的状态。
- Return type
命名元组
- pre_block(adapter_setup: Union[AdapterCompositionBlock, str], state: NamedTuple) NamedTuple
可选的状态预处理方法,该方法在将状态传递给组合的第一个子块之前调用。默认情况下,此方法不包含任何逻辑。例如,用于瓶颈适配器以实现残差和层归一化(LN)。
- Parameters
adapter_setup (Union[AdapterCompositionBlock, str]) – 当前的组合或单一适配器。
state (NamedTuple) – 当前状态。
- Returns
预处理后的状态。
- Return type
命名元组
- abstract repeat(state: NamedTuple, channels: int) NamedTuple
将给定状态沿批次大小维度重复指定次数。 例如,并行组合块会使用此功能。重要提示:所有派生类都必须实现此功能。
- Parameters
state (NamedTuple) – 需要重复的状态。
channels (int) – 状态应被重复的次数。
- Returns
重复的状态。
- Return type
NamedTuple
- abstract vslice(state: NamedTuple, slice_obj: slice) NamedTuple
沿批次大小(垂直)维度对给定状态进行切片。例如,BatchSplit和Parallel组合块会使用此功能。重要提示:所有派生类都必须实现此功能。
- Parameters
state (NamedTuple) – 需要切片的状态。
slice_obj (slice) – 切片对象。
- Returns
切片状态。
- Return type
NamedTuple