PEFT 文档

模型

Hugging Face's logo
加入Hugging Face社区

并获取增强文档体验

开始使用

模型

PeftModel 是用于指定基本 Transformer 模型以及配置应用 PEFT 方法的基类。基 PeftModel 包含从 Hub 加载和保存模型的方法。

PeftModel

class peft.PeftModel

< >

( model: PreTrainedModel peft_config: PeftConfig adapter_name: str = 'default' autocast_adapter_dtype: bool = True )

参数

  • model (PreTrainedModel) — 适用于 Peft 的基础 Transformer 模型。
  • peft_config (PeftConfig) — Peft模型的配置。
  • adapter_name (str, 可选) — 适配器的名称,默认为 "default"
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器的数据类型。默认为 true。目前这只会将适配器权重使用 float16 和 bfloat16 转换为 float32,因为这通常是稳定训练所必需的,并且仅影响选择性的 PEFT 调校器。

包含各种Peft方法的基模型。

属性:

  • base_model (torch.nn.Module) — 用于Peft的基Transformer模型。
  • peft_config (PeftConfig) — Peft模型的配置。
  • modules_to_save (str 列表) — 保存模型时保存的子模块名称列表。
  • prompt_encoder (PromptEncoder) — 如果使用 PromptLearningConfig,用于Peft的prompt编码器。
  • prompt_tokens (torch.Tensor) — 如果使用 PromptLearningConfig,用于Peft的虚拟prompt标记。
  • transformer_backbone_name (str) — 如果使用 PromptLearningConfig,基模型中Transformer骨干的名称。
  • 词嵌入 (torch.nn.Embedding) — 当使用 PromptLearningConfig 时,基模型中 transformer 骨干网络的词嵌入。

add_adapter

< >

( adapter_name: str peft_config: PeftConfig )

参数

  • adapter_name (str) — 要添加的适配器的名称。
  • peft_config (PeftConfig) — 要添加的适配器的配置。

基于传递的配置添加适配器到模型。

此适配器未经训练。要加载预训练的适配器,请查看 PeftModel.load_adapter()

新适配器的名称应为唯一的。

新适配器不会自动设置为活动适配器。使用 PeftModel.set_adapter() 来设置活动适配器。

create_or_update_model_card

< >

( output_dir: str )

更新或创建包含 peft 信息的数据卡片

  1. 添加 peft 库标签
  2. 添加 peft 版本号
  3. 添加基础模型信息
  4. 如果使用了,添加量化信息

禁用适配器

< >

( )

禁用适配器模块的上下文管理器。用于在基础模型上运行推理。

示例

>>> with model.disable_adapter():
...     model(inputs)

前向传播

< >

( *args: Any **kwargs: Any )

模型的前向传播过程。

from_pretrained

参数

  • model_id (stros.PathLike) — 要使用的 PEFT 配置名称。可以是:
    • 一个字符串,表示托管在 Hugging Face Hub 模型仓库内部 PEFT 配置的 model id
    • 一个文件夹路径,包含使用 save_pretrained 方法保存的 PEFT 配置文件(例如 ./my_peft_config_directory/)。
  • adapter_name (str,可选,默认为 "default")— 要加载的适配器名称。对于加载多个适配器很有用。
  • is_trainablebool,可选,默认为 False)— 适配器是否可训练。如果 False,适配器将被冻结,只能用于推理。
  • config (PeftConfig, optional) — 使用而不是自动加载的配置对象。此配置对象与 model_idkwargs 互斥。当在调用 from_pretrained 之前已经加载了配置时,这很有用。
  • autocast_adapter_dtype (bool, optional) — 是否自动转换适配器数据类型。默认为 True。仅对特定适配器类型相关。
  • ephemeral_gpu_offload (bool, optional) — 是否为部分加载的模块使用短暂的GPU卸载。默认为 False。当模型的部分和/或组件(如适配器)保持保留在CPU内存中直到需要它们时,这很有用。而不是在小数据上执行昂贵的操作,按需将数据传输到GPU上,执行操作(s),并将结果移回CPU内存。这会带来一定的短期VRAM开销,但在某些情况下提供了数量级的速度提升。
  • torch_device (str, 可选, 默认为 None) — 加载适配器的设备。如果为 None,则会推断设备。kwargs — (可选): 传递给特定 PEFT 配置类的附加关键字参数。

