Transformers 文件
PEFT
並獲得增強的文件體驗
開始使用
PEFT
PeftAdapterMixin 提供了來自 PEFT 庫的函式,用於管理 Transformers 的介面卡。該 mixin 目前支援 LoRA、IA3 和 AdaLora。字首調整方法(提示調整、提示學習)不受支援,因為它們無法注入到 torch 模組中。
一個包含所有用於載入和使用 PEFT 庫支援的介面卡權重的函式的類。有關介面卡及其在 Transformer 模型中注入的更多詳細資訊,請檢視 PEFT 庫的文件:https://huggingface.co/docs/peft/index
目前支援的 PEFT 方法是所有非字首調整方法。以下是任何人都可使用此 mixin 類載入、訓練和執行的支援的 PEFT 方法列表:
- 低秩介面卡(LoRA):https://huggingface.co/docs/peft/conceptual_guides/lora
- IA3:https://huggingface.co/docs/peft/conceptual_guides/ia3
- AdaLora:https://huggingface.co/papers/2303.10512
其他 PEFT 模型,如提示調整、提示學習,不在討論範圍內,因為這些介面卡無法“注入”到 torch 模組中。要使用這些方法,請參考 PEFT 庫的使用指南。
使用此 mixin,如果安裝了正確的 PEFT 版本,可以:
- 載入儲存在本地路徑或遠端 Hub 倉庫中的介面卡,並將其注入模型
- 在模型中附加新的介面卡,並使用 Trainer 或自行訓練它們
- 附加多個介面卡並迭代地啟用/停用它們
- 啟用/停用模型中的所有介面卡
- 獲取活動介面卡的 `state_dict`
load_adapter
< 源 >( peft_model_id: typing.Optional[str] = None adapter_name: typing.Optional[str] = None revision: typing.Optional[str] = None token: typing.Optional[str] = None device_map: typing.Optional[str] = 'auto' max_memory: typing.Optional[str] = None offload_folder: typing.Optional[str] = None offload_index: typing.Optional[int] = None peft_config: typing.Optional[dict[str, typing.Any]] = None adapter_state_dict: typing.Optional[dict[str, 'torch.Tensor']] = None low_cpu_mem_usage: bool = False is_trainable: bool = False adapter_kwargs: typing.Optional[dict[str, typing.Any]] = None )
引數
- peft_model_id (
str
, 可選) — 在 Hub 上查詢的模型的識別符號,或者是到儲存的介面卡配置檔案和介面卡權重的本地路徑。 - adapter_name (
str
, 可選) — 要使用的介面卡名稱。如果未設定,將使用預設介面卡。 - revision (
str
, 可選, 預設為"main"
) — 要使用的特定模型版本。它可以是分支名稱、標籤名稱或提交 ID,因為我們使用基於 git 的系統在 huggingface.co 上儲存模型和其他工件,所以 `revision` 可以是 git 允許的任何識別符號。要測試您在 Hub 上建立的拉取請求,可以傳遞 `revision="refs/pr/<pr_number>"`。
- token (
str
, `可選`) — 是否使用身份驗證令牌載入遠端資料夾。對於載入 HuggingFace Hub 上的私有倉庫很有用。您可能需要呼叫 `huggingface-cli login` 並貼上您的令牌以進行快取。 - device_map (
str
或dict[str, Union[int, str, torch.device]]
或int
或torch.device
, 可選) — 指定每個子模組應放置位置的對映。它不需要細化到每個引數/緩衝區名稱,一旦給定的模組名稱在其中,其所有子模組都將被髮送到同一裝置。如果我們只傳遞模型將分配到的裝置(例如,`"cpu"`、`"cuda:1"`、`"mps"` 或 GPU 序數排名如 `1`),裝置對映會將整個模型對映到此裝置。傳遞 `device_map = 0` 意味著將整個模型放在 GPU 0 上。要讓 Accelerate 自動計算最最佳化的 `device_map`,請設定 `device_map="auto"`。有關每個選項的更多資訊,請參閱設計裝置對映。
- max_memory (
Dict
, 可選) — 一個從裝置識別符號到最大記憶體的字典。如果未設定,將預設為每個 GPU 的最大可用記憶體和可用的 CPU RAM。 - offload_folder (
str
或os.PathLike
, `可選`) — 如果 `device_map` 包含任何值 `"disk"`,則為我們將解除安裝權重的資料夾。 - offload_index (
int
, `可選`) — 要傳遞給 `accelerate.dispatch_model` 方法的 `offload_index` 引數。 - peft_config (
dict[str, Any]
, 可選) — 要新增的介面卡的配置,支援的介面卡是非字首調整和適應提示方法。當用戶直接傳遞 PEFT 狀態字典時使用此引數。 - adapter_state_dict (
dict[str, torch.Tensor]
, 可選) — 要載入的介面卡的狀態字典。當用戶直接傳遞 PEFT 狀態字典時使用此引數。 - low_cpu_mem_usage (
bool
, 可選, 預設為False
) — 在載入 PEFT 介面卡時減少記憶體使用。這應該也能加快載入過程。需要 PEFT 版本 0.13.0 或更高。 - is_trainable (
bool
, 可選, 預設為False
) — 介面卡是否應可訓練。如果為False
,介面卡將被凍結,只能用於推理。 - adapter_kwargs (
dict[str, Any]
, 可選) — 傳遞給介面卡配置的 `from_pretrained` 方法和 `find_adapter_config_file` 方法的其他關鍵字引數。
從檔案或遠端 Hub 資料夾載入介面卡權重。如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
需要 peft 作為後端來載入介面卡權重。
add_adapter
< 源 >( adapter_config adapter_name: typing.Optional[str] = None )
如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
為當前模型新增一個全新的介面卡用於訓練。如果未傳遞介面卡名稱,則會為介面卡分配一個預設名稱,以遵循 PEFT 庫的約定(在 PEFT 中,我們使用“default”作為預設介面卡名稱)。
set_adapter
< 源 >( adapter_name: typing.Union[list[str], str] )
如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
透過強制模型使用指定的介面卡並停用其他介面卡來設定特定介面卡。
如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
停用附加到模型的所有介面卡。這會導致僅使用基礎模型進行推理。
如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
啟用附加到模型的介面卡。
如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
獲取模型當前活動的介面卡。在多介面卡推理(組合多個介面卡進行推理)的情況下,返回所有活動介面卡的列表,以便使用者可以相應地處理它們。
對於舊版 PEFT(不支援多介面卡推理),`module.active_adapter` 將返回單個字串。
get_adapter_state_dict
< 源 >( adapter_name: typing.Optional[str] = None state_dict: typing.Optional[dict] = None )
如果您不熟悉介面卡和 PEFT 方法,我們邀請您閱讀 PEFT 官方文件:https://huggingface.co/docs/peft
獲取介面卡狀態字典,該字典應僅包含指定 adapter_name 介面卡的權重張量。如果未傳遞 adapter_name,則使用活動的介面卡。