使用Optimum的BetterTransformer为常见的transformer结构模型进行推理加速

概述

🤗 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 将本地缩放点积注意力运算符 (SDPA) 包含在 torch.nn.functional 中。这个函数包含了几种实现方式,可以根据输入和使用的硬件进行应用。有关更多信息,请参见官方文档和此博客文章中的基准测试。

我们在 🤗 Optimum 中提供了这些优化的开箱即用集成,因此你可以转换任何支持的 🤗 Transformers 模型,使其在相关情况下使用优化路径和 scaled_dot_product_attention 函数。

PyTorch 原生的 scaled_dot_product_attention 正在慢慢成为默认值,并在 🤗 Transformers 中集成。对于在 Transformers 中支持 SDPA 的模型,我们不再推荐使用 BetterTransformer,而是建议直接使用 Transformers 和 PyTorch 的最新版本进行注意力优化(Flash Attention 和 memory-efficient attention),通过 SDPA 实现。

PyTorch 原生的 scaled_dot_product_attention 运算符只能在未提供 attention_mask 的情况下调度到 Flash Attention。

因此,默认情况下,在训练模式中,BetterTransformer 集成 放弃了 mask 支持,仅可用于不需要批量训练填充 mask 的训练。例如,这种情况适用于掩码语言模型或因果语言模型。BetterTransformer 不适用于需要填充 mask 任务的模型微调。

在推理模式中,为了保证正确性,保留填充 mask,因此仅在 batch size = 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=False)#不保留原模型

以bge-m3-reranker-v2为例,3090下fp16+bettertransformer 对比fp32可以加速2.5x左右

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个 API 客户端和一份 TS 学习手册

第75期: Insomnia:超好看的 API 客户端 项目介绍: 一款适用于 GraphQL、REST、WebSockets 和 gRPC 的开源 API 客户端,颜值超高。 跨平台,支持 Mac、Windows 和 Linux。但不支持网页版,需要下载客户端。…

Supabase 自托管部署实践

Supabase 是 Firebase 的开源替代品。使用 Postgres 数据库、身份验证、即时 API、边缘函数、实时订阅、存储和向量嵌入来启动您的项目。 Supabase介绍 Supabase 是一个开源的后端即服务(BaaS)平台,提供了一系列工具和服务,帮助…

CrimsonEDR:一款恶意软件模式识别与EDR策略评估工具

关于CrimsonEDR CrimsonEDR是一个功能强大的开源项目,该项目旨在帮助广大研究人员识别特定的恶意软件模式,以此来优化终端检测与响应(EDR)的策略方案。通过使用各种不同的检测方案,可以加深开发人员与研究人员加深对安…

SpringBoot入门实战:SpringBoot整合WebSocket

1.背景介绍 SpringBoot是一个快速开发的框架,它可以帮助我们快速开发Web应用程序。SpringBoot整合WebSocket是SpringBoot的一个组件,它可以帮助我们快速开发WebSocket应用程序。 WebSocket是一种新的协议,它可以让客户端和服务器之间建立持久…

MSYS2教程(windows环境下使用linux工具)

MSYS2教程(windows环境下使用linux工具) 1.msys2简介 MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境,可以在Windows系统中编译和运行许多Linux应用程序和工具。 MS…

数据增强:目标检测算法的炼金术

数据增强:目标检测算法的炼金术 在目标检测领域,数据增强技术是一种提高模型泛化能力和性能的关键方法。通过数据增强,我们可以从现有的训练集中生成更多的训练样本,这些样本通过应用不同的变换来模拟真实世界中的多样性。本文将…

