最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

用 bitsandbytes、4 比特量化和 QLoRA 打造親民的 LLM

2023-11-07 23:56 作者:HuggingFace  | 我要投稿

眾所周知,LLM 規(guī)模龐大,如果在也能消費(fèi)類硬件中運(yùn)行或訓(xùn)練它們將是其親民化的巨大進(jìn)步。我們之前撰寫的 LLM.int8 博文 展示了我們是如何將 LLM.int8 論文 中的技術(shù)通過(guò) bitsandbytes 庫(kù)集成到 transformers 中的。在此基礎(chǔ)上,我們不斷努力以不斷降低大模型的準(zhǔn)入門檻。在此過(guò)程中,我們決定再次與 bitsandbytes 聯(lián)手,支持用戶以 4 比特精度運(yùn)行任何模態(tài) (文本、視覺(jué)、多模態(tài)等) 上的絕大多數(shù) HF 模型。用戶還可以利用 Hugging Face 生態(tài)系統(tǒng)中的工具在 4 比特模型之上訓(xùn)練適配器。這一工作基于 Dettmers 等人最近在 QLoRA 這篇論文中介紹的一種新方法,其論文摘要如下:

我們提出了 QLoRA,這是一種高效的微調(diào)方法,可減少內(nèi)存使用量,使得在單個(gè) 48GB GPU 上就可以微調(diào) 65B 的模型,而且所得模型的性能與全 16 比特微調(diào)相當(dāng)。QLoRA 通過(guò)凍結(jié) 4 比特量化的預(yù)訓(xùn)練語(yǔ)言模型將梯度反向傳播到低秩適配器 (LoRA) 中。我們最好的模型 (我們將其命名為 Guanaco) 僅需在單個(gè) GPU 上進(jìn)行 24 小時(shí)微調(diào),就能在 Vicuna 基準(zhǔn)測(cè)試中優(yōu)于所有之前公開(kāi)發(fā)布的模型,且達(dá)到了 ChatGPT 性能水平的 99.3%。QLoRA 引入了多項(xiàng)創(chuàng)新技術(shù),在不犧牲性能的情況下節(jié)省內(nèi)存:(a) 4 位 NormalFloat (NF4),一種新的數(shù)據(jù)類型,在信息論意義上是正態(tài)分布權(quán)重的最佳表示 (b) 雙量化,通過(guò)對(duì)量化系數(shù)進(jìn)行二次量化來(lái)減少平均內(nèi)存占用,以及 (c) 用于降低峰值內(nèi)存占用的分頁(yè)優(yōu)化器。我們使用 QLoRA 微調(diào)了 1000 多個(gè)模型,并給出了它們?cè)谥噶钜缽摹⒘奶斓热蝿?wù)上的詳細(xì)性能分析,其中涵蓋了 8 個(gè)指令數(shù)據(jù)集、多種模型架構(gòu) (LLaMA、T5),還包括了無(wú)法用常規(guī)方法微調(diào)的大模型 (例如 33B 和 65B 模型)。結(jié)果表明,在小型高質(zhì)量數(shù)據(jù)集的進(jìn)行 QLoRA 微調(diào)能帶來(lái)最先進(jìn)的性能,且所需的模型尺寸更小。我們使用人類和 GPT-4 對(duì)聊天機(jī)器人的性能進(jìn)行了詳細(xì)評(píng)估分析,結(jié)果表明 GPT-4 評(píng)估是替代人類評(píng)估的廉價(jià)且合理的方案。此外,我們發(fā)現(xiàn)當(dāng)前的聊天機(jī)器人基準(zhǔn)測(cè)試在準(zhǔn)確評(píng)估聊天機(jī)器人的性能水平這一方面并不十分可信。我們還挑選了一些樣本,對(duì) Guanaco 比 ChatGPT 做得不好的案例進(jìn)行了分析。我們發(fā)布了所有模型和代碼,包括用于 4 比特訓(xùn)練的 CUDA 核函數(shù)。

資源

