日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Transformers 中原生支持的量化方案概述

發(fā)布時(shí)間:2023/11/16 windows 75 coder
生活随笔 收集整理的這篇文章主要介紹了 Transformers 中原生支持的量化方案概述 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文旨在對(duì) transformers 支持的各種量化方案及其優(yōu)缺點(diǎn)作一個(gè)清晰的概述,以助于讀者進(jìn)行方案選擇。

目前,量化模型有兩個(gè)主要的用途:

  • 在較小的設(shè)備上進(jìn)行大模型推理
  • 對(duì)量化模型進(jìn)行適配器微調(diào)

到目前為止,transformers 已經(jīng)集成并 原生 支持了 bitsandbytesauto-gptq 這兩個(gè)量化庫(kù)。請(qǐng)注意,?? optimum 還支持更多的量化方案,但本文不會(huì)涉及這一塊內(nèi)容。

要詳細(xì)了解每種方案的更多信息,可查看下文列出的相關(guān)資源,或者閱讀相應(yīng)的 transformers 文檔。

另請(qǐng)注意,下文內(nèi)容僅適用于 PyTorch 模型, TensorflowFlax/JAX 模型不在討論范圍之內(nèi)。

目錄

  • 資源
  • bitsandbytes 與 auto-gptq 之比較
  • 深入研究速度基準(zhǔn)
  • 總結(jié)與最后的話
  • 致謝

資源

  • GPTQ 博文 – 概述什么是 GPTQ 量化方法以及如何使用它。
  • bistandbytes 4 比特量化博文 - 本文介紹了 4 比特量化和 QLoRa,QLoRa 是一種高效的微調(diào)方法。
  • bistandbytes 8 比特量化博文 - 本文解釋了如何與 bitsandbytes 配合使用 8 比特量化。
  • 有關(guān) GPTQ 基礎(chǔ)用法的 Google Colab 筆記本 - 本筆記本展示了如何使用 GPTQ 方法量化你自己的 transformer 模型,如何用量化模型進(jìn)行推理,以及如何對(duì)量化模型進(jìn)行微調(diào)。
  • 有關(guān) bitsandbytes 基礎(chǔ)用法的 Google Colab 筆記本 - 該筆記本展示了如何在推理中使用 4 比特模型及其所有變體,以及如何在免費(fèi)的 Google Colab 實(shí)例上運(yùn)行 GPT-neo-X (20B 模型)。
  • Merve 撰寫的關(guān)于量化的博文 - 本文簡(jiǎn)要介紹了量化以及 transformers 中原生支持的量化方法。

bitsandbytes 與 auto-gptq 之比較

本節(jié)我們將討論 bitsandbytesgptq 量化各自的優(yōu)缺點(diǎn)。請(qǐng)注意,這些比較主要基于社區(qū)的反饋,它們具有一定的時(shí)效性,會(huì)隨著時(shí)間的推移而變化,比如說(shuō)其中一些功能缺失已被納入相應(yīng)庫(kù)的路線圖中了。

bitsandbytes 有什么好處?

簡(jiǎn)單: bitsandbytes 依舊是量化任何模型的最簡(jiǎn)單方法,因?yàn)樗恍枰炕?zhǔn)數(shù)據(jù)及校準(zhǔn)過(guò)程 (即零樣本量化)。任何模型只要含有 torch.nn.Linear 模塊,就可以對(duì)其進(jìn)行開箱即用的量化。每當(dāng)在 transformers 中添加新架構(gòu)時(shí),只要其可以用 accelerate 庫(kù)的 device_map="auto" 加載,用戶就可以直接受益于開箱即用的 bitsandbytes 量化,同時(shí)該方法對(duì)性能的影響也是最小的。量化是在模型加載時(shí)執(zhí)行的,無(wú)需運(yùn)行任何后處理或準(zhǔn)備步驟。

