PEFT 文件
LoKr
並獲得增強的文件體驗
開始使用
LoKr
低秩克羅內克積(Low-Rank Kronecker Product,LoKr),是一種 LoRA 的變體方法,它用兩個低秩矩陣來近似大權重矩陣,並透過克羅內克積將它們結合起來。LoKr 還提供了一個可選的第三個低秩矩陣,以在微調期間提供更好的控制。
LoKrConfig
class peft.LoKrConfig
< 源 >( 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 rank_pattern: Optional[dict] = <factory> alpha_pattern: Optional[dict] = <factory> r: int = 8 alpha: int = 8 rank_dropout: float = 0.0 module_dropout: float = 0.0 use_effective_conv2d: bool = False decompose_both: bool = False decompose_factor: int = -1 rank_dropout_scale: bool = False target_modules: Optional[Union[list[str], str]] = None exclude_modules: Optional[Union[list[str], str]] = None init_weights: Union[bool, Literal['lycoris']] = True layers_to_transform: Optional[Union[list[int], int]] = None layers_pattern: Optional[Union[list[str], str]] = None modules_to_save: Optional[list[str]] = None )
引數
- r (
int
) — LoKr 秩。 - alpha (
int
) — LoKr 縮放的 alpha 引數。 - rank_dropout (
float
) — 訓練期間秩維度的丟棄機率。 - module_dropout (
float
) — 訓練期間停用 LoKr 模組的丟棄機率。 - use_effective_conv2d (
bool
) — 對於 ksize > 1 的 Conv2d,使用引數有效的分解(FedPara 論文中的“命題 3”)。 - decompose_both (
bool
) — 對左克羅內克積矩陣執行秩分解。 - decompose_factor (
int
) — 克羅內克積分解因子。 - rank_dropout_scale (‘bool) — 是否在訓練時縮放秩丟棄,預設為
False
。 - target_modules (
Optional[Union[List[str], str]]
) — 應用介面卡的模組名稱。如果指定此引數,則只有具有指定名稱的模組才會被替換。當傳遞一個字串時,將執行正則表示式匹配。當傳遞一個字串列表時,將執行精確匹配,或者檢查模組名稱是否以任何傳遞的字串結尾。如果指定為“all-linear”,則選擇所有線性/Conv1D 模組,但不包括輸出層。如果未指定此引數,將根據模型架構選擇模組。如果架構未知,將引發錯誤 — 在這種情況下,您應該手動指定目標模組。 - exclude_modules (
Optional[Union[List[str], str]]
) — 不應用介面卡的模組名稱。當傳遞一個字串時,將執行正則表示式匹配。當傳遞一個字串列表時,將執行精確匹配,或者檢查模組名稱是否以任何傳遞的字串結尾。 - init_weights (
bool
) — 是否執行介面卡權重的初始化。預設為True
。使用“lycoris”以 LYCORIS 倉庫的風格初始化權重。不建議傳遞False
。 - layers_to_transform (
Union[List[int], int]
) — 要轉換的層索引。如果傳遞一個整數列表,它將把介面卡應用於此列表中指定的層索引。如果傳遞單個整數,它將在該索引的層上應用轉換。 - layers_pattern (
Optional[Union[List[str], str]]
) — 層模式名稱,僅當layers_to_transform
不為None
時使用。此引數應針對模型的nn.ModuleList
,通常稱為'layers'
或'h'
。 - rank_pattern (
dict
) — 從層名稱或正則表示式到秩的對映,這些秩與r
指定的預設秩不同。例如,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}
。 - alpha_pattern (
dict
) — 從層名稱或正則表示式到 alpha 的對映,這些 alpha 與alpha
指定的預設 alpha 不同。例如,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}
。 - modules_to_save (
Optional[List[str]]
) — 除介面卡層外,需要設定為可訓練並儲存在最終檢查點中的模組列表。
LoKrModel 的配置類。
LoKrModel
class peft.LoKrModel
< 源 >( 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 (
torch.nn.Module
) — 介面卡調優層將附加到的模型。 - config (LoKrConfig) — LoKr 模型的配置。
- adapter_name (
str
) — 介面卡的名稱,預設為"default"
。 - low_cpu_mem_usage (
bool
,optional
, 預設為False
) — 在元裝置上建立空的介面卡權重。有助於加快載入過程。
返回
torch.nn.Module
LoKr 模型。
從預訓練模型建立低秩克羅內克積(Low-Rank Kronecker Product)模型。原始方法在 https://huggingface.co/papers/2108.06098 和 https://huggingface.co/papers/2309.14859 中有部分描述。當前實現大量借鑑了 https://github.com/KohakuBlueleaf/LyCORIS/blob/eb460098187f752a5d66406d3affade6f0a07ece/lycoris/modules/lokr.py
示例
>>> from diffusers import StableDiffusionPipeline
>>> from peft import LoKrModel, LoKrConfig
>>> config_te = LoKrConfig(
... r=8,
... lora_alpha=32,
... target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
... rank_dropout=0.0,
... module_dropout=0.0,
... init_weights=True,
... )
>>> config_unet = LoKrConfig(
... r=8,
... lora_alpha=32,
... target_modules=[
... "proj_in",
... "proj_out",
... "to_k",
... "to_q",
... "to_v",
... "to_out.0",
... "ff.net.0.proj",
... "ff.net.2",
... ],
... rank_dropout=0.0,
... module_dropout=0.0,
... init_weights=True,
... use_effective_conv2d=True,
... )
>>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> model.text_encoder = LoKrModel(model.text_encoder, config_te, "default")
>>> model.unet = LoKrModel(model.unet, config_unet, "default")
屬性:
- model (
~torch.nn.Module
) — 將要被適配的模型。 - peft_config (LoKrConfig): LoKr 模型的配置。