使用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.pswp.cn/web/37673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37673.shtml
英文地址,請注明出處:http://en.pswp.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 點數? 登錄到你的帳戶 . 選擇 重新激活信用額度 .注意: …