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 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 of str) — 儲存模型時要儲存的子模組名稱列表。
  • 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() 設定活動介面卡。

create_or_update_model_card

< >

( output_dir: str )

更新或建立模型卡以包含有關 peft 的資訊

  1. 新增 peft 庫標籤
  2. 新增 peft 版本
  3. 新增基礎模型資訊
  4. 如果使用了量化,則新增量化資訊

delete_adapter

< >

( adapter_name: str )

引數

  • adapter_name (str) — 要刪除的介面卡的名稱。

刪除一個現有的介面卡。

disable_adapter

< >

( )

停用介面卡模組的上下文管理器。使用此管理器在基礎模型上執行推理。

示例

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

forward

< >

( *args: Any **kwargs: Any )

模型的前向傳播。

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 (stros.PathLike) — 要使用的 PEFT 配置的名稱。可以是:
    • 一個字串,即託管在 Hugging Face Hub 模型倉庫中的 PEFT 配置的 model id
    • 一個包含使用 save_pretrained 方法儲存的 PEFT 配置檔案的目錄路徑 (./my_peft_config_directory/)。
  • adapter_name (str, 可選, 預設為 "default") — 要載入的介面卡的名稱。這對於載入多個介面卡很有用。
  • is_trainable (bool, 可選, 預設為 False) — 介面卡是否可訓練。如果為 False,介面卡將被凍結,只能用於推理。
  • config (PeftConfig, 可選) — 要使用的配置物件,而不是自動載入的配置。此配置物件與 model_idkwargs 互斥。當配置在呼叫 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 之前應用的 PEFT state_dict 鍵的額外對映。當應用此對映時,會預先刪除 PEFT 特定的 "base_model.model" 字首,並且尚未插入介面卡名稱(例如 "default")。僅在您清楚自己在做什麼時才傳遞此引數。
  • kwargs — (可選): 傳遞給特定 PEFT 配置類的其他關鍵字引數。

從預訓練模型和載入的 PEFT 權重例項化一個 PEFT 模型。

請注意,傳入的 model 可能會被就地修改。

get_base_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

引數

  • model (~PeftModel) — 要獲取介面卡層狀態的模型。

返回

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 max_cache_len: Optional[int] = None )

返回用於 Peft 的虛擬提示。僅適用於使用提示學習方法時。

get_prompt_embedding_to_save

< >

( adapter_name: str )

返回在儲存模型時要儲存的提示嵌入。僅適用於使用提示學習方法時。

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 or os.PathLike) — 要使用的 PEFT 配置的名稱。可以是以下兩種之一:
    • 字串,即 Hugging Face Hub 上模型倉庫中託管的 PEFT 配置的 model id
    • 使用 save_pretrained 方法儲存的包含 PEFT 配置檔案的目錄路徑 (./my_peft_config_directory/)。
  • 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 之前應用的 PEFT state_dict 鍵的額外對映。應用此對映時,會預先移除 PEFT 特定的 "base_model.model" 字首,並且尚未插入介面卡名稱(例如 "default")。僅在您清楚自己在做什麼時才傳遞此引數。
  • kwargs — (optional): 用於修改介面卡載入方式的附加引數,例如 Hugging Face Hub 的 token。

將訓練好的介面卡載入到模型中。

新介面卡的名稱應該是唯一的。

新介面卡不會自動設定為活動介面卡。使用 PeftModel.set_adapter() 設定活動介面卡。

prepare_model_for_gradient_checkpointing

< >

( model: PreTrainedModel )

如有必要,為梯度檢查點準備模型

print_trainable_parameters

< >

( )

列印模型中可訓練引數的數量。

注意: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

< >