跨模態(tài)互操作性: 由于量化模型的唯一條件是包含 torch.nn.Linear 層,因此量化對(duì)于任何模態(tài)都可以實(shí)現(xiàn)開箱即用。用戶可以開箱即用地加載諸如 Whisper、ViT、Blip2 之類的 8 比特或 4 比特模型。

合并適配器 (adapter) 時(shí)性能下降為 0: (如果你對(duì)此不熟悉,請(qǐng)參閱 此文 以獲得有關(guān)適配器和 PEFT 的更多信息)。如果你在量化基礎(chǔ)模型之上訓(xùn)練適配器,則可以將適配器合并在基礎(chǔ)模型之上進(jìn)行部署,而不會(huì)降低推理性能。你甚至還可以在反量化模型之上 合并 適配器!GPTQ 不支持此功能。

autoGPTQ 有什么好處?

文本生成速度快: 對(duì) 文本生成 任務(wù)而言,GPTQ 量化模型的速度比 bitsandbytes 量化模型的速度更快,下文我們會(huì)詳細(xì)比較。

n 比特支持: GPTQ 算法可以將模型量化至 2 比特!但這可能會(huì)導(dǎo)致嚴(yán)重的質(zhì)量下降。我們建議使用 4 比特,這個(gè)值對(duì) GPTQ 而言是個(gè)很好的折衷。

易于序列化: GPTQ 模型支持任意比特的序列化。只要安裝了所需的軟件包,就支持開箱即用地從 TheBloke 空間 中加載后綴為 -GPTQ 的模型。 bitsandbytes 支持 8 比特序列化,但尚不支持 4 比特序列化。

AMD 支持: 開箱即用支持 AMD GPU!

bitsandbytes 還有哪些潛在的改進(jìn)空間?

文本生成速度比 GPTQ 慢: 使用 generate 接口時(shí),bitsandbytes 4 比特模型比 GPTQ 慢。

4 比特權(quán)重不可序列化: 目前,4 比特模型無(wú)法序列化。社區(qū)用戶經(jīng)常提出這樣的請(qǐng)求,我們相信 bitsandbytes 維護(hù)者應(yīng)該很快就能解決這個(gè)問(wèn)題,因?yàn)檫@已經(jīng)在其路線圖中了!

autoGPTQ 還有哪些潛在的改進(jìn)空間?

校準(zhǔn)數(shù)據(jù)集: 對(duì)校準(zhǔn)數(shù)據(jù)集的需求可能會(huì)讓一些用戶難以用上 GPTQ。此外,模型量化可能需要幾個(gè)小時(shí) (例如,根據(jù) 該論文第 2 節(jié),175B 的模型需要 4 個(gè) GPU 時(shí))。

目前僅可用于語(yǔ)言模型: 截至目前,用 autoGPTQ 對(duì)模型進(jìn)行量化的 API 僅支持語(yǔ)言模型。使用 GPTQ 算法量化非文本 (或多模態(tài)) 模型應(yīng)該是可行的,但原始論文或 auto-gptq 代碼庫(kù)中尚未對(duì)此有詳細(xì)說(shuō)明。如果社區(qū)對(duì)這方面很有興趣,將來(lái)可能會(huì)考慮這一點(diǎn)。

深入研究速度基準(zhǔn)

我們決定在不同硬件上使用 bitsandbytes 和 auto-gptq 在推理和適配器微調(diào)這兩大場(chǎng)景上進(jìn)行一系列廣泛的基準(zhǔn)測(cè)試。推理基準(zhǔn)測(cè)試應(yīng)該讓用戶了解不同推理方法之間可能存在的速度差異,而適配器微調(diào)基準(zhǔn)測(cè)試應(yīng)該讓用戶在需要決定選擇 bitsandbytes 還是 GPTQ 基礎(chǔ)模型進(jìn)行適配器微調(diào)時(shí)有一個(gè)清晰的判斷。

基本設(shè)置如下:

  • bitsandbytes: 使用 bnb_4bit_compute_dtype=torch.float16 進(jìn)行 4 比特量化。確保使用 bitsandbytes>=0.41.1 ,以用上 4 比特加速核函數(shù)。
  • auto-gptq: 確保 auto-gptq>=0.4.0 以用上 exllama 加速核函數(shù)進(jìn)行 4 比特量化。