从预训练模型和已加载的 PEFT 权重实例化 PEFT 模型。

注意,传递的 model 可能会就地修改。

get_base_model

< >

( )

返回基础模型。

get_layer_status

< >

( ) listpeft.peft_model.TunerLayerStatus

参数

  • 模型 (~PeftModel) — 从中获取适配器层状态的模型。

返回

列表peft.peft_model.TunerLayerStatus

包含对应适配器层的状态的dataclass列表。

获取模型中每个适配器层的状态。

此方法返回一个TunerLayerStatus dataclass实例的列表,每个实例包含以下属性

  • name (str):适配器层的名称,例如model.encoder.block.0.layer.0.SelfAttention.q
  • module_type (str):适配器层的类型,例如lora.Linear
  • enabled (bool):适配器层是否启用。
  • active_adapters (list[str]):活动适配器的名称,如果有,例如["default"]
  • merged_adapters (list[str]):合并的适配器名称,如果有,例如["default"]
  • available_adapters (list[str]):可用的适配器名称,例如["default"]

get_model_status

< >

( ) peft.peft_model.TunerModelStatus

参数

  • 模型 (~PeftModel) — 获取适配器层状态的模型。

返回

peft.peft_model.TunerModelStatus

包含模型状态的dataclass。

获取该型号调谐器的状态。

此方法返回一个TunerModelStatus数据类实例,包含以下属性

  • base_model_type (str):基础模型的类型,例如T5Model
  • adapter_model_type (str):适配器模型的类型,例如LoraModel
  • peft_types (dict[str, str]):适配器名称与适配器类型的映射,例如{"default": "LORA"}
  • trainable_params (int):模型中可训练参数的数量。
  • total_params (int):模型中参数的总数。
  • num_adapter_layers (int):模型中适配器层的数量。
  • enabled (bool, Literal["irregular"]):是否所有适配器层都启用。如果有些启用,有些未启用,则此值为"irregular"。这意味着您的模型处于不一致的状态,可能不会按预期工作。
  • active_adapters (list[str], Literal["irregular"]):活动适配器的名称。如果活动适配器在所有层之间不一致,则此值为"irregular",这意味着您的模型处于不一致的状态,可能不会按预期工作。
  • merged_adapters (list[str], Literal["irregular"]):合并的适配器名称。如果合并的适配器在所有层之间不一致,则此值为"irregular",这意味着您的模型处于不一致的状态,可能不会按预期工作。
  • available_adapters (list[str]):可用的适配器名称,例如["default"]

get_nb_trainable_parameters

( )

返回模型中可训练参数的数量以及所有参数的数量。

get_prompt

( batch_size: int task_ids: Optional[torch.Tensor] = None )

返回用于 Peft 的虚拟提示。仅在采用提示学习方法时适用。

get_prompt_embedding_to_save

< >

( adapter_name: str )

返回保存模型时保存的提示嵌入。仅在采用提示学习方法时适用。

load_adapter

< >

( model_id: str adapter_name: str is_trainable: bool = False torch_device: Optional[str] = None autocast_adapter_dtype: bool = True ephemeral_gpu_offload: bool = False **kwargs: Any )

参数

  • adapter_name (str) — 要添加的适配器名称。
  • peft_config (PeftConfig) — 要添加的适配器的配置。
  • is_trainable (bool, 可选,默认为 False) — 适配器是否可训练。如果为 False,则适配器将被冻结,只能用于推理。
  • torch_device (str, 可选,默认为 None) — 加载适配器的设备。如果为 None,将自动推断设备。
  • autocast_adapter_dtype (bool, optional, defaults to True) — 是否自动转换单位数。默认值为 True。当前情况下,这只会将适配器权重使用 float16 和 bfloat16 转换为 float32,因为这在稳定训练中通常是必需的,并且只影响selected PEFT微调器。
  • ephemeral_gpu_offload (bool, optional, defaults to False) — 是否为部分加载的模块使用短暂的GPU卸载。默认值为 False。kwargs — (optional): 用于修改适配器加载方式的其他参数,例如 Hugging Face Hub 的token。

