PEFT 文件
模型
並獲得增強的文件體驗
開始使用
模型
PeftModel 是用於指定基礎 Transformer 模型和配置以應用 PEFT 方法的基礎模型類。基礎 PeftModel
包含從 Hub 載入和儲存模型的方法。
PeftModel
class peft.PeftModel
< 來源 >( model: PreTrainedModel peft_config: PeftConfig adapter_name: str = 'default' autocast_adapter_dtype: bool = True low_cpu_mem_usage: bool = False )
引數
- model (
PreTrainedModel
) — 用於 Peft 的基礎 Transformer 模型。 - peft_config (PeftConfig) — Peft 模型的配置。
- adapter_name (
str
, 可選) — 介面卡的名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, 可選) — 是否自動轉換介面卡的資料型別。預設為True
。目前,這隻會將使用 float16 和 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 PEFT 微調器。 - low_cpu_mem_usage (
bool
,可選
, 預設為False
) — 在元裝置(meta device)上建立空的介面卡權重。有助於加快載入過程。在為訓練建立新的 PEFT 介面卡時,不要使用
low_cpu_mem_usage=True
。
包含各種 Peft 方法的基礎模型。
屬性:
- base_model (
torch.nn.Module
) — 用於 Peft 的基礎 Transformer 模型。 - peft_config (PeftConfig) — Peft 模型的配置。
- modules_to_save (
list
ofstr
) — 儲存模型時要儲存的子模組名稱列表。 - prompt_encoder (PromptEncoder) — 如果使用 PromptLearningConfig,則為 Peft 使用的提示編碼器。
- prompt_tokens (
torch.Tensor
) — 如果使用 PromptLearningConfig,則為 Peft 使用的虛擬提示令牌。 - transformer_backbone_name (
str
) — 如果使用 PromptLearningConfig,則為基礎模型中 Transformer 主幹的名稱。 - word_embeddings (
torch.nn.Embedding
) — 如果使用 PromptLearningConfig,則為基礎模型中 Transformer 主幹的詞嵌入。
add_adapter
< 來源 >( adapter_name: str peft_config: PeftConfig low_cpu_mem_usage: bool = False )
引數
- adapter_name (
str
) — 要新增的介面卡的名稱。 - peft_config (PeftConfig) — 要新增的介面卡的配置。
- low_cpu_mem_usage (
bool
,可選
, 預設為False
) — 在元裝置(meta device)上建立空的介面卡權重。在載入已儲存的介面卡時有助於加快處理速度。在為訓練建立新的 PEFT 介面卡時不要使用此選項。
根據傳入的配置向模型新增一個介面卡。
此介面卡未經訓練。要載入已訓練的介面卡,請檢視 PeftModel.load_adapter()。
新介面卡的名稱應該是唯一的。
新介面卡不會自動設定為活動介面卡。使用 PeftModel.set_adapter() 設定活動介面卡。
更新或建立模型卡以包含有關 peft 的資訊
- 新增
peft
庫標籤 - 新增 peft 版本
- 新增基礎模型資訊
- 如果使用了量化,則新增量化資訊
刪除一個現有的介面卡。
停用介面卡模組的上下文管理器。使用此管理器在基礎模型上執行推理。
模型的前向傳播。
from_pretrained
< 來源 >( model: torch.nn.Module model_id: Union[str, os.PathLike] adapter_name: str = 'default' is_trainable: bool = False config: Optional[PeftConfig] = None autocast_adapter_dtype: bool = True ephemeral_gpu_offload: bool = False low_cpu_mem_usage: bool = False key_mapping: Optional[dict[str, str]] = None **kwargs: Any )
引數
- model (
torch.nn.Module
) — 要被適配的模型。對於 🤗 Transformers 模型,該模型應使用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, 可選) — 要使用的配置物件,而不是自動載入的配置。此配置物件與
model_id
和kwargs
互斥。當配置在呼叫from_pretrained
之前已經載入時,此引數很有用。 - autocast_adapter_dtype (
bool
, 可選) — 是否自動轉換介面卡的資料型別。預設為True
。僅與特定的介面卡型別相關。 - ephemeral_gpu_offload (
bool
, 可選) — 是否對部分載入的模組使用臨時 GPU 解除安裝。預設為False
。當模型的某些部分和/或元件(如介面卡)儲存在 CPU 記憶體中直到需要時,此引數很有用。資料不是在小資料上執行昂貴的操作,而是按需傳輸到 GPU,執行操作,然後將結果移回 CPU 記憶體。這會帶來輕微的瞬時 VRAM 開銷,但在某些情況下可以提供數量級的加速。 - low_cpu_mem_usage (
bool
,可選
, 預設為False
) — 在載入已儲存的權重之前,在元裝置(meta device)上建立空的介面卡權重。有助於加快處理速度。 - torch_device (
str
, 可選, 預設為 None) — 載入介面卡的裝置。如果為None
,將自動推斷裝置。 - key_mapping (dict, 可選, 預設為 None) — 在載入
state_dict
之前應用的 PEFTstate_dict
鍵的額外對映。當應用此對映時,會預先刪除 PEFT 特定的"base_model.model"
字首,並且尚未插入介面卡名稱(例如"default"
)。僅在您清楚自己在做什麼時才傳遞此引數。 - kwargs — (
可選
): 傳遞給特定 PEFT 配置類的其他關鍵字引數。
從預訓練模型和載入的 PEFT 權重例項化一個 PEFT 模型。
請注意,傳入的 model
可能會被就地修改。
返回基礎模型。
get_layer_status
< 來源 >( ) → 列表peft.peft_model.TunerLayerStatus
引數
- model (~PeftModel) — 要獲取介面卡層狀態的模型。
返回
列表peft.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"]
。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_prompt
< 來源 >( batch_size: int task_ids: Optional[torch.Tensor] = None max_cache_len: Optional[int] = None )
返回用於 Peft 的虛擬提示。僅適用於使用提示學習方法時。
返回在儲存模型時要儲存的提示嵌入。僅適用於使用提示學習方法時。
load_adapter
< 來源 >( model_id: Union[str, os.PathLike] adapter_name: str is_trainable: bool = False torch_device: Optional[str] = None autocast_adapter_dtype: bool = True ephemeral_gpu_offload: bool = False low_cpu_mem_usage: bool = False key_mapping: Optional[dict[str, str]] = None **kwargs: Any )
引數
- model_id (
str
oros.PathLike
) — 要使用的 PEFT 配置的名稱。可以是以下兩種之一:- 字串,即 Hugging Face Hub 上模型倉庫中託管的 PEFT 配置的
model id
。 - 使用
save_pretrained
方法儲存的包含 PEFT 配置檔案的目錄路徑 (./my_peft_config_directory/
)。
- 字串,即 Hugging Face Hub 上模型倉庫中託管的 PEFT 配置的
- adapter_name (
str
) — 要新增的介面卡的名稱。 - is_trainable (
bool
, optional, 預設為False
) — 介面卡是否應可訓練。如果為False
,介面卡將被凍結,只能用於推理。 - torch_device (
str
, optional, 預設為 None) — 載入介面卡的裝置。如果為None
,將自動推斷裝置。 - autocast_adapter_dtype (
bool
, optional, 預設為True
) — 是否自動轉換介面卡的資料型別。預設為True
。目前,這隻會將使用 float16 和 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 PEFT 微調器。 - ephemeral_gpu_offload (
bool
, optional, 預設為False
) — 是否對部分載入的模組使用臨時 GPU 解除安裝。預設為False
。 - low_cpu_mem_usage (
bool
,optional
, 預設為False
) — 在載入儲存的權重之前,在元裝置上建立空的介面卡權重。有助於加速該過程。 - key_mapping (dict, optional, 預設為 None) — 在載入
state_dict
之前應用的 PEFTstate_dict
鍵的額外對映。應用此對映時,會預先移除 PEFT 特定的"base_model.model"
字首,並且尚未插入介面卡名稱(例如"default"
)。僅在您清楚自己在做什麼時才傳遞此引數。 - 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_pretrained
< source >( 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 path_initial_model_for_weight_conversion: Optional[str] = None **kwargs: Any )
引數
- save_directory (
str
) — 將儲存介面卡模型和配置檔案的目錄(如果不存在,則會建立)。 - safe_serialization (
bool
, optional) — 是否以 safetensors 格式儲存介面卡檔案,預設為True
。 - selected_adapters (
List[str]
, optional) — 要儲存的介面卡列表。如果為None
,則預設為所有介面卡。 - save_embedding_layers (
Union[bool, str]
, optional, 預設為"auto"
) — 如果為True
,除了介面卡權重外,還儲存嵌入層。如果為auto
,當可用時,會在配置的target_modules
中檢查常見的嵌入層peft.utils.other.EMBEDDING_LAYER_NAMES
,並自動設定布林標誌。這僅適用於 🤗 transformers 模型。 - is_main_process (
bool
, optional) — 呼叫此方法的程序是否是主程序。預設為True
。如果不是在主程序上,則不會儲存檢查點,這對於多裝置設定(例如 DDP)非常重要。 - path_initial_model_for_weight_conversion (
str, *optional*
) — 指向初始化介面卡的路徑,該介面卡是在使用 PiSSA/CorDA/OLoRA 初始化模型後、進行任何訓練之前獲得的。當path_initial_model_for_weight_conversion
不為 None 時,會計算微調前後介面卡的差異。這個差異可以表示為標準 LoRA 介面卡的引數。使用這個轉換後的介面卡不需要對基礎模型進行更改,從而方便地允許將多個 PiSSA/CorDA/OLoRA 介面卡與 LoRA 介面卡一起使用,並可以啟用或停用任何介面卡。請注意,如果rslora
與rank_pattern
或alpha_pattern
結合使用,則不支援此轉換。 - kwargs (附加關鍵字引數, optional) — 傳遞給
push_to_hub
方法的附加關鍵字引數。
此函式將介面卡模型和介面卡配置檔案儲存到一個目錄中,以便可以使用 PeftModel.from_pretrained() 類方法重新載入,並且也可以被 PeftModel.push_to_hub()
方法使用。
設定活動的介面卡。
一次只能有一個介面卡處於活動狀態。
此外,此函式會將指定的介面卡設定為可訓練狀態(即 requires_grad=True)。如果不需要此行為,請使用以下程式碼。
PeftModelForSequenceClassification
一個用於序列分類任務的 PeftModel
。
class peft.PeftModelForSequenceClassification
< source >( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )
引數
- model (
PreTrainedModel
) — 基礎 transformer 模型。 - peft_config (PeftConfig) — Peft 配置。
- adapter_name (
str
, optional) — 介面卡的名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為True
。目前,這隻會將使用 float16 和 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 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
。
class peft.PeftModelForTokenClassification
< source >( model: torch.nn.Module peft_config: PeftConfig = None adapter_name: str = 'default' **kwargs )
引數
- model (
PreTrainedModel
) — 基礎 transformer 模型。 - peft_config (PeftConfig) — Peft 配置。
- adapter_name (
str
, optional) — 介面卡的名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為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
。
class peft.PeftModelForCausalLM
< source >( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )
引數
- model (
PreTrainedModel
) — 基礎 transformer 模型。 - peft_config (PeftConfig) — Peft 配置。
- adapter_name (
str
, optional) — 介面卡的名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為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
。
class peft.PeftModelForSeq2SeqLM
< source >( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )
引數
- model (
PreTrainedModel
) — 基礎 transformer 模型。 - peft_config (PeftConfig) — Peft 配置。
- adapter_name (
str
, optional) — 介面卡的名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為True
。目前,這隻會將使用 float16 和 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 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
。
class peft.PeftModelForQuestionAnswering
< source >( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )
引數
- model (
PreTrainedModel
) — 基礎 transformer 模型。 - peft_config (PeftConfig) — Peft 配置。
- adapter_name (
str
, optional) — 介面卡的名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為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
。
class peft.PeftModelForFeatureExtraction
< source >( model: torch.nn.Module peft_config: PeftConfig adapter_name: str = 'default' **kwargs )
引數
- model (
PreTrainedModel
) — 基礎 Transformer 模型。 - peft_config (PeftConfig) — Peft 配置。
- adapter_name (
str
, optional) — 介面卡名稱,預設為"default"
。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為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
。
class peft.PeftMixedModel
< source >( model: nn.Module peft_config: PeftConfig adapter_name: str = 'default' )
PeftMixedModel 用於載入混合不同型別的介面卡以進行推理。
這個類不支援載入/儲存,通常不應直接初始化。相反,應使用帶有引數 mixed=True
的 get_peft_model
。
閱讀混合介面卡型別指南以瞭解更多關於使用不同介面卡型別的資訊。
示例
>>> 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
add_adapter
< source >( adapter_name: str peft_config: PeftConfig low_cpu_mem_usage: bool = False )
引數
- adapter_name (
str
) — 要新增的介面卡名稱。 - peft_config (PeftConfig) — 要新增的介面卡的配置。
- low_cpu_mem_usage (
bool
,optional
, defaults toFalse
) — 在 meta 裝置上建立空的介面卡權重。在載入已儲存的介面卡時有助於加速過程。在為訓練建立新的 PEFT 介面卡時,不要使用
low_cpu_mem_usage=True
(通常不鼓勵對 PeftMixedModel 進行訓練,且未經測試)。
根據傳入的配置向模型新增一個介面卡。
此介面卡未經訓練。要載入已訓練的介面卡,請檢視 PeftModel.load_adapter()。
新介面卡的名稱應該是唯一的。
新介面卡不會自動設定為活動介面卡。使用 PeftModel.set_adapter() 設定活動介面卡。
停用介面卡模組。
模型的前向傳播。
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
oros.PathLike
) — 要使用的 PEFT 配置的名稱。可以是:- 一個字串,即託管在 Hugging Face Hub 模型倉庫中的 PEFT 配置的
model id
。 - 一個包含使用
save_pretrained
方法儲存的 PEFT 配置檔案的目錄路徑(./my_peft_config_directory/
)。
- 一個字串,即託管在 Hugging Face Hub 模型倉庫中的 PEFT 配置的
- adapter_name (
str
, optional, defaults to"default"
) — 要載入的介面卡的名稱。這對於載入多個介面卡很有用。 - is_trainable (
bool
, optional, defaults toFalse
) — 介面卡是否應可訓練。如果為False
,介面卡將被凍結並用於推理。 - config (PeftConfig, optional) — 要使用的配置物件,而不是自動載入的配置。此配置物件與
model_id
和kwargs
互斥。當在呼叫from_pretrained
之前已載入配置時,此引數很有用。 - low_cpu_mem_usage (
bool
,optional
, defaults toFalse
) — 在載入儲存的權重之前,在 meta 裝置上建立空的介面卡權重。有助於加速該過程。 - kwargs — (
optional
):傳遞給特定 PEFT 配置類的額外關鍵字引數。
從預訓練模型和已載入的 PEFT 權重例項化一個 PEFT 混合模型。
請注意,傳入的 model
可能會被就地修改。
生成輸出。
返回模型中可訓練引數的數量和所有引數的總數。
load_adapter
< source >( model_id: str adapter_name: str *args: Any **kwargs: Any )
引數
- adapter_name (
str
) — 要新增的介面卡名稱。 - peft_config (PeftConfig) — 要新增的介面卡的配置。
- is_trainable (
bool
, optional, defaults toFalse
) — 介面卡是否應可訓練。如果為False
,介面卡將被凍結,並且只能用於推理。 - torch_device (
str
, optional, defaults to None) — 載入介面卡的裝置。如果為None
,將自動推斷裝置。 - autocast_adapter_dtype (
bool
, optional, defaults toTrue
) — 是否自動轉換介面卡的資料型別。預設為True
。目前,這隻會將使用 float16 和 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 PEFT 微調器。 - ephemeral_gpu_offload (
bool
, optional, defaults toFalse
) — 是否對部分載入的模組使用臨時 GPU 解除安裝。預設為False
。 - low_cpu_mem_usage (
bool
,optional
, defaults toFalse
) — 在載入儲存的權重之前,在 meta 裝置上建立空的介面卡權重。有助於加速該過程。 - kwargs — (
optional
):用於修改介面卡載入方式的額外引數,例如 Hugging Face Hub 的 token。
將訓練好的介面卡載入到模型中。
新介面卡的名稱應該是唯一的。
新介面卡不會自動設定為活動介面卡。使用 PeftModel.set_adapter() 設定活動介面卡。
merge_and_unload
< source >( *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 模型的可訓練引數數量,這可能有所不同。
set_adapter
< source >( adapter_name: Union[str, list[str]] )
為模型設定活動的介面卡。
請注意,在前向傳播期間應用介面卡的順序可能與將它們傳遞給此函式的順序不同。相反,前向傳播期間的順序是由介面卡載入到模型中的順序決定的。活動介面卡僅確定哪些介面卡在前向傳播期間是活動的,而不決定它們的應用順序。
此外,此函式將把指定的介面卡設定為可訓練的(即 requires_grad=True)。如果不希望如此,請使用以下程式碼。
透過移除所有介面卡模組而不進行合併,恢復基礎模型。這將返回原始的基礎模型。
實用工具
peft.cast_mixed_precision_params
< source >( model dtype )
將模型中所有不可訓練的引數轉換為給定的 dtype
。根據你正在進行的混合精度訓練,dtype
可以是 torch.float16
或 torch.bfloat16
。可訓練的引數被轉換為全精度。這樣做旨在透過對不可訓練引數使用半精度資料型別來減少使用 PEFT 方法時的 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 low_cpu_mem_usage: bool = False )
引數
- model (
transformers.PreTrainedModel
) — 將被包裝的模型。 - peft_config (PeftConfig) — 包含 Peft 模型引數的配置物件。
- adapter_name (
str
,optional
, defaults to"default"
) — 要注入的介面卡名稱,如果未提供,則使用預設介面卡名稱(“default”)。 - mixed (
bool
,optional
, defaults toFalse
) — 是否允許混合不同(相容的)介面卡型別。 - autocast_adapter_dtype (
bool
, optional) — 是否自動轉換介面卡的資料型別。預設為True
。目前,這隻會將使用 float16 或 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 PEFT 微調器。 - revision (
str
,optional
, defaults tomain
) — 基礎模型的版本。如果未設定,儲存的 peft 模型將載入基礎模型的main
版本。 - low_cpu_mem_usage (
bool
,optional
, defaults toFalse
) — 在 meta 裝置上建立空的介面卡權重。有助於加速載入過程。如果你打算訓練模型,請將此設定保持為 False,除非介面卡權重將在訓練開始前被不同的權重替換。
從一個模型和一個配置返回一個 Peft 模型物件,其中模型將被原地修改。
peft.inject_adapter_in_model
< source >( peft_config: PeftConfig model: torch.nn.Module adapter_name: str = 'default' low_cpu_mem_usage: bool = False state_dict: Optional[dict[str, torch.Tensor]] = None )
引數
- peft_config (
PeftConfig
) — 包含 Peft 模型引數的配置物件。 - model (
torch.nn.Module
) — 將要注入介面卡的輸入模型。 - adapter_name (
str
,可選
, 預設為"default"
) — 要注入的介面卡名稱,如果未提供,則使用預設的介面卡名稱(“default”)。 - low_cpu_mem_usage (
bool
,可選
, 預設為False
) — 在元裝置(meta device)上建立空的介面卡權重。有助於加快載入過程。 - state_dict (
dict
, 可選, 預設為None
) — 如果在此處傳遞了 state_dict,將根據 state_dict 的條目注入介面卡。當 PEFT 方法的確切target_modules
未知時,這會很有用,例如因為檢查點是在沒有元資料的情況下建立的。請注意,不使用 state_dict 中的值,僅使用其鍵來確定應適配的正確層。
一個簡單的 API,用於在模型中就地建立並注入介面卡。目前該 API 不支援提示學習(prompt learning)方法和 adaption prompt。請確保在 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
) — 模型的 state dict。如果未提供,將使用傳入模型的 state dict。 - adapter_name (
str
, 可選, 預設為"default"
) — 需要返回其 state dict 的介面卡名稱。 - unwrap_compiled (
bool
, 可選, 預設為False
) — 如果使用了 torch.compile,是否解包模型。 - save_embedding_layers (
Union[bool, str]
, , 可選, 預設為auto
) — 如果為True
,則在介面卡權重之外儲存嵌入層。如果為auto
,則在配置的target_modules
可用時,檢查其中常見的嵌入層peft.utils.other.EMBEDDING_LAYER_NAMES
。並根據此檢查結果設定布林標誌。這僅適用於 🤗 transformers 模型。
獲取 Peft 模型的 state dict。
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- 將 layernorm 轉換為 fp32 2- 使輸出嵌入層需要梯度(require grads) 3- 新增將 lm_head 上轉換為 fp32 的操作 4- 凍結基礎模型層以確保它們在訓練期間不被更新
peft.get_layer_status
< 原始碼 >( 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
< 原始碼 >( 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"]
。