Optimum 文档
概述
并获得增强的文档体验
开始使用
概述
🤗 Optimum 提供了一个名为 BetterTransformer 的 API,它是标准 PyTorch Transformer API 的快速路径,通过稀疏性和融合内核(如 Flash Attention)在 CPU 和 GPU 上获得令人感兴趣的加速。目前,BetterTransformer 支持来自原生 nn.TransformerEncoderLayer
以及来自 torch.nn.functional.scaled_dot_product_attention
的 Flash Attention 和 Memory-Efficient Attention 的快速路径。
快速入门
自 1.13 版本以来,PyTorch 发布了 其标准 Transformer API 快速路径的稳定版本,该版本为基于 Transformer 的模型提供了开箱即用的性能改进。您可以在大多数消费级设备(包括 CPU、新旧版本的 NVIDIA GPU)上获得令人感兴趣的加速。您现在可以在 🤗 Optimum 中与 Transformers 一起使用此功能,并将其用于 Hugging Face 生态系统中的主要模型。
在 2.0 版本中,PyTorch 包含一个原生的 scaled dot-product attention 运算符 (SDPA) 作为 torch.nn.functional
的一部分。此函数包含多个实现,可以根据输入和使用的硬件应用。有关更多信息,请参阅 官方文档,以及 此博客文章 以获取基准测试。
我们在 🤗 Optimum 中提供了与这些优化的开箱即用集成,以便您可以转换任何受支持的 🤗 Transformers 模型,从而在相关时使用优化的路径和 scaled_dot_product_attention
函数。
因此,默认情况下,在训练模式下,BetterTransformer 集成放弃了掩码支持,只能用于不需要填充掩码进行批量训练的训练。例如,掩码语言建模或因果语言建模就是这种情况。 BetterTransformer 不适用于在需要填充掩码的任务上微调模型。
在推理模式下,填充掩码被保留以确保正确性,因此只有在批量大小 = 1 的情况下才应预期加速。
支持的模型
以下是支持的模型列表
- AlBERT
- Bark
- BART
- BERT
- BERT-generation
- BLIP-2
- BLOOM
- CamemBERT
- CLIP
- CodeGen
- Data2VecText
- DistilBert
- DeiT
- Electra
- Ernie
- Falcon (无需使用 BetterTransformer,Transformers 直接支持)
- FSMT
- GPT2
- GPT-j
- GPT-neo
- GPT-neo-x
- GPT BigCode (SantaCoder, StarCoder - 无需使用 BetterTransformer,Transformers 直接支持)
- HuBERT
- LayoutLM
- Llama & Llama2 (无需使用 BetterTransformer,Transformers 直接支持)
- MarkupLM
- Marian
- MBart
- M2M100
- OPT
- ProphetNet
- RemBERT
- RoBERTa
- RoCBert
- RoFormer
- Splinter
- Tapas
- ViLT
- ViT
- ViT-MAE
- ViT-MSN
- Wav2Vec2
- Whisper (无需使用 BetterTransformer,Transformers 直接支持)
- XLMRoberta
- YOLOS
如果您希望支持更多模型,请在 🤗 Optimum 中提出 issue 让我们知道,或者如果您想自己添加,请查看贡献指南!
快速使用
为了使用 BetterTransformer
API,只需运行以下命令
>>> from transformers import AutoModelForSequenceClassification
>>> from optimum.bettertransformer import BetterTransformer
>>> model_hf = AutoModelForSequenceClassification.from_pretrained("bert-base-cased")
>>> model = BetterTransformer.transform(model_hf, keep_original_model=True)
如果您想使用 BetterTransformer
版本覆盖当前模型,可以保留 keep_original_model=False
。
有关如何深入理解其使用的更多详细信息,请查看 tutorials
部分,或查看 Google colab 演示!