【网络安全】一文带你了解什么是【CSRF攻击】

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,它利用已认证用户在受信任网站上的身份,诱使用户在不知情的情况下执行恶意操作。具体来说,攻击者通过各种方式(如发送恶意链…

excel修改批量一列单价的金额并保留1位小数

1.打开表格,要把单价金额变成现在的两倍,数据如下: 2.把单价这一列粘贴到一个新的sheet页面,在B2单元格输入公式:A2*2 然后按enter回车键,这时候吧鼠标放到B2单元格右下角,会出现一个黑色的小加号&#xf…

《信创数据库沙龙上海站:共话发展,智启未来》

2024 年 6 月 29 日周六 14:00,信创数据库沙龙在上海市徐汇区建国西路 285 号科投大厦 13 楼金星厅成功举办。本次活动吸引了众多学术界和产业界的专家、学者以及技术爱好者参与。 活动中,多位嘉宾带来了精彩分享。薛晓刚探讨了 Oracle 在国内的前景&a…

EAGLE-2:一种高效无损的推测性采样方法,提升LLM的推理速度。

欢迎关注我的公众号:Halo咯咯 01。概述 北京大学的研究人员联合微软研究院、滑铁卢大学以及Vector研究所共同推出了EAGLE-2,这是一种利用上下文感知的动态草图树来增强推测性采样的方法。EAGLE-2在先前的EAGLE方法基础上进行了改进,不仅显著…

python列表、元组、集合、字典整理

特征对比 下面是Python中列表、元组、集合和字典的特征对比表格: 特征列表 (List)元组 (Tuple)集合 (Set)字典 (Dictionary)定义符号[ ]( ){ }{ }可变性可变不可变可变可变有序性有序有序无序无序元素访问通过索引访问,索引从0开始通过索引访问&#x…

一个启动脚本例子

一、全部代码 #!/bin/bash DATE$(date %Y%m%d)SOURCE"abc.jar" TARGET"backup/abc.jar.jew.$DATE"if [ -f "$SOURCE" ]; thencp "$SOURCE" "$TARGET" firm -f abc.jar mv abc_1.jar abc.jarpidNumps -ef | grep $SOURCE |…

【源码+文档+调试讲解】基于vue的线上点餐系统

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了线上点餐系统的开发全过程。通过分析线上点餐系统管理的不足,创建了一个计算机管理线上点餐系统的方案。文章介绍了线上点餐系统的系统分析部分&…

电脑提示vcomp140.dll缺失怎么解决?vcomp140.dll是什么文件?

当你的电脑提示vcomp140.dll缺失的时候,你就应该要注意了,因为这个提示的出现,代表你的某个程序开不了!想要程序能正常运行,那么只要修复好这个vcomp140.dll文件就可以了,下面我们就来给大家详细的说说说vc…

超详细之IDEA上传项目到Gitee完整步骤

1. 注册gitee 账号密码,gitee官网地址:Gitee官网,注册完成后,登录。 2. 创建仓库,在主页左下角有新建按钮,点击新建后会进入到此页面填写仓库信息。 3. 创建完成后复制仓库地址 4. 打开IntelliJ IDEA新建或…

python自动化之schedule

目录 代码(以每5秒1次为例): 每5分钟1次 每2小时1次 每天18:00执行 用到的库:schedule,time 实现的效果:按秒来运行任务,按分钟来运行任务,按小时来运行任务,按天来运行任务 代…

鸿蒙3.0WebView网络错误问题

背景,荣耀9x,混淆才会出这个问题。 [ERROR:ssl_client_socket_impl.cc(981)] handshake failed; returned -1, SSL error code 1, net_error -2 NetError.java int SSLClientSocketImpl::DoHandshake() {crypto::OpenSSLErrStackTracer err_tracer(FRO…

Oracle新特性速递:未来数据库技术的无限可能

文章目录 一、自治数据库:智能化与自动化的革命二、机器学习集成:智能数据分析的新境界三、区块链技术:确保数据完整性与透明性四、云原生数据库:灵活扩展与快速部署五、人工智能优化器:智能查询执行计划《Oracle从入门…

centos7搭建zookeeper 集群 1主2从

centos7搭建zookeeper 集群 准备前提规划防火墙开始搭建集群192.168.83.144上传安装包添加环境变量修改zookeeper 的配置 192.168.83.145 和 192.168.83.146 配置 启动 集群 准备 vm 虚拟机centos7系统zookeeper 安装包FinalShell或者其他shell工具 前提 虚拟机安装好3台cen…

为什么我的Skype点数不见了?如何重新激活 Skype 点数?

您超过180天没有使用过点数打电话功能,点数暂时封存在您的账户里面,需要您手动激活(目前必须要登录网页版skype) 可再次使用。 如何重新激活 Skype 点数? 登录到你的帐户 . 选择 重新激活信用额度 .注意: …