PEFT 文件
IA3
並獲得增強的文件體驗
開始使用
IA3
“透過抑制和放大內部啟用來注入介面卡”(Infused Adapter by Inhibiting and Amplifying Inner Activations),簡稱 (IA)³,是一種透過新增三個學習到的向量來重新縮放自注意力層和編碼器-解碼器注意力層中的鍵和值,以及位置前饋網路中的中間啟用的方法。
論文摘要如下:
少樣本上下文學習(ICL)使預訓練語言模型能夠在沒有任何基於梯度的訓練的情況下執行一個以前未見過的任務,只需將少量訓練樣本作為輸入的一部分。ICL 會產生大量的計算、記憶體和儲存成本,因為它在每次進行預測時都需要處理所有的訓練樣本。引數高效微調(PEFT)(例如介面卡模組、提示調優、稀疏更新方法等)提供了一種替代正規化,其中只訓練一小部分引數來使模型能夠執行新任務。在本文中,我們嚴格比較了少樣本 ICL 和 PEFT,並證明了後者不僅提供了更高的準確性,而且計算成本也大大降低。在此過程中,我們引入了一種名為 (IA)³ 的新 PEFT 方法,該方法透過學習到的向量來縮放啟用,在只引入相對少量新引數的情況下獲得了更強的效能。我們還提出了一個基於 T0 模型的簡單配方,稱為 T-Few,它可以應用於新任務,而無需進行特定任務的調優或修改。我們透過將其應用於 RAFT 基準測試來驗證 T-Few 在完全未見過的任務上的有效性,首次實現了超越人類的效能,並將最先進水平絕對提升了 6%。我們實驗中使用的所有程式碼都是公開可用的。.
IA3Config
class peft.IA3Config
< 來源 >( task_type: typing.Union[str, peft.utils.peft_types.TaskType, NoneType] = None peft_type: typing.Union[str, peft.utils.peft_types.PeftType, NoneType] = None auto_mapping: typing.Optional[dict] = None base_model_name_or_path: typing.Optional[str] = None revision: typing.Optional[str] = None inference_mode: bool = False target_modules: Optional[Union[list[str], str]] = None exclude_modules: Optional[Union[list[str], str]] = None feedforward_modules: Optional[Union[list[str], str]] = None fan_in_fan_out: bool = False modules_to_save: Optional[list[str]] = None init_ia3_weights: bool = True )
引數
- target_modules (
Optional[Union[List[str], str]]
) — 要應用介面卡的模組名稱。如果指定此項,則只會替換具有指定名稱的模組。當傳遞字串時,將執行正則表示式匹配。當傳遞字串列表時,將執行精確匹配或檢查模組名稱是否以任何傳遞的字串結尾。如果指定為“all-linear”,則選擇所有 linear/Conv1D 模組,不包括輸出層。如果未指定,將根據模型架構選擇模組。如果架構未知,則會引發錯誤——在這種情況下,您應手動指定目標模組。 - exclude_modules (
Optional[Union[List[str], str]]
) — 不應用介面卡的模組名稱。當傳遞字串時,將執行正則表示式匹配。當傳遞字串列表時,將執行精確匹配或檢查模組名稱是否以任何傳遞的字串結尾。 - feedforward_modules (
Optional[Union[List[str], str]]
) — 如原始論文中所述,要被視為前饋模組的模組名稱。這些模組會將 (IA)³ 向量乘到輸入上,而不是輸出上。`feedforward_modules` 必須是 `target_modules` 中存在的名稱或名稱子集。 - fan_in_fan_out (
bool
) — 如果要替換的層儲存權重的方式是 (fan_in, fan_out),則設定為 True。例如,gpt-2 使用 `Conv1D`,其權重儲存方式為 (fan_in, fan_out),因此此項應設定為 `True`。 - modules_to_save (
Optional[List[str]]
) — 除了 (IA)³ 層之外,要設定為可訓練並儲存在最終檢查點中的模組列表。 - init_ia3_weights (
bool
) — 是否初始化 (IA)³ 層中的向量,預設為 `True`。不建議將此設定為 `False`。
這是用於儲存 IA3Model 配置的配置類。
IA3Model
class peft.IA3Model
< 來源 >( model peft_config: Union[PeftConfig, dict[str, PeftConfig]] adapter_name: str low_cpu_mem_usage: bool = False state_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
引數
- model (
PreTrainedModel
) — 要適配的模型。 - config (IA3Config) — (IA)³ 模型的配置。
- adapter_name (
str
) — 介面卡的名稱,預設為"default"
。 - low_cpu_mem_usage (
bool
,可選
, 預設為False
) — 在元裝置上建立空的介面卡權重。有助於加速載入過程。
返回
torch.nn.Module
(IA)³ 模型。
根據預訓練的 transformers 模型建立一個“透過抑制和放大內部啟用來注入介面卡”((IA)^3) 模型。該方法在 https://huggingface.co/papers/2205.05638 中有詳細描述。
示例
>>> from transformers import AutoModelForSeq2SeqLM, ia3Config
>>> from peft import IA3Model, IA3Config
>>> config = IA3Config(
... peft_type="IA3",
... task_type="SEQ_2_SEQ_LM",
... target_modules=["k", "v", "w0"],
... feedforward_modules=["w0"],
... )
>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> ia3_model = IA3Model(config, model)
屬性:
- model (
PreTrainedModel
) — 需要被適配的模型。 - peft_config (
ia3Config
):(IA)³ 模型的配置。
add_weighted_adapter
< 來源 >( adapters: list[str] weights: list[float] adapter_name: str )
此方法透過將給定的介面卡與給定的權重合並來新增一個新的介面卡。
刪除一個現有的介面卡。
merge_and_unload
< 來源 >( safe_merge: bool = False adapter_names: Optional[list[str]] = None )
此方法將 IA³ 層合併到基礎模型中。如果有人想將基礎模型作為獨立模型使用,則需要此操作。
示例
>>> from transformers import AutoModelForCausalLM
>>> from peft import PeftModel
>>> base_model = AutoModelForCausalLM.from_pretrained("tiiuae/falcon-40b")
>>> peft_model_id = "smangrul/falcon-40B-int4-peft-lora-sfttrainer-sample"
>>> model = PeftModel.from_pretrained(base_model, peft_model_id)
>>> merged_model = model.merge_and_unload()
設定活動的介面卡。
此外,此函式將把指定的介面卡設定為可訓練的(即 requires_grad=True)。如果不希望如此,請使用以下程式碼。
透過移除所有 IA³ 模組而不進行合併,來恢復基礎模型。這將返回原始的基礎模型。