speechbrain.nnet.adapters 模块
SpeechBrain 实现了各种预训练模型适配器,例如 LoRA、Houlsby
- Authors
Titouan Parcollet 2024
彼得·普兰廷加 2024
摘要
类:
给定任何torch模型,例如asr_brain.modules.Transformer,以及一个适配器类,例如HoulsbyAdapter,此类将用这个新的适配器类替换目标层(同时保留参数)。 |
|
该类实现了Houlsby适配器,如以下文献所述:'Parameter-Efficient Transfer Learning for NLP' https://arxiv.org/abs/1902.00751 |
|
该类实现了LoRA适配器,如论文中所述:'LoRA: 大型语言模型的低秩适应' https://arxiv.org/abs/2106.09685 |
函数:
检查层是否在需要适配的层列表中。 |
|
基于父分配用新模块替换层。 |
参考
- class speechbrain.nnet.adapters.AdaptedModel(model_to_adapt: Module, adapter_class: Module, all_linear: bool = False, all_conv: bool = False, target_layers: list = [], unfrozen_layers: list = [], adapter_kwargs: dict = {}, manual_adapter_insertion: bool = False)[source]
基础:
Module给定任何torch模型,例如asr_brain.modules.Transformer,以及一个适配器类,例如HoulsbyAdapter,该类将用这个新的适配器类替换目标层(同时保留参数)。
- Parameters:
model_to_adapt (nn.Module) – 要添加适配器的基本PyTorch模型。
adapter_class (class) – 这个SpeechBrain库的(未初始化的)适配器。
all_linear (bool) – 是否将适配器添加到所有线性层(默认值:False)
all_conv (bool) – 是否将适配器添加到所有卷积层(默认值:False)
target_layers (list of str) – 应该被替换的给定模型中的模块名称列表。 支持Unix shell风格的通配符
(*, ?, [seq], [!seq])与fnmatch。unfrozen_layers (list of str) – 训练期间要解冻的层列表。 支持Unix shell风格的通配符
(*, ?, [seq], [!seq])与fnmatch。adapter_kwargs (dict) – 应该传递给适配器的参数集合。
manual_adapter_insertion (bool) – 默认值 (
False) 会导致适配器在初始化时被插入。然而,在某些情况下,最好等待插入适配器,例如当需要加载预训练参数时。在这种情况下,可以将其设置为True并在加载参数后手动调用insert_adapters。
Example
>>> from collections import OrderedDict >>> model = torch.nn.Sequential( ... OrderedDict([ ... ("layer1", torch.nn.Linear(10, 20)), ... ("layer2", torch.nn.Linear(20, 20)), ... ("layer3", torch.nn.Linear(20, 10)), ... ]) ... ) >>> lora_model = AdaptedModel( ... model_to_adapt=model, ... adapter_class=LoRA, ... target_layers=["layer[13]"], ... unfrozen_layers=["layer2"], ... adapter_kwargs={"rank": 2}, ... ) >>> lora_model AdaptedModel( (adapted_model): Sequential( (layer1): LoRA( (pretrained_module): Linear(in_features=10, out_features=20, bias=True) (adapter_down_proj): Linear(in_features=10, out_features=2, bias=False) (adapter_up_proj): Linear(in_features=2, out_features=20, bias=False) ) (layer2): Linear(in_features=20, out_features=20, bias=True) (layer3): LoRA( (pretrained_module): Linear(in_features=20, out_features=10, bias=True) (adapter_down_proj): Linear(in_features=20, out_features=2, bias=False) (adapter_up_proj): Linear(in_features=2, out_features=10, bias=False) ) ) )
- speechbrain.nnet.adapters.is_layer_adaptable(name, module, all_linear, all_conv, target_layers)[source]
检查层是否在需要调整的层列表中。
- speechbrain.nnet.adapters.replace_module(model: Module, name: str, new_module: Module)[source]
基于父分配替换层为一个新模块。 这用于将层替换为围绕原始层的适配器层。因此,旧参数被保留,新参数被添加。
- Parameters:
模型 (nn.Module) – 包含要替换模块的模型。
name (str) – 要替换的目标模块的名称。
new_module (nn.Module) – 由旧模块和新参数组成的新模块。
- class speechbrain.nnet.adapters.HoulsbyAdapterLinear(target_linear, projection_size, activation=<class 'speechbrain.nnet.activations.Swish'>, bias=True)[source]
基础:
Module该类实现了Houlsby适配器,如以下文献所述: ‘参数高效的自然语言处理迁移学习’ https://arxiv.org/abs/1902.00751
- Parameters:
Example
>>> import torch >>> x = torch.rand((8, 60, 64)) >>> base_linear = nn.Linear(64, 64) >>> adapt = HoulsbyAdapterLinear(base_linear, 8) >>> output = adapt(x) >>> output.shape torch.Size([8, 60, 64])
- class speechbrain.nnet.adapters.LoRA(target_module, rank=16, alpha=1.0)[source]
基础:
Module该类实现了LoRA适配器,如以下文献所述: ‘LoRA: 大型语言模型的低秩适应’ https://arxiv.org/abs/2106.09685
- Parameters:
Example
>>> import torch >>> x = torch.rand((8, 60, 64)) >>> base_linear = nn.Linear(64, 64) >>> adapt = LoRA(base_linear, 64, 4) >>> output = adapt(x) >>> output.shape torch.Size([8, 60, 64])