( 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 介面卡一起使用,並可以啟用或停用任何介面卡。請注意,如果 rslorarank_patternalpha_pattern 結合使用,則不支援此轉換。
  • kwargs (附加關鍵字引數, optional) — 傳遞給 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

class peft.PeftModelForSequenceClassification

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

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

引數

  • model (torch.nn.Module) — 需要被微調的模型。
  • config (PeftConfig) — 需要被微調模型的配置。介面卡型別必須相容。
  • adapter_name (str, optional, defaults to "default") — 第一個介面卡的名稱。
  • low_cpu_mem_usage (bool, optional, defaults to False) — 在 meta 裝置上建立空的介面卡權重。有助於加速載入過程。

PeftMixedModel 用於載入混合不同型別的介面卡以進行推理。

這個類不支援載入/儲存,通常不應直接初始化。相反,應使用帶有引數 mixed=Trueget_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

< >

( 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 to False) — 在 meta 裝置上建立空的介面卡權重。在載入已儲存的介面卡時有助於加速過程。

    在為訓練建立新的 PEFT 介面卡時,不要使用 low_cpu_mem_usage=True(通常不鼓勵對 PeftMixedModel 進行訓練,且未經測試)。

根據傳入的配置向模型新增一個介面卡。

此介面卡未經訓練。要載入已訓練的介面卡,請檢視 PeftModel.load_adapter()

新介面卡的名稱應該是唯一的。

新介面卡不會自動設定為活動介面卡。使用 PeftModel.set_adapter() 設定活動介面卡。

disable_adapter

< >

( )

停用介面卡模組。

forward

< >

( *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 (str or os.PathLike) — 要使用的 PEFT 配置的名稱。可以是:
    • 一個字串,即託管在 Hugging Face Hub 模型倉庫中的 PEFT 配置的 model id
    • 一個包含使用 save_pretrained 方法儲存的 PEFT 配置檔案的目錄路徑(./my_peft_config_directory/)。
  • adapter_name (str, optional, defaults to "default") — 要載入的介面卡的名稱。這對於載入多個介面卡很有用。
  • is_trainable (bool, optional, defaults to False) — 介面卡是否應可訓練。如果為 False,介面卡將被凍結並用於推理。
  • config (PeftConfig, optional) — 要使用的配置物件,而不是自動載入的配置。此配置物件與 model_idkwargs 互斥。當在呼叫 from_pretrained 之前已載入配置時,此引數很有用。
  • low_cpu_mem_usage (bool, optional, defaults to False) — 在載入儲存的權重之前,在 meta 裝置上建立空的介面卡權重。有助於加速該過程。
  • kwargs — (optional):傳遞給特定 PEFT 配置類的額外關鍵字引數。

從預訓練模型和已載入的 PEFT 權重例項化一個 PEFT 混合模型。

請注意,傳入的 model 可能會被就地修改。

生成

< >

( *args: Any **kwargs: Any )

生成輸出。

get_nb_trainable_parameters

< >

( )

返回模型中可訓練引數的數量和所有引數的總數。

load_adapter

< >

( model_id: str adapter_name: str *args: Any **kwargs: Any )

引數

  • adapter_name (str) — 要新增的介面卡名稱。
  • peft_config (PeftConfig) — 要新增的介面卡的配置。
  • is_trainable (bool, optional, defaults to False) — 介面卡是否應可訓練。如果為 False,介面卡將被凍結,並且只能用於推理。
  • torch_device (str, optional, defaults to None) — 載入介面卡的裝置。如果為 None,將自動推斷裝置。
  • autocast_adapter_dtype (bool, optional, defaults to True) — 是否自動轉換介面卡的資料型別。預設為 True。目前,這隻會將使用 float16 和 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 PEFT 微調器。
  • ephemeral_gpu_offload (bool, optional, defaults to False) — 是否對部分載入的模組使用臨時 GPU 解除安裝。預設為 False
  • low_cpu_mem_usage (bool, optional, defaults to False) — 在載入儲存的權重之前,在 meta 裝置上建立空的介面卡權重。有助於加速該過程。
  • kwargs — (optional):用於修改介面卡載入方式的額外引數,例如 Hugging Face Hub 的 token。

將訓練好的介面卡載入到模型中。

新介面卡的名稱應該是唯一的。

新介面卡不會自動設定為活動介面卡。使用 PeftModel.set_adapter() 設定活動介面卡。

merge_and_unload

< >

( *args: Any **kwargs: Any )

引數

  • progressbar (bool) — 是否顯示錶示解除安裝和合並過程的進度條。
  • safe_merge (bool) — 是否啟用安全合併檢查,以檢查介面卡權重中是否存在潛在的 Nan 值。
  • adapter_names (List[str], optional) — 應被合併的介面卡名稱列表。如果為 None,則所有活動的介面卡都將被合併。預設為 None

此方法將介面卡層合併到基礎模型中。如果有人想將基礎模型用作獨立模型,則需要此操作。

print_trainable_parameters

< >

( )

列印模型中可訓練引數的數量。

注意: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

< >

( adapter_name: Union[str, list[str]] )

引數

  • adapter_name (str or List[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

unload

< >

( *args: Any **kwargs: Any )

透過移除所有介面卡模組而不進行合併,恢復基礎模型。這將返回原始的基礎模型。

實用工具

peft.cast_mixed_precision_params

< >

( model dtype )

引數

  • model (torch.nn.Module) — 需要轉換其不可訓練引數的模型。
  • dtype (torch.dtype) — 不可訓練引數要轉換到的資料型別。dtype可以是 torch.float16

將模型中所有不可訓練的引數轉換為給定的 dtype。根據你正在進行的混合精度訓練,dtype 可以是 torch.float16torch.bfloat16。可訓練的引數被轉換為全精度。這樣做旨在透過對不可訓練引數使用半精度資料型別來減少使用 PEFT 方法時的 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 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 to False) — 是否允許混合不同(相容的)介面卡型別。
  • autocast_adapter_dtype (bool, optional) — 是否自動轉換介面卡的資料型別。預設為 True。目前,這隻會將使用 float16 或 bfloat16 的介面卡權重轉換為 float32,因為這通常是穩定訓練所必需的,並且隻影響特定的 PEFT 微調器。
  • revision (str, optional, defaults to main) — 基礎模型的版本。如果未設定,儲存的 peft 模型將載入基礎模型的 main 版本。
  • low_cpu_mem_usage (bool, optional, defaults to False) — 在 meta 裝置上建立空的介面卡權重。有助於加速載入過程。如果你打算訓練模型,請將此設定保持為 False,除非介面卡權重將在訓練開始前被不同的權重替換。

從一個模型和一個配置返回一個 Peft 模型物件,其中模型將被原地修改。

peft.inject_adapter_in_model

< >

( 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

引數

  • model ([Union[~PeftModel, ~transformers.PreTrainedModel, nn.Module]]) — 需要獲取介面卡層狀態的模型。

返回

列表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"]
  • 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

引數

  • model ([Union[~PeftModel, ~transformers.PreTrainedModel, 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 設定為 TrueFalse。如果存在混合情況,此值將被設定為 "irregular",這意味著您的模型處於不一致的狀態,可能無法按預期工作。
  • available_adapters (list[str]):可用介面卡的名稱,例如 ["default"]
  • devices (dict[str, list[str]]): 儲存給定介面卡引數的裝置,例如 ["cuda"]
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.