PEFT 文件
IA3
加入 Hugging Face 社群
並獲得增強的文件體驗
開始使用
IA3
本概念指南簡要概述了 IA3,這是一種旨在改進 LoRA 的引數高效微調技術。
為了使微調更高效,IA3(透過抑制和放大內部啟用來注入介面卡)透過學習的向量來重新縮放內部啟用。這些學習的向量被注入到典型的基於 Transformer 架構的注意力和前饋模組中。在微調過程中,這些學習的向量是唯一可訓練的引數,因此原始權重保持凍結。與 LoRA 那樣處理權重矩陣的學習的低秩更新不同,處理學習的向量使得可訓練引數的數量要小得多。
與 LoRA 類似,IA3 具有許多相同的優點:
- IA3 透過大幅減少可訓練引數的數量,使微調更加高效。(對於 T0 模型,IA3 模型只有約 0.01% 的可訓練引數,而即使是 LoRA 也有超過 0.1% 的可訓練引數)。
- 原始的預訓練權重保持凍結,這意味著你可以有多個輕量級且便攜的 IA3 模型,用於在其之上構建的各種下游任務。
- 使用 IA3 微調的模型的效能與完全微調的模型的效能相當。
- IA3 不會增加任何推理延遲,因為介面卡權重可以與基礎模型合併。
原則上,IA3 可以應用於神經網路中任何權重矩陣的子集,以減少可訓練引數的數量。根據作者的實現,IA3 權重被新增到 Transformer 模型的鍵、值和前饋層中。具體來說,對於 Transformer 模型,IA3 權重被新增到鍵和值層的輸出,以及每個 Transformer 塊中第二個前饋層的輸入。
給定注入 IA3 引數的目標層,可以根據權重矩陣的大小來確定可訓練引數的數量。
PEFT 中常見的 IA3 引數
與 PEFT 支援的其他方法一樣,要使用 IA3 微調模型,你需要:
- 例項化一個基礎模型。
- 建立一個配置(
IA3Config
),在其中定義 IA3 特定的引數。 - 使用
get_peft_model()
包裝基礎模型,以獲得一個可訓練的PeftModel
。 - 像平常訓練基礎模型一樣訓練
PeftModel
。
IA3Config
允許您透過以下引數控制如何將 IA3 應用於基礎模型:
target_modules
:要應用 IA3 向量的模組(例如,注意力塊)。feedforward_modules
:在target_modules
中被視作前饋層的模組列表。對於注意力塊,學習的向量與輸出啟用相乘,而對於經典的前饋層,向量與輸入相乘。請注意,feedforward_modules
必須是target_modules
的子集。modules_to_save
:除了 IA3 層之外,需要設定為可訓練並在最終檢查點中儲存的模組列表。這些通常包括為微調任務隨機初始化的模型的自定義頭部。
用法示例
對於序列分類任務,可以如下為 Llama 模型初始化 IA3 配置:
peft_config = IA3Config(
task_type=TaskType.SEQ_CLS, target_modules=["k_proj", "v_proj", "down_proj"], feedforward_modules=["down_proj"]
)