下面是一些 4 比特模型和 QLoRA 的入門資源:

  • 原始論文

  • 有關(guān) bitsandbytes 基礎(chǔ)用法的 Google Colab 筆記本 - 該筆記本展示了如何對(duì) 4 比特模型進(jìn)行推理,以及如何在免費(fèi)的 Google Colab 實(shí)例上運(yùn)行 GPT-neo-X 模型 (20B) ??。

  • 微調(diào)的 Google Colab 筆記本 - 該筆記本展示了如何使用 Hugging Face 生態(tài)系統(tǒng)在下游任務(wù)上微調(diào) 4 比特模型。我們證明了可以在 Google Colab 實(shí)例上微調(diào) GPT-neo-X 20B!

  • 用于復(fù)現(xiàn)論文結(jié)果的原始代碼庫(kù)

  • Guanaco 33B 的演示空間 - 下文中也包含了這個(gè)演示空間。

引言

如果你對(duì)模型精度及一些常見(jiàn)的數(shù)據(jù)類型 (float16、float32、bfloat16、int8) 尚不熟悉,建議你仔細(xì)閱讀 我們的第一篇博文,這篇博文圖文并茂地詳細(xì)介紹了相關(guān)概念的細(xì)節(jié)。

如需更多信息,建議查閱 這篇 wikibook 文檔 以了解浮點(diǎn)表示的基礎(chǔ)知識(shí)。

QLoRA 論文中探討了兩種不同的數(shù)據(jù)類型: 4 比特 Float 和 4 比特 NormalFloat。這里我們將討論 4 比特 Float 數(shù)據(jù)類型,因?yàn)樗菀桌斫狻?/p>

FP8 和 FP4 分別代表浮點(diǎn) 8 比特和 4 比特精度。它們屬于 minifloats 浮點(diǎn)值系列 (minifloats 系列還包括其他精度,如 bfloat16 和 float16)。

我們先看一下如何用 FP8 格式表示浮點(diǎn)值,然后了解 FP4 格式是什么樣子的。

FP8 格式

正如之前的博文中所討論的,n 比特的浮點(diǎn)數(shù)中每個(gè)比特都屬于一個(gè)特定類別,負(fù)責(zé)表示數(shù)字的各個(gè)組成部分 (符號(hào)、尾數(shù)和指數(shù))。

FP8 for Deep Learning 這篇論文首次引入了 FP8 (浮點(diǎn) 8) 格式,其有兩種不同的編碼方式: E4M3 (4 位指數(shù),3 位尾數(shù)) 和 E5M2 (5 位指數(shù),2 位尾數(shù))。

fp8 編碼方案 FP8 格式概覽。圖源: 內(nèi)容來(lái)自于 sgugger

盡管隨著比特?cái)?shù)從 32 減少到 8,精度大大降低了,但這兩種 8 比特編碼仍有很多用武之地。目前,我們可以通過(guò) Transformer Engine 庫(kù) 來(lái)使用它們,HF 生態(tài)系統(tǒng)的 accelerate 庫(kù)也集成了 Transformer Engine 庫(kù)。

E4M3 格式可以表示的浮點(diǎn)數(shù)范圍為 -448 到 448。而 E5M2 格式因?yàn)樵黾恿酥笖?shù)位數(shù),其表示范圍擴(kuò)大為 -57344 到 57344 - 但其相對(duì) E4M3 而言精度會(huì)有損失,因?yàn)閮烧呖杀硎镜臄?shù)的個(gè)數(shù)保持不變。經(jīng)驗(yàn)證明,E4M3 最適合前向計(jì)算,E5M2 最適合后向計(jì)算。

FP4 精度簡(jiǎn)述

符號(hào)位表示符號(hào) (+/-),指數(shù)位轉(zhuǎn)譯成該部分所表示的整數(shù)的 2 次方 (例如 2^{010} = 2^{2} = 4 )。分?jǐn)?shù)或尾數(shù)位表示成 -2 的冪的總和,如果第 i 位為 1 ,則和加上 2^-i ,否則保持不變,這里 i 是該位在比特序列中的位置。例如,對(duì)于尾數(shù) 1010,我們有 (2^-1 + 0 + 2^-3 + 0) = (0.5 + 0.125) = 0.625 ,然后,我們給分?jǐn)?shù)加上一個(gè) 1 ,得到 1.625 。最后,再將所有結(jié)果相乘。舉個(gè)例子,使用 2 個(gè)指數(shù)位和 1 個(gè)尾數(shù)位,編碼 1101 對(duì)應(yīng)的數(shù)值為:

FP4 沒(méi)有固定的格式,因此可以嘗試不同尾數(shù)/指數(shù)的組合。一般來(lái)說(shuō),在大多數(shù)情況下,3 個(gè)指數(shù)位的效果會(huì)更好一些。但某些情況下,2 個(gè)指數(shù)位加上 1 個(gè)尾數(shù)位性能會(huì)更好。

QLoRA,經(jīng)由量化實(shí)現(xiàn)大模型自由的新途徑

簡(jiǎn)而言之,與標(biāo)準(zhǔn) 16 比特模型微調(diào)相比,QLoRA 在不犧牲性能的前提下減少了 LLM 微調(diào)的內(nèi)存使用量。使用該方法,我們可在單個(gè) 24GB GPU 上微調(diào) 33B 模型,還可以在單個(gè) 46GB GPU 上微調(diào) 65B 模型。

更具體地說(shuō),QLoRA 使用 4 比特量化來(lái)壓縮預(yù)訓(xùn)練的語(yǔ)言模型。然后凍結(jié)基礎(chǔ)模型的參數(shù),并將相對(duì)少量的可訓(xùn)練參數(shù)以低秩適配器的形式添加到模型中。在微調(diào)過(guò)程中,QLoRA 通過(guò)凍結(jié)的 4 比特量化預(yù)訓(xùn)練語(yǔ)言模型將梯度反向傳播到低秩適配器中。LoRA 層的權(quán)重是訓(xùn)練期間唯一可更新的參數(shù)。你可閱讀 原始 LoRA 論文 以了解更多有關(guān) LoRA 的信息。

QLoRA 有一個(gè)用于存儲(chǔ)基礎(chǔ)模型權(quán)重的數(shù)據(jù)類型 (通常為 4 比特 NormalFloat) 和一個(gè)用于執(zhí)行計(jì)算的數(shù)據(jù)類型 (16 比特 BrainFloat)。QLoRA 將權(quán)重從存儲(chǔ)數(shù)據(jù)類型反量化為計(jì)算數(shù)據(jù)類型,以執(zhí)行前向和后向傳播,但僅計(jì)算 bfloat16 的 LoRA 參數(shù)的權(quán)重梯度。權(quán)重僅在需要時(shí)才解壓縮,因此在訓(xùn)練和推理期間內(nèi)存使用率都能保持較低水平。

廣泛的實(shí)驗(yàn)表明 QLoRA 微調(diào)與 16 比特微調(diào)的性能旗鼓相當(dāng)。此外,在 OpenAssistant 數(shù)據(jù)集 (OASST1) 上對(duì) LLaMA 模型使用 QLoRA 微調(diào)而得的 Guanaco 模型是目前最先進(jìn)的聊天機(jī)器人系統(tǒng),其在 Vicuna 基準(zhǔn)測(cè)試中表現(xiàn)接近 ChatGPT。這是 QLoRA 微調(diào)威力的進(jìn)一步展示。

如何在 transformers 中使用它?

在本節(jié)中,我們將介紹該方法在 transformers 中的集成、如何使用它以及目前支持的模型。

入門

作為快速入門,我們可以從源代碼安裝 acceleratetransformers ,以加載 4 比特模型,另請(qǐng)確保已安裝最新版本的 bitsandbytes 庫(kù) (0.39.0)。

快速開(kāi)始

以 4 比特加載模型的基本方法是通過(guò)在調(diào)用 from_pretrained 方法時(shí)傳遞參數(shù)?

這樣就行了!

一般地,我們建議用戶在使用 device_map 加載模型后不要手動(dòng)設(shè)置設(shè)備。因此,在該行之后應(yīng)避免對(duì)模型或模型的任何子模塊進(jìn)行任何設(shè)備分配 - 除非你知道自己在做什么。

請(qǐng)記住,加載量化模型會(huì)自動(dòng)將模型的其他子模塊轉(zhuǎn)換為 float16 數(shù)據(jù)類型。你可以通過(guò)將 torch_dtype=dtype 傳遞給 from_pretrained 方法來(lái)修改此行為 (例如,如果你希望在層規(guī)一化算子中使用 float32 )。