推理速度 (僅前向)

該基準(zhǔn)測(cè)試僅測(cè)量預(yù)填充 (prefill) 步驟,該步驟對(duì)應(yīng)于訓(xùn)練期間的前向傳遞。測(cè)試基于單張英偉達(dá) A100-SXM4-80GB GPU,提示長(zhǎng)度為 512,模型為 meta-llama/Llama-2-13b-hf

batch size = 1 時(shí):

量化方法 act_order 比特?cái)?shù) group_size 加速核 加載時(shí)間 (秒) 每詞元延遲 (毫秒) 吞吐 (詞元/秒) 峰值顯存 (MB)
fp16 None None None None 26.0 36.958 27.058 29152.98
gptq False 4 128 exllama 36.2 33.711 29.663 10484.34
bitsandbytes None 4 None None 37.64 52.00 19.23 11018.36

batch size = 16 時(shí):

量化方法 act_order 比特?cái)?shù) group_size 加速核 加載時(shí)間 (秒) 每詞元延遲 (毫秒) 吞吐 (詞元/秒) 峰值顯存 (MB)
fp16 None None None None 26.0 69.94 228.76 53986.51
gptq False 4 128 exllama 36.2 95.41 167.68 34777.04
bitsandbytes None 4 None None 37.64 113.98 140.38 35532.37

我們可以看到,bitsandbyes 和 GPTQ 的預(yù)填充速度相當(dāng),batch size 比較大時(shí) GPTQ 稍快一些。欲了解有關(guān)該基準(zhǔn)測(cè)試的更多詳細(xì)信息,請(qǐng)參閱此 鏈接。

生成速度

下面測(cè)試推理過(guò)程中模型的生成速度,你可以在 此處 找到基準(zhǔn)測(cè)試腳本,用于重現(xiàn)我們的結(jié)果。

use_cache

我們先測(cè)試 use_cache 參數(shù)的影響,以更好地了解在生成過(guò)程中鍵值緩存對(duì)速度的影響。

該基準(zhǔn)測(cè)試在 A100 上運(yùn)行,提示長(zhǎng)度為 30,生成詞元數(shù)也為 30,模型為 meta-llama/Llama-2-7b-hf

use_cache=True 時(shí):

use_cache=False 時(shí):

通過(guò)這兩個(gè)基準(zhǔn)測(cè)試,可以得出結(jié)論,使用注意力緩存時(shí),生成速度會(huì)更快,該結(jié)論符合預(yù)期。此外,一般來(lái)說(shuō),GPTQ 比 bitsandbytes 更快。例如, batch_size=4use_cache=True 時(shí),GPTQ 速度快了一倍!因此,我們下一個(gè)基準(zhǔn)測(cè)試中會(huì)直接使用 use_cache=True 。請(qǐng)注意, use_cache=True 會(huì)消耗更多顯存。

硬件

下面,我們看看量化模型在不同的硬件上的表現(xiàn)。我們使用的提示長(zhǎng)度為 30,生成 30 個(gè)詞元,使用的模型是 meta-llama/Llama-2-7b-hf

單張 A100:

單張 T4:

單張 Titan RTX:

從上面的基準(zhǔn)測(cè)試中,我們可以得出結(jié)論,對(duì)于這三款 GPU,GPTQ 都比 bitsandbytes 更快。

生成長(zhǎng)度

在下面的基準(zhǔn)測(cè)試中,我們將嘗試不同的生成長(zhǎng)度,看看它們對(duì)量化模型速度的影響。實(shí)驗(yàn)基于 A100,我們使用的提示長(zhǎng)度為 30,并改變生成詞元的長(zhǎng)度。使用的模型是 meta-llama/Llama-2-7b-hf

生成 30 個(gè)詞元:

生成 512 個(gè)詞元:

