PEFT documentation

Polytropon

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Polytropon

Polytropon 是一个多任务模型,其“库存”中包含多个不同的 LoRA 适配器。该模型通过路由函数学习库存中适配器的正确组合,从而为特定任务选择最佳的模块子集。PEFT 还支持针对 Polytropon 的 Multi-Head Adapter Routing (MHR),它通过更细粒度地组合适配器头来构建并改进路由函数。适配器头被划分为不相交的块,并为每个块学习不同的路由函数,从而允许更高的表达力。

多任务学习中组合模块化技能
用于跨任务泛化的多头适配器路由

该论文的摘要如下:

模块化设计鼓励神经网络模型解耦并重组知识的不同方面,从而更系统地向新任务进行泛化。在本工作中,我们假设每个任务都与一个(可能较小的)技能库中的潜在离散技能子集相关联。相应地,技能对应于参数高效(稀疏 / 低秩)的模型参数化。通过联合学习这些参数以及任务-技能分配矩阵,每个任务的网络被实例化为激活技能参数的平均值。为了促进技能在任务之间形成非平凡的软划分,我们实验了一系列归纳偏置,例如印度自助餐过程先验和双速学习率。我们在两个主要设置中评估了我们的潜在技能模型:1) 在 BabyAI 平台的 8 个层级上进行基于接地指令跟随的多任务强化学习;以及 2) 在 CrossFit 上对预训练的文本到文本生成模型进行少样本适应,该基准包含 160 个 NLP 任务。我们发现,与知识在任务间纠缠的全共享、任务特定或条件生成参数的基线相比,网络的模块化设计显著提高了强化学习中的样本效率和监督学习中的少样本泛化能力。此外,我们展示了离散技能如何有助于可解释性,因为它们生成了明确的任务层级。

如果您想先尝试路由而不进行训练,可以查看 Arrow LoRA 变体。

API

PolyConfig

类 peft.PolyConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truepoly_type: Literal['poly'] = 'poly'n_tasks: int = 1n_skills: int = 4n_splits: int = 1 )

参数

  • r (int) — Poly 中每个 Lora 的注意力维度。
  • target_modules (Union[List[str],str]) — 要应用 Poly 的模块名称。
  • exclude_modules (Optional[Union[List[str], str]]) — 不应用适配器的模块名称。传入字符串时,将执行正则表达式匹配。传入字符串列表时,将执行精确匹配,或检查模块名称是否以传入的任一字符串结尾。
  • modules_to_save (List[str]) — 除 Poly 层外,需要设置为可训练并在最终检查点中保存的模块列表。
  • init_weights (bool) — 是否执行 Poly 权重的初始化。
  • poly_type (Literal["poly"]) — 要使用的 Poly 模块变体。目前仅支持 “poly”。
  • n_tasks (int) — 多任务场景中的任务数量。
  • n_skills (int) — 每个 Poly 层中的技能(LoRA)数量。
  • n_splits (int) — Poly 层中每个 LoRA 的拆分数量。大于 1 的值表示使用了多头路由(MHR)。

这是用于存储 PolyModel 配置的类。

PolyModel

类 peft.PolyModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub