模型
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
< source >( adapter_name: str peft_config: PeftConfig )
参数
- adapter_name (
str
) — 要添加的适配器的名称。 - peft_config (PeftConfig) — 要添加的适配器的配置。
基于传递的配置添加适配器到模型。
此适配器未经训练。要加载预训练的适配器,请查看 PeftModel.load_adapter()。
新适配器的名称应为唯一的。
新适配器不会自动设置为活动适配器。使用 PeftModel.set_adapter() 来设置活动适配器。
更新或创建包含 peft 信息的数据卡片
- 添加
peft
库标签 - 添加 peft 版本号
- 添加基础模型信息
- 如果使用了,添加量化信息
禁用适配器模块的上下文管理器。用于在基础模型上运行推理。
模型的前向传播过程。
from_pretrained
参数
- model_id (
str
或os.PathLike
) — 要使用的 PEFT 配置名称。可以是:- 一个字符串,表示托管在 Hugging Face Hub 模型仓库内部 PEFT 配置的
model id
。 - 一个文件夹路径,包含使用
save_pretrained
方法保存的 PEFT 配置文件(例如./my_peft_config_directory/
)。
- 一个字符串,表示托管在 Hugging Face Hub 模型仓库内部 PEFT 配置的
- adapter_name (
str
,可选,默认为"default"
)— 要加载的适配器名称。对于加载多个适配器很有用。 - is_trainable (
bool
,可选,默认为False
)— 适配器是否可训练。如果False
,适配器将被冻结,只能用于推理。 - config (PeftConfig, optional) — 使用而不是自动加载的配置对象。此配置对象与
model_id
和kwargs
互斥。当在调用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_layer_status
< 来源 >( ) → listpeft.peft_model.TunerLayerStatus
获取模型中每个适配器层的状态。
此方法返回一个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
获取该型号调谐器的状态。
此方法返回一个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 的虚拟提示。仅在采用提示学习方法时适用。
返回保存模型时保存的提示嵌入。仅在采用提示学习方法时适用。
load_adapter
< source >( 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 toTrue
) — 是否自动转换单位数。默认值为True
。当前情况下,这只会将适配器权重使用 float16 和 bfloat16 转换为 float32,因为这在稳定训练中通常是必需的,并且只影响selected PEFT微调器。 - ephemeral_gpu_offload (
bool
, optional, defaults toFalse
) — 是否为部分加载的模块使用短暂的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_serialization (
bool
,可选)—— 是否以safetensors格式保存适配器文件,默认为True
。 - selected_adapters (
List[str]
,可选)—— 要保存的适配器列表。如果为None
,则默认为所有适配器。 - save_embedding_layers (
Union[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适配器一起使用,以及激活或停用任何适配器。注意,如果结合使用rslora
、rank_pattern
和alpha_pattern
,则不支持此转换。 - kwargs (附加关键字参数,可选) — 传递给
push_to_hub
方法的附加关键字参数。
此函数将适配器模型和适配器配置文件保存到目录中,以便可以使用 PeftModel.from_pretrained() 类方法重新加载,并且也可以由 PeftModel.push_to_hub()
方法使用。
设置活动适配器。
同一时间只能有一个活动的适配器。
此外,此函数将指定的适配器设置为可训练的(即,requires_grad=True)。如果不希望这样做,请使用以下代码。
PeftModelForSequenceClassification
为序列分类任务设计的 PeftModel
。
类 peft.PeftModelForSequenceClassification
< source >( 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 )
因果语言模型的 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
< source >( 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模型
属性:
- config (PretrainedConfig) — 基础模型的配置对象。
示例
>>> 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' )
用于加载混合不同类型适配器进行推理的 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
禁用适配器模块。
模型的前向传播过程。
from_pretrained
< source >( 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 (
str
或os.PathLike
) — 要使用的 PEFT 配置的名称。可以是:- 一个字符串,一个 PEFT 配置的
model id
,该配置托管在 Hugging Face Hub 的模型仓库中。 - 一个包含用于
save_pretrained
方法保存的 PEFT 配置文件的目录路径 (./my_peft_config_directory/
)。
- 一个字符串,一个 PEFT 配置的
- adapter_name (
str
, 可选, 默认为"default"
) — 要加载的适配器名称。这对于加载多个适配器很有用。 - is_trainable (
bool
, 可选, 默认为False
) — 适配器是否应该可训练。如果为false
,则适配器将被冻结并用于推理 - config (PeftConfig, 可选) — 使用该配置对象代替自动加载的配置。此配置对象与
model_id
和kwargs
互相排斥。这在在调用from_pretrained
之前已加载配置时很有用。kwargs — (可选
):传递给具体 PEFT 配置类的附加关键字参数。
从预训练模型和加载的 PEFT 权重中实例化 PEFT 混合模型。
注意,传递的 model
可能会就地修改。
生成输出。
返回模型中可训练参数的数量和所有参数的数量。
merge_and_unload
< 源代码 >( *args: Any **kwargs: Any )
此方法将适配器层合并到基础模型中。如果有人想将基础模型作为独立模型使用,则需要此操作。
打印模型中的可训练参数数量。
注意: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 模型的可训练参数数量,这可能是不同的。
设置模型的活动适配器。
请注意,在正向传递期间应用适配器的顺序可能与传递给此函数的顺序不同。相反,正向传递中的顺序取决于适配器被加载到模型中的顺序。活动适配器仅确定在正向传递期间激活哪些适配器,但不确定它们的应用顺序。
此外,此函数将指定的适配器设置为可训练(即,requires_grad=True)。如果不希望这样做,请使用以下代码。
通过不合并,移除所有适配器模块以恢复基础模型。这将会恢复原始的基础模型。
工具
peft.cast_mixed_precision_params
< source >( model dtype )
将模型的所有非训练参数转换为给定的 dtype
。该 dtype
可以是 torch.float16
或 torch.bfloat16
,具体取决于您进行的混合精度训练。训练参数将转换为全精度。此方法旨在通过使用半精度数据类型来减少非训练参数的 GPU 内存使用,同时保留全精度训练参数以保持训练稳定性。
torch.bfloat16
,具体取决于您进行的混合精度训练。
peft.get_peft_model
< source >( 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
< source >( peft_config: PeftConfig model: torch.nn.Module adapter_name: str = 'default' )
一个用于在模型中创建和注入适配器的简单API。目前该API不支持提示学习方法,也不支持适应提示。请确保在peft_config
对象中设置正确的target_names
。API在内部调用get_peft_model
,但只限于非提示学习方法。
peft.get_peft_model_state_dict
< source >( 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 layerspeft.utils.other.EMBEDDING_LAYER_NAMES
。根据它设置布尔标志。这仅适用于 🤗 transformers 模型。
获取 Peft 模型的状态字典。
peft.prepare_model_for_kbit_training
< source >( 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
< source >( model: torch.nn.Module ) → listpeft.peft_model.TunerLayerStatus
获取模型中每个适配器层的状态。
此函数返回一个包含 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 状态。理想情况下,它应该是
True
或False
。如果所有参数的 requires_grad 状态不一致,则值将设置为"irregular"
。 available_adapters
(list[str]
):可用的适配器名称,例如["default"]
。devices
(dict[str, list[str]]
): 存储给定适配器参数的设备,例如["cuda"]
。
peft.get_model_status
< source >( model: torch.nn.Module ) → peft.peft_model.TunerModelStatus
获取该型号调谐器的状态。
此函数返回一个包含以下属性的 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_grad
为True
或False
。如果有混合,则设置为"irregular"
,这意味着您的模型处于不一致的状态,可能无法按预期工作。available_adapters
(list[str]
):可用的适配器名称,例如["default"]
。devices
(dict[str, list[str]]
): 存储给定适配器参数的设备,例如["cuda"]
。