将训练好的适配器加载到模型中。

新适配器的名称应为唯一的。

新适配器不会自动设置为活动适配器。使用 PeftModel.set_adapter() 来设置活动适配器。

打印可训练参数数量

< >

( )

打印模型中的可训练参数数量。

注意:print_trainable_parameters() 使用 get_nb_trainable_parameters(),这与 huggingface/transformers 中的 num_parameters(only_trainable=True) 不同。get_nb_trainable_parameters() 返回 Peft 模型的 (可训练参数,所有参数),包括修改后的骨干 transformer 模型。对于像 LoRA 这样的技术,修改后的骨干 transformer 模型通过 LoRA 模块就地修改。然而,对于提示微调,骨干 transformer 模型未修改。num_parameters(only_trainable=True) 返回骨干 transformer 模型的可训练参数数量,这可能是不同的。

存储预训练的

< >

( save_directory: str safe_serialization: bool = True selected_adapters: Optional[list[str]] = None save_embedding_layers: Union[str, bool] = 'auto' is_main_process: bool = True convert_pissa_to_lora: Optional[str] = None path_initial_model_for_weight_conversion: Optional[str] = None **kwargs: Any )

参数

  • save_directory (str) - 保存适配器模型和配置文件的目录(如果不存在则创建)。
  • safe_serializationbool可选)—— 是否以safetensors格式保存适配器文件,默认为True
  • selected_adaptersList[str]可选)—— 要保存的适配器列表。如果为None,则默认为所有适配器。
  • save_embedding_layersUnion[bool, str]可选,默认为"auto")—— 如果为True,除了适配器权重外,还会保存嵌入层。如果为auto,会检查配置文件中的target_modules中的公共嵌入层peft.utils.other.EMBEDDING_LAYER_NAMES并自动设置布尔标志。这仅适用于🤗 transformers模型。
  • is_main_process (bool, 可选) — 调用此方法的进程是否为主进程。默认为 True。不在主进程上时不会保存检查点,对多设备设置(例如DDP)很重要。
  • convert_pissa_to_lora (str, *可选*) — 已弃用。请使用 path_initial_model_for_weight_conversion 代替。
  • path_initial_model_for_weight_conversion (str, *可选*) — 初始化适配器路径,在用 PiSSA 或 OLoRA 初始化模型并在任何训练之前获得。当 path_initial_model_for_weight_conversion 不是 None 时,计算精细调整前后适配器的差异。这个差异可以用LoRA适配器的参数表示。使用此转换适配器不需要更改基本模型,因此方便地允许使用多个 PiSSA 或 OLoRA 适配器与LoRA适配器一起使用,以及激活或停用任何适配器。注意,如果结合使用 rslorarank_patternalpha_pattern,则不支持此转换。
  • kwargs (附加关键字参数,可选) — 传递给 push_to_hub 方法的附加关键字参数。

此函数将适配器模型和适配器配置文件保存到目录中,以便可以使用 PeftModel.from_pretrained() 类方法重新加载,并且也可以由 PeftModel.push_to_hub() 方法使用。

set_adapter

< >

( adapter_name: str )

参数

  • adapter_name (str) — 设置为活动的适配器名称。适配器必须先加载。

设置活动适配器。

同一时间只能有一个活动的适配器。

此外,此函数将指定的适配器设置为可训练的(即,requires_grad=True)。如果不希望这样做,请使用以下代码。

>>> for name, param in model_peft.named_parameters():
...     if ...:  # some check on name (ex. if 'lora' in name)
...         param.requires_grad = False

PeftModelForSequenceClassification

为序列分类任务设计的 PeftModel

peft.PeftModelForSequenceClassification

< >

( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )

参数

  • model (PreTrainedModel) — 基础转换器模型。
  • peft_config (PeftConfig) — Peft 配置
  • adapter_name (str, 可选) — 适配器的名称,默认为 "default"
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器数据类型。默认为 True。目前,这只会将适配器权重转换为 float16 和 bfloat16,因为这在稳定训练中通常是必需的,并且仅影响部分 PEFT 调谐器。

用于序列分类任务的 Peft 模型。

属性:

  • config (PretrainedConfig) — 基础模型的配置对象。
  • cls_layer_name (str) — 分类层的名称。

示例

>>> from transformers import AutoModelForSequenceClassification
>>> from peft import PeftModelForSequenceClassification, get_peft_config

>>> config = {
...     "peft_type": "PREFIX_TUNING",
...     "task_type": "SEQ_CLS",
...     "inference_mode": False,
...     "num_virtual_tokens": 20,
...     "token_dim": 768,
...     "num_transformer_submodules": 1,
...     "num_attention_heads": 12,
...     "num_layers": 12,
...     "encoder_hidden_size": 768,
...     "prefix_projection": False,
...     "postprocess_past_key_value_function": None,
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForSequenceClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117

PeftModelForTokenClassification

用于标记分类任务的 PeftModel

peft.PeftModelForTokenClassification

< >

model: torch.nn.Module peft_config: PeftConfig = None adapter_name: str = 'default' **kwargs

参数

  • model预训练模型) — 基础变换器模型。
  • peft_config (PeftConfig) — Peft 配置。
  • adapter_name (str, 可选) — 适配器名称,默认为 "default"
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器数据类型。默认为 True。目前,这只会将适配器权重使用 float16 和 bfloat16 转换为 float32,因为这对于稳定训练通常是必需的,并且仅影响选择 PEFT 调节器。

用于标记分类任务的 Peft 模型。

属性:

  • config (PretrainedConfig) — 基础模型的配置对象。
  • cls_layer_name (str) — 分类层的名称。

示例

>>> from transformers import AutoModelForSequenceClassification
>>> from peft import PeftModelForTokenClassification, get_peft_config

