PEFT 文档

LoKr

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

LoKr

低秩克罗内克积(LoKr)是一种 LoRA 变体方法,它用两个低秩矩阵近似大型权重矩阵,并将其与克罗内克积结合。LoKr 还提供了一个可选的第三个低秩矩阵,以便在微调期间提供更好的控制。

LoKrConfig

peft.LoKrConfig

< >

( peft_type: Union = None auto_mapping: Optional = None base_model_name_or_path: Optional = None revision: Optional = None task_type: Union = 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 target_modules: Union = None init_weights: bool = True layers_to_transform: Union = None layers_pattern: Optional = None modules_to_save: Optional = None )

参数

  • r (int) — LoKr秩。
  • alpha (int) — LoKr缩放的alpha参数。
  • rank_dropout (float) — 训练期间秩维度的 dropout 概率。
  • module_dropout (float) — 训练期间禁用 LoKr 模块的 dropout 概率。
  • use_effective_conv2d (bool) — 对核大小 ksize > 1 的 Conv2d 使用参数有效分解(FedPara 论文中的“命题 3”)。
  • decompose_both (bool) — 执行左侧克罗内克积矩阵的秩分解。
  • decompose_factor (int) — 克罗内克积分解因子。
  • target_modules (Optional[Union[List[str], str]]) — 要应用适配器的模块名称。如果指定此参数,则仅替换具有指定名称的模块。传递字符串时,将执行正则表达式匹配。传递字符串列表时,将执行精确匹配或检查模块名称是否以传递的任何字符串结尾。如果将其指定为“all-linear”,则选择所有线性/Conv1D模块,但不包括输出层。如果未指定此参数,则将根据模型架构选择模块。如果未知架构,则会引发错误 - 在这种情况下,应手动指定目标模块。

  • init_weights (bool) — 是否执行适配器权重的初始化。默认为 True,不建议传递 False
  • layers_to_transform (Union[List[int], int]) — 要转换的层索引。如果传递整数列表,则会将适配器应用于此列表中指定的层索引。如果传递单个整数,则会将转换应用于该索引处的层。
  • layers_pattern (str) — 层模式名称,仅在 layers_to_transform 不为 None 时使用。
  • rank_pattern (dict) — 层名称或正则表达式到秩的映射,这些秩与 r 指定的默认秩不同。
  • alpha_pattern (dict) — 层名称或正则表达式到 alpha 的映射,这些 alpha 与 alpha 指定的默认 alpha 不同。
  • modules_to_save (Optional[List[str]]) — 除了适配器层之外,要设置为可训练并在最终检查点中保存的模块列表。

LoKrModel 的配置类。

LoKrModel

peft.LoKrModel

< >

( model config adapter_name low_cpu_mem_usage: bool = False ) torch.nn.Module

参数

  • model (torch.nn.Module) — 将附加适配器调整器层的模型。
  • config (LoKrConfig) — LoKr 模型的配置。
  • low_cpu_mem_usage (bool, 可选, 默认为 False) — 在元设备上创建空的适配器权重。有助于加速加载过程。

返回

torch.nn.Module

LoKr 模型。

从预训练模型创建低秩克罗内克积模型。原始方法部分描述于 https://arxiv.org/abs/2108.06098https://arxiv.org/abs/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 模型的配置。
< > 在 GitHub 上更新