高級(jí)用法

你可以使用 4 比特量化的不同變體,例如 NF4 (NormalFloat4 (默認(rèn)) ) 或純 FP4 量化。從理論分析和實(shí)證結(jié)果來(lái)看,我們建議使用 NF4 量化以獲得更好的性能。

其他選項(xiàng)包括 bnb_4bit_use_double_quant ,它在第一輪量化之后會(huì)進(jìn)行第二輪量化,為每個(gè)參數(shù)額外節(jié)省 0.4 比特。最后是計(jì)算類型,雖然 4 比特 bitsandbytes 以 4 比特存儲(chǔ)權(quán)重,但計(jì)算仍然以 16 或 32 比特進(jìn)行,這里可以選擇任意組合 (float16、bfloat16、float32 等)。

如果使用 16 比特計(jì)算數(shù)據(jù)類型 (默認(rèn) torch.float32),矩陣乘法和訓(xùn)練將會(huì)更快。用戶應(yīng)該利用 transformers 中最新的 BitsAndBytesConfig 來(lái)更改這些參數(shù)。下面是使用 NF4 量化加載 4 比特模型的示例,例子中使用了雙量化以及 bfloat16 計(jì)算數(shù)據(jù)類型以加速訓(xùn)練:

更改計(jì)算數(shù)據(jù)類型

如上所述,你還可以通過(guò)更改 BitsAndBytesConfig 中的 bnb_4bit_compute_dtype 參數(shù)來(lái)更改量化模型的計(jì)算數(shù)據(jù)類型。

嵌套量化

要啟用嵌套量化,你可以使用 BitsAndBytesConfig 中的 bnb_4bit_use_double_quant 參數(shù)。這將會(huì)在第一輪量化之后啟用第二輪量化,以便每個(gè)參數(shù)額外節(jié)省 0.4 比特。我們?cè)谏衔奶峒暗奈⒄{(diào) Google Colab 筆記本中也使用了此功能。

當(dāng)然,正如本節(jié)開(kāi)頭提到的,所有這些功能都是可任意組合的。你可以將所有這些參數(shù)組合在一起,找到最適合你的配置。經(jīng)驗(yàn)法則是: 如果內(nèi)存有限制,使用雙量化; 使用 NF4 以獲得更高的精度; 使用 16 比特浮點(diǎn)加快微調(diào)速度。作為一個(gè)例子,在 推理演示應(yīng)用 中,我們使用嵌套量化、bfloat16 計(jì)算數(shù)據(jù)類型以及 NF4 量化在單個(gè) 16GB GPU 中使用 4 比特完成了對(duì) gpt-neo-x-20b (40GB) 模型的擬合。

常見(jiàn)問(wèn)題

本節(jié)我們來(lái)回答一些常見(jiàn)問(wèn)題。

FP4 量化有硬件要求嗎?

請(qǐng)注意,此方法僅與 GPU 兼容,目前尚無(wú)法在 CPU 上對(duì)模型進(jìn)行 4 比特量化。在 GPU 中,此方法沒(méi)有任何硬件要求,只要安裝了 CUDA>=11.2,任何 GPU 都可以用于運(yùn)行 4 比特量化。

另請(qǐng)記住,計(jì)算不是以 4 比特完成的,僅僅是權(quán)重和激活被壓縮為該格式,而計(jì)算仍在指定的或者原始數(shù)據(jù)類型上進(jìn)行。

支持哪些模型?

與 這篇博文 中介紹的 LLM.int8 集成類似,我們的集成嚴(yán)重依賴于 accelerate 庫(kù)。因此,任何支持 accelerate 庫(kù)加載的模型 (即調(diào)用 from_pretrained 時(shí)支持 device_map 參數(shù)) 都可以進(jìn)行 4 比特量化。另請(qǐng)注意,這與模態(tài)完全無(wú)關(guān),只要可以使用 device_map 參數(shù)加載模型,就可以量化它們。

對(duì)于文本模型,截至本文撰寫時(shí),最常用的架構(gòu)都是支持的,例如用于純文本的 Llama、OPT、GPT-Neo、GPT-NeoX,用于多模態(tài)的 Blip2 等。

截至本文撰寫時(shí),支持 accelerate 的模型有:?

請(qǐng)注意,如果你最喜歡的模型不在列表中,你可以提交一個(gè) PR 或在 transformers 中提交一個(gè)問(wèn)題,以添加對(duì)該架構(gòu)的 accelerate 加載的支持。

我們可以訓(xùn)練 4 比特 / 8 比特模型嗎?

對(duì)這些模型進(jìn)行全模型 4 比特訓(xùn)練是不可能的。但是,你可以利用參數(shù)高效微調(diào) (PEFT) 來(lái)訓(xùn)練這些模型,即在基礎(chǔ)模型之上訓(xùn)練新增部分如適配器。QLoRA 論文就是這么做的,Hugging Face 的 PEFT 庫(kù)也正式支持了該方法。我們提供了相應(yīng)的 微調(diào)筆記本。如果大家想要復(fù)現(xiàn)論文的結(jié)果,還可以查閱 QLoRA 代碼庫(kù)。

lora 圖例 原始 (凍結(jié)的) 預(yù)訓(xùn)練權(quán)重 (左側(cè)) 的輸出激活需要加上低秩適配器的輸出,這個(gè)低秩適配器由矩陣 A 和 B 權(quán)重組成 (右側(cè))。

這項(xiàng)工作還有什么其他意義?

這項(xiàng)工作可以為社區(qū)和人工智能研究帶來(lái)一些積極的影響,因?yàn)樗梢杂绊懞芏嗫赡艿挠梅ɑ驊?yīng)用場(chǎng)景。在 RLHF (基于人類反饋的強(qiáng)化學(xué)習(xí)) 中,可以加載單個(gè) 4 比特基礎(chǔ)模型,并在其上訓(xùn)練多個(gè)適配器,一個(gè)用于獎(jiǎng)勵(lì)建模,另一個(gè)用于價(jià)值策略訓(xùn)練。我們很快就會(huì)發(fā)布關(guān)于此用法的更詳細(xì)的博文。

我們還針對(duì)這種量化方法對(duì)在消費(fèi)類硬件上訓(xùn)練大模型的影響涉及了一些基準(zhǔn)測(cè)試。我們?cè)谟ミ_(dá) T4 (16GB) 上對(duì) 2 種不同的架構(gòu) Llama 7B (fp16 時(shí),模型大小為 15GB) 和 Llama 13B (fp16 時(shí),模型大小為 27GB) 進(jìn)行了多次微調(diào)實(shí)驗(yàn),結(jié)果如下:

我們使用了 TRL 庫(kù)中最新的 SFTTrainer ,你可以在 此處 找到基準(zhǔn)測(cè)試腳本。

演示空間

想試試論文中的 Guananco 模型的話,可以玩玩這個(gè) 演示空間,我們還把它直接嵌入到了下面供你直接把玩。

致謝

HF 團(tuán)隊(duì)感謝華盛頓大學(xué)參與該項(xiàng)目的所有人員,感謝他們向社區(qū)貢獻(xiàn)了他們的工作。

作者還要感謝 Pedro Cuenca 幫忙審閱了博文,并感謝 Olivier Dehaene 和 Omar Sanseviero 對(duì)在 HF Hub 上集成該論文提供了快速而有力的支持。

英文原文: https://hf.co/blog/4bit-transformers-bitsandbytes

原文作者: Younes Belkada,Tim Dettmers,Artidoro Pagnoni,Sylvain Gugger,Sourab Mangrulkar

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

審校/排版: zhongdongy (阿東)


用 bitsandbytes、4 比特量化和 QLoRA 打造親民的 LLM的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
高淳县| 北海市| 基隆市| 红河县| 进贤县| 上犹县| 台州市| 宁城县| 惠水县| 保靖县| 浠水县| 修武县| 东山县| 齐齐哈尔市| 满城县| 甘泉县| 永顺县| 东光县| 西宁市| 双桥区| 永泰县| 唐山市| 德钦县| 界首市| 江华| 资源县| 合肥市| 石河子市| 株洲市| 多伦县| 澄江县| 上虞市| 山阳县| 金华市| 胶州市| 中宁县| 铜陵市| 上思县| 襄樊市| 神池县| 南雄市|