>>> config = {
...     "peft_type": "PREFIX_TUNING",
...     "task_type": "TOKEN_CLS",
...     "inference_mode": False,
...     "num_virtual_tokens": 20,
...     "token_dim": 768,
...     "num_transformer_submodules": 1,
...     "num_attention_heads": 12,
...     "num_layers": 12,
...     "encoder_hidden_size": 768,
...     "prefix_projection": False,
...     "postprocess_past_key_value_function": None,
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForTokenClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForTokenClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117

PeftModelForCausalLM

用于因果语言模型的 PeftModel

peft.PeftModelForCausalLM

< >

( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )

参数

  • model (预训练模型) — 基础变换模型。
  • peft_config (Peft配置) — Peft配置。
  • adapter_name (str, 可选) — 适配器的名称,默认为 "default"
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器数据类型。默认为 True。目前,这只会将适配器权重使用 float16 和 bfloat16 转换为 float32,因为这通常对稳定训练是必需的,且仅影响选择 PEFT 微调器。

因果语言模型的 Peft 模型。

示例

>>> from transformers import AutoModelForCausalLM
>>> from peft import PeftModelForCausalLM, get_peft_config

>>> config = {
...     "peft_type": "PREFIX_TUNING",
...     "task_type": "CAUSAL_LM",
...     "inference_mode": False,
...     "num_virtual_tokens": 20,
...     "token_dim": 1280,
...     "num_transformer_submodules": 1,
...     "num_attention_heads": 20,
...     "num_layers": 36,
...     "encoder_hidden_size": 1280,
...     "prefix_projection": False,
...     "postprocess_past_key_value_function": None,
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForCausalLM.from_pretrained("gpt2-large")
>>> peft_model = PeftModelForCausalLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 1843200 || all params: 775873280 || trainable%: 0.23756456724479544

PeftModelForSeq2SeqLM

用于序列到序列语言建模的 PeftModel

peft.PeftModelForSeq2SeqLM

< >

( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )

参数

  • model (PreTrainedModel) — 基础变压器模型。
  • peft_config (PeftConfig) — Peft 配置。
  • adapter_name (str, optional) — 适配器名称,默认为 "default"
  • autocast_adapter_dtype (bool, optional) — 是否自动转换适配器数据类型。默认为 True。目前,这只会将适配器权重转换为 float16 和 bfloat16,因为这在稳定训练中通常是必需的,并且仅影响选择特定的 PEFT 调谐器。

针对序列到序列语言建模的 Peft 模型。

示例

>>> from transformers import AutoModelForSeq2SeqLM
>>> from peft import PeftModelForSeq2SeqLM, get_peft_config

>>> config = {
...     "peft_type": "LORA",
...     "task_type": "SEQ_2_SEQ_LM",
...     "inference_mode": False,
...     "r": 8,
...     "target_modules": ["q", "v"],
...     "lora_alpha": 32,
...     "lora_dropout": 0.1,
...     "fan_in_fan_out": False,
...     "enable_lora": None,
...     "bias": "none",
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> peft_model = PeftModelForSeq2SeqLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 884736 || all params: 223843584 || trainable%: 0.3952474242013566

PeftModelForQuestionAnswering

用于问答的 PeftModel

peft.PeftModelForQuestionAnswering

< >

( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )

参数

  • 模型 (PreTrainedModel) — 基础转换模型。
  • peft_config (PeftConfig) — Peft 配置。
  • adapter_name (str, 可选) — 适配器的名称,默认为 "default"
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器数据类型。默认为 True。目前,这只会将适配器权重从 float16 和 bfloat16 转换为 float32,因为这通常是稳定训练所必需的,并且只会影响选定的 PEFT 调整器。

用于提取式问答的 Peft 模型。

属性:

  • config (PretrainedConfig) — 基础模型的配置对象。
  • cls_layer_name (str) — 分类层的名称。

示例

>>> from transformers import AutoModelForQuestionAnswering
>>> from peft import PeftModelForQuestionAnswering, get_peft_config

>>> config = {
...     "peft_type": "LORA",
...     "task_type": "QUESTION_ANS",
...     "inference_mode": False,
...     "r": 16,
...     "target_modules": ["query", "value"],
...     "lora_alpha": 32,
...     "lora_dropout": 0.05,
...     "fan_in_fan_out": False,
...     "bias": "none",
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForQuestionAnswering.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForQuestionAnswering(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 592900 || all params: 108312580 || trainable%: 0.5473971721475013

PeftModelForFeatureExtraction

用于从 Transformer 模型中提取特征/嵌入的 PeftModel

peft.PeftModelForFeatureExtraction

< >

( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )

参数

  • model (PreTrainedModel) — 基础transformer模型。
  • peft_config (PeftConfig) — Peft配置。
  • adapter_name (str, 可选) — 适配器的名称,默认为"default"
  • autocast_adapter_dtype (bool, 可选) — 是否自动转换适配器的数据类型。默认为True。当前仅将适配器权重使用float16和bfloat16转换为float32,这通常对于稳定训练是必需的,并且仅影响选择的PEFT微调器。

用于从transformer模型中提取特征和嵌入的Peft模型

属性:

示例

>>> from transformers import AutoModel
>>> from peft import PeftModelForFeatureExtraction, get_peft_config

>>> config = {
...     "peft_type": "LORA",
...     "task_type": "FEATURE_EXTRACTION",
...     "inference_mode": False,
...     "r": 16,
...     "target_modules": ["query", "value"],
...     "lora_alpha": 32,
...     "lora_dropout": 0.05,
...     "fan_in_fan_out": False,
...     "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModel.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForFeatureExtraction(model, peft_config)
>>> peft_model.print_trainable_parameters()

PeftMixedModel

一个用于混合不同适配器类型(例如,LoRA 和 LoHa)的 PeftModel

peft.PeftMixedModel

< >

( model: nn.Module peft_config: PeftConfig adapter_name: str = 'default' )

参数

  • model (torch.nn.Module) — 要调优的模型。
  • config (PeftConfig) — 要调优的模型配置。适配器类型必须兼容。
  • adapter_name (str, 可选, 默认为 "default") — 第一个适配器的名称。

用于加载混合不同类型适配器进行推理的 PeftMixedModel。

该类不支持加载/保存,通常不应该直接初始化。相反,使用 get_peft_model 并传入参数 mixed=True

阅读混合适配器类型指南,了解如何使用不同类型的适配器。

示例

>>> base_model = ...  # load the base model, e.g. from transformers
>>> peft_model = PeftMixedModel.from_pretrained(base_model, path_to_adapter1, "adapter1").eval()
>>> peft_model.load_adapter(path_to_adapter2, "adapter2")
>>> peft_model.set_adapter(["adapter1", "adapter2"])  # activate both adapters
>>> peft_model(data)  # forward pass using both adapters

禁用适配器

< >

( )

禁用适配器模块。

前向传播

< >

( *args: Any **kwargs: Any )

模型的前向传播过程。

from_pretrained

< >

( model: nn.Module model_id: str | os.PathLike adapter_name: str = 'default' is_trainable: bool = False config: Optional[PeftConfig] = None **kwargs: Any )

参数

  • model (nn.Module) — 需要调整的模型。
  • model_id (stros.PathLike) — 要使用的 PEFT 配置的名称。可以是:
    • 一个字符串,一个 PEFT 配置的 model id,该配置托管在 Hugging Face Hub 的模型仓库中。
    • 一个包含用于 save_pretrained 方法保存的 PEFT 配置文件的目录路径 (./my_peft_config_directory/)。
  • adapter_name (str, 可选, 默认为 "default") — 要加载的适配器名称。这对于加载多个适配器很有用。
  • is_trainable (bool, 可选, 默认为 False) — 适配器是否应该可训练。如果为 false,则适配器将被冻结并用于推理
  • config (PeftConfig, 可选) — 使用该配置对象代替自动加载的配置。此配置对象与 model_idkwargs 互相排斥。这在在调用 from_pretrained 之前已加载配置时很有用。kwargs — (可选):传递给具体 PEFT 配置类的附加关键字参数。

从预训练模型和加载的 PEFT 权重中实例化 PEFT 混合模型。

注意,传递的 model 可能会就地修改。

生成

< >

( *args: Any **kwargs: Any )

生成输出。

get_nb_trainable_parameters

< >

( )

返回模型中可训练参数的数量和所有参数的数量。

merge_and_unload

< >

( *args: Any **kwargs: Any )

参数

  • progressbar (bool) — 是否显示进度条来指示卸载和合并进程
  • safe_merge (bool) — 是否激活安全合并检查以检查适配器权重中是否存在潜在的 Nan 值
  • adapter_names (List[str], 可选) — 将要合并的适配器名称列表。如果为 None,则合并所有活动的适配器。默认为 None

此方法将适配器层合并到基础模型中。如果有人想将基础模型作为独立模型使用,则需要此操作。

打印可训练参数数量

< >

( )

打印模型中的可训练参数数量。

注意:print_trainable_parameters() 使用 get_nb_trainable_parameters(),这与 huggingface/transformers 中的 num_parameters(only_trainable=True) 不同。get_nb_trainable_parameters() 返回 Peft 模型的 (可训练参数,所有参数),包括修改后的骨干 transformer 模型。对于像 LoRA 这样的技术,修改后的骨干 transformer 模型通过 LoRA 模块就地修改。然而,对于提示微调,骨干 transformer 模型未修改。num_parameters(only_trainable=True) 返回骨干 transformer 模型的可训练参数数量,这可能是不同的。

set_adapter

< >

( 适配器名称: Union[str, list[str]] )

参数

  • 适配器名称 (strList[str]) — 要激活的适配器名称。

设置模型的活动适配器。

请注意,在正向传递期间应用适配器的顺序可能与传递给此函数的顺序不同。相反,正向传递中的顺序取决于适配器被加载到模型中的顺序。活动适配器仅确定在正向传递期间激活哪些适配器,但不确定它们的应用顺序。

此外,此函数将指定的适配器设置为可训练(即,requires_grad=True)。如果不希望这样做,请使用以下代码。

>>> for name, param in model_peft.named_parameters():
...     if ...:  # some check on name (ex. if 'lora' in name)
...         param.requires_grad = False

卸载

< >

( *args: Any **kwargs: Any )

通过不合并,移除所有适配器模块以恢复基础模型。这将会恢复原始的基础模型。

工具

peft.cast_mixed_precision_params

< >

( model dtype )

参数

  • model (torch.nn.Module) — 要转换非训练参数的模型。
  • dtype (torch.dtype) — 将非训练参数转换到指定的 dtype。该 dtype 可以是 torch.float16

将模型的所有非训练参数转换为给定的 dtype。该 dtype 可以是 torch.float16torch.bfloat16,具体取决于您进行的混合精度训练。训练参数将转换为全精度。此方法旨在通过使用半精度数据类型来减少非训练参数的 GPU 内存使用,同时保留全精度训练参数以保持训练稳定性。

torch.bfloat16,具体取决于您进行的混合精度训练。

peft.get_peft_model

< >

( model: PreTrainedModel peft_config: PeftConfig adapter_name: str = 'default' mixed: bool = False autocast_adapter_dtype: bool = True revision: Optional[str] = None )

参数

  • model (transformers.PreTrainedModel) — 需要包裹的模型。
  • peft_config (PeftConfig) — 包含 Peft 模型参数的配置对象。
  • adapter_name (str, optional, 默认为 "default") — 待注入的适配器名称,如果没有提供,则使用默认适配器名称("default")。
  • mixed (bool, optional, 默认为 False) — 允许混合不同(兼容)适配器类型。
  • autocast_adapter_dtype (bool, optional) — 是否自动转换适配器数据类型。默认为 True。目前,这只会将适配器权重使用 float16 或 bfloat16 转换为 float32,因为这通常是稳定训练所必需的,并且仅影响选定的 PEFT 调节器。
  • revision (str, optional, 默认为 main) — 基础模型的修订版本。如果未设置,保存的 peft 模型将加载基础模型的 main 修订版本。

从模型和配置中返回 Peft 模型对象。

peft.inject_adapter_in_model

< >

( peft_config: PeftConfig model: torch.nn.Module adapter_name: str = 'default' )

参数

  • peft_config (PeftConfig) — 包含Peft模型参数的配置对象。
  • model (torch.nn.Module) — 将要注入适配器的输入模型。
  • adapter_name (str, optional, defaults to "default") — 要注入的适配器名称,如未提供,则使用默认适配器名称(“默认”)。

一个用于在模型中创建和注入适配器的简单API。目前该API不支持提示学习方法,也不支持适应提示。请确保在peft_config对象中设置正确的target_names。API在内部调用get_peft_model,但只限于非提示学习方法。

peft.get_peft_model_state_dict

< >

( model state_dict = None adapter_name = 'default' unwrap_compiled = False save_embedding_layers = 'auto' )

参数

  • model (PeftModel) — Peft模型。当使用torch.nn.DistributedDataParallel,DeepSpeed或FSDP时,模型应该是底层模型/未包装模型(即model.module)。
  • state_dict (dict, 可选,默认为None)) — 模型的状态字典。如果不提供,将使用传入的模型的状态字典。
  • adapter_name (str, 可选,默认为"default")) — 需要返回状态字典的适配器名称。
  • unwrap_compiled (bool, 可选, 默认为 false) — 如果使用了 torch.compile,则是否将模型展开。
  • save_embedding_layers (Union[bool, str], 可选, 默认为 auto) — 如果为 true,保存 embedding layers,除了 adapter 权重。如果为 auto,当配置文件中有 target_modules 时,检查常见的 embedding layers peft.utils.other.EMBEDDING_LAYER_NAMES。根据它设置布尔标志。这仅适用于 🤗 transformers 模型。

获取 Peft 模型的状态字典。

peft.prepare_model_for_kbit_training

< >

( model use_gradient_checkpointing = True gradient_checkpointing_kwargs = None )

参数

  • model (transformers.PreTrainedModel) — 从 transformers 加载的模型
  • use_gradient_checkpointing (bool, 可选, 默认 True) — 如果为 True,则使用梯度检查点技术以节省内存,但这会牺牲反向传播的速度。
  • gradient_checkpointing_kwargs (dict, 可选, 默认 None) — 传递给梯度检查点函数的关键字参数,有关可以传递给该方法的参数的详细信息,请参阅 torch.utils.checkpoint.checkpoint 的文档。注意,此功能仅适用于最新的 transformers 版本 (> 4.34.1)。

请注意此方法仅适用于 transformers 模型。

此方法包装了运行训练之前准备模型的整个协议。包括:1- 将层归一化转换为 fp32 2- 使输出嵌入层需要梯度 3- 将语言模型头向上转换为 fp32

peft.get_layer_status

< >

( model: torch.nn.Module ) listpeft.peft_model.TunerLayerStatus

参数

  • model ([Union[~PeftModel, ~transformers.PreTrainedModel, nn.Module]]) — 获取适配器层状态的模型。

返回

列表peft.peft_model.TunerLayerStatus

包含对应适配器层的状态的dataclass列表。

获取模型中每个适配器层的状态。

此函数返回一个包含 TunerLayerStatus 数据类实例的列表,每个实例包含以下属性

  • name (str):适配器层的名称,例如model.encoder.block.0.layer.0.SelfAttention.q
  • module_type (str):适配器层的类型,例如lora.Linear
  • enabled (bool):适配器层是否启用。
  • active_adapters (list[str]):活动适配器的名称,如果有,例如["default"]
  • merged_adapters (list[str]):合并的适配器名称,如果有,例如["default"]
  • requires_grad : dict[str, bool | Literal["irregular"]]] 每个适配器模块的参数的 requires_grad 状态。理想情况下,它应该是 TrueFalse。如果所有参数的 requires_grad 状态不一致,则值将设置为 "irregular"
  • available_adapters (list[str]):可用的适配器名称,例如["default"]
  • devices (dict[str, list[str]]): 存储给定适配器参数的设备,例如 ["cuda"]

peft.get_model_status

< >

( model: torch.nn.Module ) peft.peft_model.TunerModelStatus

参数

  • 模型 ([联合类型[~PeftModel, ~transformers.PreTrainedModel, nn.Module]]) — 从获取适配器层状态的模型。

返回

peft.peft_model.TunerModelStatus

包含模型状态的dataclass。

获取该型号调谐器的状态。

此函数返回一个包含以下属性的 TunerModelStatus 数据类实例:

  • base_model_type (str):基础模型的类型,例如T5Model
  • adapter_model_type (str):适配器模型的类型,例如LoraModel
  • peft_types (dict[str, str]):适配器名称与适配器类型的映射,例如{"default": "LORA"}
  • trainable_params (int):模型中可训练参数的数量。
  • total_params (int):模型中参数的总数。
  • num_adapter_layers (int):模型中适配器层的数量。
  • enabled (bool, Literal["irregular"]):是否所有适配器层都启用。如果有些启用,有些未启用,则此值为"irregular"。这意味着您的模型处于不一致的状态,可能不会按预期工作。
  • active_adapters (list[str], Literal["irregular"]):活动适配器的名称。如果活动适配器在所有层之间不一致,则此值为"irregular",这意味着您的模型处于不一致的状态,可能不会按预期工作。
  • merged_adapters (list[str], Literal["irregular"]):合并的适配器名称。如果合并的适配器在所有层之间不一致,则此值为"irregular",这意味着您的模型处于不一致的状态,可能不会按预期工作。
  • requires_grad (dict[str, bool | Literal["irregular"]]):对于给定的适配器,是否所有适配器层都设置了 requires_gradTrueFalse。如果有混合,则设置为 "irregular",这意味着您的模型处于不一致的状态,可能无法按预期工作。
  • available_adapters (list[str]):可用的适配器名称,例如["default"]
  • devices (dict[str, list[str]]): 存储给定适配器参数的设备,例如 ["cuda"]
< > 在GitHub上更新