此 repo 支持論文“QLoRA:量化 LLM 的高效微調(diào)”,旨在使對 LLM 研究的訪問民主化。
QLoRA 使用bitsandbytes進行量化,并與 Hugging Face 的PEFT和transformers庫集成。QLoRA 由華盛頓大學(xué) UW NLP 小組的成員開發(fā)。
概述
我們介紹了 QLoRA,這是一種有效的微調(diào)方法,可以減少內(nèi)存使用量,足以在單個 48GB GPU 上微調(diào) 65B 參數(shù)模型,同時保留完整的 16 位微調(diào)任務(wù)性能。QLoRA 通過凍結(jié)的 4 位量化預(yù)訓(xùn)練語言模型將梯度反向傳播到低階適配器 (LoRA)。我們最好的模型系列,我們命名為 Guanaco,在 Vicuna 基準測試中優(yōu)于所有以前公開發(fā)布的模型,達到 ChatGPT 性能水平的 99.3%,同時只需要在單個 GPU 上進行 24 小時的微調(diào)。QLoRA 引入了許多創(chuàng)新來節(jié)省內(nèi)存而不犧牲性能:(a) 4 位 NormalFloat (NF4),一種新的數(shù)據(jù)類型,理論上是正態(tài)分布權(quán)重的最佳信息(b)雙量化通過量化量化常量來減少平均內(nèi)存占用,以及(c)分頁優(yōu)化器來管理內(nèi)存峰值。我們使用 QLoRA 對 1,000 多個模型進行微調(diào),提供跨 8 個指令數(shù)據(jù)集、多種模型類型(LLaMA、T5)和無法通過常規(guī)微調(diào)運行的模型規(guī)模(例如 33B 和65B參數(shù)模型)。我們的結(jié)果表明,即使使用比以前的 SoTA 更小的模型,QLoRA 在小型高質(zhì)量數(shù)據(jù)集上進行微調(diào)也會產(chǎn)生最先進的結(jié)果。我們提供了基于人類和 GPT-4 評估的聊天機器人性能的詳細分析,表明 GPT-4 評估是人類評估的廉價且合理的替代方案。此外,我們發(fā)現(xiàn)當前的聊天機器人基準測試無法準確評估聊天機器人的性能水平。我們發(fā)布了所有模型和代碼,包括用于 4 位訓(xùn)練的 CUDA 內(nèi)核。
許可和預(yù)期用途
我們根據(jù) MIT 許可在此存儲庫中發(fā)布與 QLoRA 微調(diào)相關(guān)的資源。此外,我們還發(fā)布了用于 7B、13B、33B 和 65B 基本 LLaMA 模型尺寸的 Guanaco 模型系列。這些模型旨在用于符合 LLaMA 許可證的目的,并且需要訪問 LLaMA 模型。
演示
Guanaco 是一個純粹用于研究目的的系統(tǒng),可能會產(chǎn)生有問題的輸出。
-
在此處訪問現(xiàn)場演示。注意這里是33B型號,65B型號的demo稍后會有。
-
或者使用此筆記本直接在 Colab 中托管您自己的 Guanaco gradio 演示。適用于 7B 和 13B 型號的免費 G??PU。
-
或者,您能區(qū)分 ChatGPT 和 Guanaco 嗎?試一試!您可以在此處訪問模型響應(yīng) Colab,在 Vicuna 提示上比較 ChatGPT 和 Guanaco 65B。
安裝
要使用 transformers 和 bitsandbytes 加載 4 位模型,您必須從源代碼安裝加速器和 transformers,并確保您擁有最新版本的 bitsandbytes 庫 (0.39.0)。安裝 PyTorch 后(按照此處的說明操作),您可以使用以下命令實現(xiàn)上述目標:
pip install -U -r requirements.txt
入門
該qlora.py
代碼是對各種數(shù)據(jù)集進行微調(diào)和推理的起點。在羊駝數(shù)據(jù)集上微調(diào)基線模型的基本命令:
python qlora.py --model_name_or_path <path_or_name>
對于大于 13B 的模型,我們建議調(diào)整學(xué)習(xí)率:
python qlora.py –learning_rate 0.0001 --model_name_or_path <path_or_name>
要復(fù)制我們的 Guanaco 模型,請參見下文。
教程和演示
這是一篇討論 4 位量化、QLoRA 以及它們?nèi)绾渭傻睫D(zhuǎn)換器中的博客。
您可以按照此筆記本直接在 Colab 中托管自己的 gradio Guanaco 演示。此外,以下是 Colab 筆記本,其中包含使用 QLoRA 進行推理和微調(diào)的示例:
- 推理筆記本
- 微調(diào)筆記本
其他示例位于該examples/
文件夾下。
量化
BitsandbytesConfig
量化參數(shù)由(參見 HF 文檔)控制,如下所示:
- 通過激活加載 4 位
load_in_4bit
- 用于線性層計算的數(shù)據(jù)類型
bnb_4bit_compute_dtype
- 嵌套量化是通過激活
bnb_4bit_use_double_quant
- 用于量化的數(shù)據(jù)類型用 指定
bnb_4bit_quant_type
。請注意,有兩種支持的量化數(shù)據(jù)類型fp4
(四位浮點數(shù))和nf4
(普通四位浮點數(shù))。后者在理論上對于正態(tài)分布的權(quán)重是最優(yōu)的,我們建議使用nf4
.
model = AutoModelForCausalLM.from_pretrained( model_name_or_path='/name/or/path/to/your/model', load_in_4bit=True, device_map='auto', max_memory=max_memory, torch_dtype=torch.bfloat16, quantization_config=BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type='nf4' ), )
分頁優(yōu)化器
您可以使用參數(shù)訪問分頁優(yōu)化器--optim paged_adamw_32bit
原駝微調(diào)
您可以選擇--dataset
oasst1
加載用于訓(xùn)練 Guanaco 的 OpenAssistant 數(shù)據(jù)集。您還可以在 HF 上的timdettmers/openassistant-guanaco找到它。
我們包括用于重現(xiàn) Guanaco 模型訓(xùn)練的超參數(shù)的腳本,用于各種大小./scripts/finetune_guanaco*.sh
。確保進行調(diào)整per_device_train_batch_size
,gradient_accumulation_steps
使他們的乘積為 16,并且訓(xùn)練適合您的 GPU。
使用本地數(shù)據(jù)集
您可以使用參數(shù)指定數(shù)據(jù)集的路徑--dataset
。如果--dataset_format
未設(shè)置參數(shù),它將默認為羊駝格式。這里有一些例子:
- 使用羊駝格式數(shù)據(jù)集進行訓(xùn)練:
python qlora.py --dataset="path/to/your/dataset"
- 使用自指導(dǎo)格式數(shù)據(jù)集進行訓(xùn)練:
python qlora.py --dataset="path/to/your/dataset" --dataset_format="self-instruct"
多GPU
多 GPU 訓(xùn)練和推理通過 Hugging Face 的 Accelerate 開箱即用。請注意,per_device_train_batch_size
和per_device_eval_batch_size
參數(shù)是全局批量大小,不像它們的名字所暗示的那樣。
在多個 GPU 上加載用于訓(xùn)練或推理的模型時,您應(yīng)該將類??似以下的內(nèi)容傳遞給AutoModelForCausalLM.from_pretrained()
:
device_map = "auto" max_memory = {i: '46000MB' for i in range(torch.cuda.device_count())}
示例輸出
我們?yōu)槲募A中的 OA 和 Vicuna 查詢提供論文中描述的模型的生成eval/generations
。這些旨在促進對模型評估和分析的進一步研究。
你能區(qū)分 ChatGPT 和 Guanaco 嗎?試一試!您可以在此處訪問模型響應(yīng) Colab,在 Vicuna 提示上比較 ChatGPT 和 Guanaco 65B。
評估
我們包括改編自 FastChat 存儲庫的腳本,以使用 GPT-4 自動評估模型生成。我們包括用于與 ChatGPT 進行比較的腳本,得分為 10 分,以及帶有三類標簽(贏、松或平)的“成對比較”。這些可以在文件夾中找到eval
。
為了促進我們在該領(lǐng)域的評估和未來工作的復(fù)制,我們發(fā)布了 GPT-4 和我們系統(tǒng)的人工評級。這些位于eval/ratings-human
和下eval/ratings-gpt4
。
可以在 找到更多詳細信息eval/EVAL_README.md
。
已知問題和限制
這里是已知問題和錯誤的列表。如果您的問題未在此處報告,請打開一個新問題并描述問題。
- 4 位推理很慢。目前,我們的 4 位推理實現(xiàn)尚未與 4 位矩陣乘法集成
- 使用 HF 當前不支持的訓(xùn)練器恢復(fù) LoRA 訓(xùn)練運行。
- 目前,使用
bnb_4bit_compute_type='fp16'
會導(dǎo)致不穩(wěn)定。對于 7B LLaMA,只有 80% 的微調(diào)運行完成且沒有錯誤。我們有解決方案,但它們尚未集成到 bitsandbytes 中。 - 確保
tokenizer.bos_token_id = 1
避免生成問題。 - 如果遇到此問題(“非法內(nèi)存訪問”),則應(yīng)使用更新的 HF LLaMA 轉(zhuǎn)換或降級 PyTorch 版本。
引用
@article{dettmers2023qlora, title={QLoRA: Efficient Finetuning of Quantized LLMs}, author={Dettmers, Tim and Pagnoni, Artidoro and Holtzman, Ari and Zettlemoyer, Luke}, journal={arXiv preprint arXiv:2305.14314}, year={2023} }
5月24日華盛頓大學(xué)的研究者發(fā)布了QLoRA技術(shù)及用其生成的Guanaco大模型。在Vicuna基準測試中表現(xiàn)優(yōu)于所有先前公開發(fā)布的模型,達到ChatGPT性能水平的99.3%,僅需要單個GPU上的24小時微調(diào)時間。業(yè)界一片叫好。
參考及資源鏈接:
代碼:https://github.com/artidoro/qlora
量化代碼:GitHub - TimDettmers/bitsandbytes: 8-bit CUDA functions for PyTorch
PEFT:?https://github.com/huggingface/peft
Transformer:https://github.com/huggingface/transformers/
模型:timdettmers (Tim Dettmers)
BLOG :?Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRA
論文:[2305.14314] QLoRA: Efficient Finetuning of Quantized LLMs (arxiv.org)
Demo環(huán)境:Guanaco Playground Tgi - a Hugging Face Space by uwnlp
Basic usage Google Colab notebook?- This notebook shows how to use 4bit models in inference with all their variants, and how to run GPT-neo-X (a 20B parameter model) on a free Google Colab instance
Fine tuning Google Colab notebook?- This notebook shows how to fine-tune a 4bit model on a downstream task using the Hugging Face ecosystem. We show that it is possible to fine tune GPT-neo-X 20B on a Google Colab instance!
Original repository for replicating the paper's results
Guanaco 33b playground
以下內(nèi)容主要來自論文QLoRA: Efficient Finetuning of Quantized LLMs和其他資料。
摘要:
我們提出了一種高效的微調(diào)方法QLORA,可以在單個48GB GPU上減少內(nèi)存使用量,同時保持完整的16位微調(diào)任務(wù)性能,從而對一個擁有65B參數(shù)的模型進行微調(diào)。QLORA通過將梯度反向傳播到凍結(jié)的4位量化預(yù)訓(xùn)練語言模型中,進而傳遞到低秩適配器(LoRA)。我們的最佳模型系列被命名為Guanaco,在Vicuna基準測試中表現(xiàn)優(yōu)于所有先前公開發(fā)布的模型,達到ChatGPT性能水平的99.3%,僅需要單個GPU上的24小時微調(diào)時間。QLORA引入了一些創(chuàng)新來節(jié)省內(nèi)存而不犧牲性能:(a)4位NormalFloat(NF4),這是一種對于正態(tài)分布權(quán)重來說在信息論上是最優(yōu)的數(shù)據(jù)類型;(b)雙量化,通過量化量化常數(shù)來減少平均內(nèi)存占用;以及(c)分頁優(yōu)化器,用于管理內(nèi)存峰值。我們使用QLORA對1,000多個模型進行微調(diào),并對8個指令數(shù)據(jù)集、多個模型類型(LLaMA、T5)和模型規(guī)模進行了詳細的指令追蹤和聊天機器人性能分析,這在常規(guī)微調(diào)中是不可行的(例如33B和65B參數(shù)模型)。我們的結(jié)果表明,QLoRA在一個小型高質(zhì)量數(shù)據(jù)集上進行微調(diào)可以獲得最先進的結(jié)果,即使使用的模型比先前的最優(yōu)模型要小。我們基于人工和GPT-4評估對聊天機器人性能進行了詳細分析,結(jié)果顯示GPT-4評估是評估聊天機器人的廉價且合理的替代方法。此外,我們發(fā)現(xiàn)當前的聊天機器人基準測試不能準確評估聊天機器人的性能水平。通過一項詳細的分析,我們展示了Guanaco與ChatGPT相比存在的失敗之處。我們公開發(fā)布了我們的所有模型和代碼,包括4位訓(xùn)練的CUDA核心。
1 引言
微調(diào)大型語言模型(LLMs)是提高它們性能的一種高效方法[40, 62, 43, 61, 59, 37],也可以添加期望的行為或去除不可取的行為[43, 2, 4]。然而,對于非常大的模型,常規(guī)的16位微調(diào)是成本過高的;對LLaMA 65B參數(shù)模型[57]的常規(guī)16位微調(diào)需要超過780GB的GPU內(nèi)存。盡管最近的量化方法可以減少LLMs的內(nèi)存占用[14, 13, 18, 66],但這些技術(shù)只適用于推理階段,在訓(xùn)練階段會失效[65]。
我們首次證明了可以在不降低性能的情況下微調(diào)量化的4位模型。我們的方法QLORA使用一種新的高精度技術(shù)將預(yù)訓(xùn)練模型量化為4位,然后通過反向傳播梯度來調(diào)整量化權(quán)重集合中的一小組可學(xué)習(xí)低秩適配器權(quán)重[28]。
QLORA將微調(diào)65B參數(shù)模型的平均內(nèi)存需求從>780GB的GPU內(nèi)存降低到<48GB,與完全微調(diào)的16位基準相比,既不降低運行時間也不降低預(yù)測性能。這標志著LLM微調(diào)的可及性出現(xiàn)了重大變化:現(xiàn)在可以在單個GPU上微調(diào)迄今為止最大的公開可用模型。使用QLORA,我們訓(xùn)練了Guanaco模型系列,其中第二好的模型在Vicuna[10]基準測試上達到了ChatGPT性能水平的97.8%,而在單個消費級GPU上的微調(diào)時間不到12小時;在單個專業(yè)級GPU上的24小時內(nèi),我們的最大模型達到了99.3%,基本上縮小了與Vicuna基準測試上的ChatGPT之間的差距。在部署時,我們最小的Guanaco模型(7B參數(shù))僅需要5GB內(nèi)存,在Vicuna基準測試上比26GB的Alpaca模型高出20個百分點以上(表6)。
QLORA引入了多個創(chuàng)新,旨在減少內(nèi)存使用而不犧牲性能:(1)4位NormalFloat,一種信息論上對于正態(tài)分布數(shù)據(jù)來說最優(yōu)的量化數(shù)據(jù)類型,其實際結(jié)果比4位整數(shù)和4位浮點數(shù)更好。 (2)雙量化(Double Quantization),一種量化量化常數(shù)的方法,平均每個參數(shù)節(jié)省約0.37位(65B模型約為3GB)。 (3)分頁優(yōu)化器(Paged Optimizers),使用NVIDIA統(tǒng)一內(nèi)存來避免在處理具有長序列長度的小批量時出現(xiàn)的梯度檢查點內(nèi)存峰值。我們將這些貢獻結(jié)合到更好調(diào)整的LoRA方法中,其中包括在每個網(wǎng)絡(luò)層中使用適配器,從而避免了先前工作中出現(xiàn)的幾乎所有精度權(quán)衡取舍(accuracy tradeoffs)的問題。
QLORA的高效性使我們能夠?qū)χ噶钗⒄{(diào)和聊天機器人性能進行深入研究,這在常規(guī)微調(diào)中由于內(nèi)存開銷是不可能的。因此,我們在幾個指令微調(diào)數(shù)據(jù)集、模型架構(gòu)和參數(shù)大小在80M到65B之間訓(xùn)練了1,000多個模型。除了展示QLORA恢復(fù)了16位性能(§4)和訓(xùn)練了最先進的聊天機器人Guanaco(§5),我們還分析了訓(xùn)練模型的趨勢。首先,我們發(fā)現(xiàn)數(shù)據(jù)質(zhì)量遠比數(shù)據(jù)集大小更重要,例如,一個9k樣本的數(shù)據(jù)集(OASST1)在聊天機器人性能上優(yōu)于一個450k樣本的數(shù)據(jù)集(FLAN v2,子采樣),即使兩者都旨在支持指令跟蹤泛化。其次,我們顯示了強大的Massive Multitask Language Understanding(MMLU)基準性能并不意味著強大的Vicuna聊天機器人基準性能,反之亦然,換句話說,對于給定任務(wù),數(shù)據(jù)集的適用性比大小更重要。
此外,我們還對聊天機器人性能進行了詳細分析,同時使用人工評估者和GPT-4進行評估。我們采用了錦標賽風(fēng)格的基準測試,其中模型在比賽中互相競爭,為給定提示產(chǎn)生最佳回答。一場比賽的獲勝者由GPT-4或人工注釋員評判。錦標賽結(jié)果被匯總為Elo分數(shù)[16, 17],確定聊天機器人性能的排名。我們發(fā)現(xiàn),在錦標賽中,GPT-4和人工評估在模型性能的排名上基本一致,但我們也發(fā)現(xiàn)存在強烈分歧的情況。因此,我們強調(diào)基于模型的評估雖然提供了與人工注釋相比的廉價替代方案,但也存在不確定性。文章來源:http://www.zghlxwxcb.cn/news/detail-473125.html
我們通過定性分析Guanaco模型來增強我們的聊天機器人基準測試結(jié)果。我們的分析突出了定量基準測試未能捕捉到的成功和失敗案例。我們公開發(fā)布所有帶有人工和GPT-4注釋的模型,以促進進一步的研究。我們開源我們的代碼庫和CUDA核心,并將我們的方法整合到Hugging Face的transformers堆棧[64]中,使其易于訪問。我們發(fā)布了7/13/33/65B大小模型的適配器集合,這些模型在8個不同的指令跟蹤數(shù)據(jù)集上進行了訓(xùn)練,總共有32個不同的開源微調(diào)模型。文章來源地址http://www.zghlxwxcb.cn/news/detail-473125.html
到了這里,關(guān)于QLoRA:量化 LLM 的高效微調(diào)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!