從以上基準(zhǔn)測(cè)試中,我們可以得出結(jié)論,無(wú)論生成長(zhǎng)度如何,GPTQ 都比 bitsandbytes 更快。

適配器微調(diào) (前向 + 后向)

對(duì)量化模型進(jìn)行全模型微調(diào)是不可能的。但是,你可以利用參數(shù)高效微調(diào) (PEFT) 來(lái)微調(diào)量化模型,在其之上訓(xùn)練新的適配器。我們使用一種名為“低秩適配器 (LoRA)”的微調(diào)方法: 無(wú)需微調(diào)整個(gè)模型,僅需微調(diào)這些適配器并將它們正確加載到模型中。我們來(lái)對(duì)比一下微調(diào)速度吧!

該基準(zhǔn)測(cè)試基于英偉達(dá) A100 GPU,我們使用 Hub 中的 meta-llama/Llama-2-7b-hf 模型。請(qǐng)注意,對(duì)于 GPTQ 模型,我們必須禁用 exllama 加速核,因?yàn)樗恢С治⒄{(diào)。

從結(jié)果中,我們可以得出結(jié)論,bitsandbytes 的微調(diào)速度比 GPTQ 更快。

性能退化

量化對(duì)于減少內(nèi)存消耗非常有用。然而,它也會(huì)帶來(lái)性能退化。我們使用 Open-LLM 排行榜 來(lái)比較性能!

對(duì)于 7B 模型:

模型 均值 ARC Hellaswag MMLU TruthfulQA
meta-llama/llama-2-7b-hf 54.32 53.07 78.59 46.87 38.76
meta-llama/llama-2-7b-hf-bnb-4bit 53.4 53.07 77.74 43.8 38.98
TheBloke/Llama-2-7B-GPTQ 53.23 52.05 77.59 43.99 39.32

對(duì)于 13B 模型:

模型 均值 ARC Hellaswag MMLU TruthfulQA
meta-llama/llama-2-13b-hf 58.66 59.39 82.13 55.74 37.38
TheBloke/Llama-2-13B-GPTQ (revision = 'gptq-4bit-128g-actorder_True') 58.03 59.13 81.48 54.45 37.07
TheBloke/Llama-2-13B-GPTQ 57.56 57.25 81.66 54.81 36.56
meta-llama/llama-2-13b-hf-bnb-4bit 56.9 58.11 80.97 54.34 34.17

從上面的結(jié)果中,我們可以得出結(jié)論,模型越大,退化越少。更有意思的是,所有的退化都很小!

總結(jié)與最后的話

通過(guò)本文,我們比較了多種設(shè)置下的 bitsandbytes 和 GPTQ 量化。我們發(fā)現(xiàn),bitsandbytes 更適合微調(diào),而 GPTQ 更適合生成。根據(jù)這一觀察,獲得最佳合并模型的一種方法是:

  • (1) 使用 bitsandbytes 量化基礎(chǔ)模型 (零樣本量化)
  • (2) 添加并微調(diào)適配器
  • (3) 將訓(xùn)練后的適配器合并到基礎(chǔ)模型或 反量化模型 之中!
  • (4) 使用 GPTQ 量化合并后的模型并將其用于部署

我們希望這個(gè)概述讓每個(gè)人都能更輕松地將 LLM 應(yīng)用至各自的應(yīng)用場(chǎng)景中,我們期待看到大家用它構(gòu)建自己的有趣應(yīng)用!

致謝

我們要感謝 Ilyas、Clémentine 和 Felix 在基準(zhǔn)測(cè)試上的幫助。

我們還要感謝 Pedro Cuenca 對(duì)本文撰寫的幫助。


英文原文: https://hf.co/blog/overview-quantization-transformers

原文作者: Younes Belkada,Marc Sun,Ilyas Moutawwakil,Clémentine Fourrier,F(xiàn)élix Marty

譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理

審校/排版: zhongdongy (阿東)

總結(jié)

以上是生活随笔為你收集整理的Transformers 中原生支持的量化方案概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。