适配器
一个用于参数高效与模块化迁移学习的统一库
网站 • 文件 • 论文
适配器 是 HuggingFace的Transformers 的一个附加库,将 10多种适配器方法 集成到 20多种最先进的Transformer模型 中,以最小的代码开销进行训练和推理。
适配器 提供了一个统一接口,用于高效的微调和模块化迁移学习,支持诸如全精度或量化训练(例如 Q-LoRA, Q-Bottleneck适配器或Q-PrefixTuning),通过任务算术的 适配器合并 或通过 组合块 进行多个适配器的组合,允许在参数高效的NLP任务迁移学习中进行高级研究。
注意: 适配器 库已取代
adapter-transformers
包。所有以前训练的适配器兼容新库。有关转移的信息请阅读:https://docs.adapterhub.ml/transitioning.html。
安装
adapters
目前支持 Python 3.8+ 和 PyTorch 1.10+。
在 安装PyTorch 之后,你可以从PyPI安装 adapters
...
pip install -U adapters
... 或通过克隆库文件源码安装:
git clone https://github.com/adapter-hub/adapters.git
cd adapters
pip install .
快速浏览
加载预训练适配器:
from adapters import AutoAdapterModel
from transformers import AutoTokenizer
model = AutoAdapterModel.from_pretrained("roberta-base")
tokenizer = AutoTokenizer.from_pretrained("roberta-base")
model.load_adapter("AdapterHub/roberta-base-pf-imdb", source="hf", set_active=True)
print(model(**tokenizer("This works great!", return_tensors="pt")).logits)
适应现有模型设置:
import adapters
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("t5-base")
adapters.init(model)
model.add_adapter("my_lora_adapter", config="lora")
model.train_adapter("my_lora_adapter")
# 你的常规训练循环...
灵活配置适配器:
from adapters import ConfigUnion, PrefixTuningConfig, ParBnConfig, AutoAdapterModel
model = AutoAdapterModel.from_pretrained("microsoft/deberta-v3-base")
adapter_config = ConfigUnion(
PrefixTuningConfig(prefix_length=20),
ParBnConfig(reduction_factor=4),
)
model.add_adapter("my_adapter", config=adapter_config, set_active=True)
轻松组合单个模型中的适配器:
from adapters import AdapterSetup, AutoAdapterModel
import adapters.composition as ac
model = AutoAdapterModel.from_pretrained("roberta-base")
qc = model.load_adapter("AdapterHub/roberta-base-pf-trec")
sent = model.load_adapter("AdapterHub/roberta-base-pf-imdb")
with AdapterSetup(ac.Parallel(qc, sent)):
print(model(**tokenizer("What is AdapterHub?", return_tensors="pt")))
有用的资源
HuggingFace关于_Transformers_入门的优秀文档可以在 这里 找到。adapters
完全兼容 Transformers。
要开始使用适配器,请参阅以下位置:
- Colab笔记本教程,一个介绍(适配器)Transformers和AdapterHub主要概念的笔记本系列
- **https://docs.adapterhub.ml**,我们的关于
_adapters_
训练和使用适配器的文档 - **https://adapterhub.ml**,探索可用的预训练适配器模块并分享你自己的适配器
- 示例文件夹 本库包含了HuggingFace的示例训练脚本,许多都改编成适配器训练脚本
已实现的方法
当前,适配器集成了下面列出的所有架构和方法:
方法 | 论文 | 快速链接 |
---|---|---|
瓶颈适配器 | Houlsby et al. (2019) Bapna and Firat (2019) | 快速入门, 笔记本 |
适配器融合 | Pfeiffer et al. (2021) | 文档:训练, 笔记本 |
MAD-X, 可逆适配器 | Pfeiffer et al. (2020) | 笔记本 |
适配器丢弃 | Rücklé et al. (2021) | 笔记本 |
MAD-X 2.0, 嵌入训练 | Pfeiffer et al. (2021) | 文档:嵌入, 笔记本 |
前缀微调 | Li and Liang (2021) | 文档 |
并行适配器, 混合匹配适配器 | He et al. (2021) | 文档 |
紧凑适配器 | Mahabadi et al. (2021) | 文档 |
LoRA | Hu et al. (2021) | 文档 |
(IA)^3 | Liu et al. (2022) | 文档 |
UniPELT | Mao et al. (2022) | 文档 |
提示微调 | Lester et al. (2021) | 文档 |
QLoRA | Dettmers et al. (2023) | 笔记本 |
ReFT | Wu et al. (2024) | 文档 |
适配器任务算法 | Chronopoulou et al. (2023) Zhang et al. (2023) | 文档, 笔记本 |
支持的模型
我们目前支持在文档中的 模型概述 页面 列出的所有 PyTorch 版本的模型。
开发和贡献
要开始自己开发_适配器_并了解更多关于贡献的方法,请参见 https://docs.adapterhub.ml/contributing.html。
引用
如果您在工作中使用_适配器_,请考虑引用我们的库文章:Adapters: A Unified Library for Parameter-Efficient and Modular Transfer Learning
@inproceedings{poth-etal-2023-adapters,
title = "Adapters: A Unified Library for Parameter-Efficient and Modular Transfer Learning",
author = {Poth, Clifton and
Sterz, Hannah and
Paul, Indraneil and
Purkayastha, Sukannya and
Engl{\"a}nder, Leon and
Imhof, Timo and
Vuli{\'c}, Ivan and
Ruder, Sebastian and
Gurevych, Iryna and
Pfeiffer, Jonas},
booktitle = "Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing: System Demonstrations",
month = dec,
year = "2023",
address = "Singapore",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.emnlp-demo.13",
pages = "149--160",
}
此外,对于前身adapter-transformers
、Hub基础设施和由AdapterHub团队上传的适配器,请考虑引用我们的初始文章:AdapterHub: A Framework for Adapting Transformers
@inproceedings{pfeiffer2020AdapterHub,
title={AdapterHub: 用于适应转换器的框架},
author={Pfeiffer, Jonas 和
R{\"u}ckl{\'e}, Andreas 和
Poth, Clifton 和
Kamath, Aishwarya 和
Vuli{\'c}, Ivan 和
Ruder, Sebastian 和
Cho, Kyunghyun 和
Gurevych, Iryna},
booktitle={2020年自然语言处理经验方法会议:系统演示},
pages={46--54},
year={2020}
}