适配器实现

以下类定义了所有适配器方法的通用接口。 它们还包含所有适配器实现共享的逻辑。 所有新添加的适配器方法都应从这些类之一继承。

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