該存儲庫包含論文量化的代碼:基於語言模型的優化量化 - 一種有效而直觀的算法
隨著大語言模型(LLM)的日益普及,對壓縮技術的有效部署引起了人們的興趣。這項研究的重點是LLM的訓練後量化,引入量化量,這是一個層次的量化框架,單個層進行單獨的量化。我們的工作將問題構建為離散的非凸優化,開發了坐標下降技術,提供了高質量的解決方案,而無需矩陣倒置或分解。我們還探索一個異常感知的變體,以完全精確地保留了重要的權重。我們的建議在各種LLM和數據集的經驗評估中取得了最新的表現,比GPTQ等方法的提高了15%。通過仔細的線性代數優化,量詞可以在大約三個小時內量化單個NVIDIA A100 GPU上的Falcon-180b之類的模型。以可接受的精度下降,諸如SPQR(例如SPQR)的量度可接受的量化量相近或低3位的量化量,就困惑而言,最多兩次。
wikitext2的選定bloom,opt和falcon模型家族的困惑結果,而無需分組:
| 模型名稱 | FP16 | 4bit | 3位 | 3位結構離群值(1%) | 3位未結構的離群值(1%) |
|---|---|---|---|---|---|
| OPT-1.3B | 14.62 | 15.28 | 21.30 | 18.51 | 16.25 |
| OPT-13B | 10.13 | 10.32 | 12.41 | 12.07 | 10.37 |
| Bloom-1B7 | 15.39 | 16.11 | 20.03 | 18.89 | 17.06 |
| Bloom-7b1 | 11.37 | 11.69 | 13.43 | 12.97 | 12.03 |
| Falcon-7b | 6.59 | 6.92 | 8.83 | 8.56 | 7.14 |
| Falcon-40B | 5.23 | 5.46 | 6.20 | 5.99 | 5.51 |
LAMBADA基準的零擊精度用於3位和4位量化: 
quantease :本文中算法2後,提出了具有加速實現的基本量化算法。quantease_outlier :本文中算法3之後具有加速實現的異常值量化算法。rtn :基線往返最終算法。gptq_quantease :GPTQ +量化的組合算法。在第一次迭代中用GPTQ初始化,然後在其上進行定量,以進一步優化性能。 data文件夾中的校準和評估數據集。QuantEase root dir”下創建models文件夾,然後下載以您喜歡的名稱進行量化的HuggingFace模型。pip3 install -r requirements.txttorch :在v2.0.0+CU118上進行測試transformers :在v4.35.0上測試scipy :在V1.11.3上測試einops :在V0.7.0上測試datasets :在v2.14.7上測試scikit-learn :在V1.4.0上進行了測試sacrebleu :在v2.3.1上進行了測試auto-gptq :在V0.5.0上進行測試(僅用於包裝模型),如果要打包和導出量化的型號,請按照AutoGPTQ頁面上的指令進行安裝https://github.com/panqiwei/autogptq所有腳本均已使用帶有CUDA 12.0驅動程序API版本和11.2運行時API版本的單個A100 NVIDIA GPU計算機測試。
我們目前支持三個模型系列的量化:Bloom,Opt,Falcon,Mistral-7B,Llama
# within the `QuantEase` root folder run:
python3 model_quantizer.py --model ` models/ < model_name > ` --dataset c4 --wbits 4 --num-iter 30 --nsamples 128 --true-sequential --quantization-method < algorithm_name >model_name :例如, bloom-560m , opt-350m和falcon-7b等。我們的腳本將自動根據模型名稱選擇相應的模型類型 /配置algorithm_name :從quantease , rtn和gptq_quantease中選擇要啟用異常值算法,請提供額外的論點: --outlier :
# within the `QuantEase` root folder run:
python3 model_quantizer.py --model ` models/ < model_name > ` --dataset c4 --wbits 4 --num-iter 30 --nsamples 128 --true-sequential --quantization-method < outlier_aware_algorithm_name > --outlier 0.01outlier_aware_algorithm_name :從spqr和quantease中進行選擇。注意:量化的outlier參數表明,從每一層中選擇為異常值的權重百分比,但對於SPQR方法,它是指通常大於真實離群比率的outlier_relative_threshold ,請參考原始紙質代碼和紙張以獲取更詳細的超參數設置。要啟用結構化離群器量化以進行量化,請在運行命令中添加--structure-outlier 。--compute-quantization-recon-error :在量化期間,在調試目的中顯示每一層的重建錯誤。如果啟用,則需要更多的時間和內存。--groupsize :用於量化的組;默認使用完整行。--act-order :是否要應用激活順序GPTQ啟發式,這是GPTQ代碼庫中的一項新功能,在大多數情況下顯示出表現良好並減輕量化過程中的數值問題。--save <path_to_save_the_model_and_results> :啟用JSON和量化模型包裝/保存中保存的困惑結果。確保安裝了auto-gptq軟件包,以利用量化層和CUDA內核來幫助包裝和保存模型。--num-layers-to-quantize :從上到下量化多少個塊(主要用於調試目的)。 Biblatex條目:
@article { behdin2023quantease ,
title = { QuantEase: Optimization-based Quantization for Language Models--An Efficient and Intuitive Algorithm } ,
author = { Behdin, Kayhan and Acharya, Ayan and Gupta, Aman and Keerthi, Sathiya and Mazumder, Rahul and Siyu, Zhu and Qingquan, Song } ,
journal = { arXiv preprint arXiv:2309.01885 } ,
year = { 2023 }
}Kayhan Behdin在2023年夏季在LinkedIn實習時為這項工作做出了貢獻。這項工作不是他的麻省理工學院研究的一部分。拉胡爾·馬祖德(Rahul Mazumder)在LinkedIn的顧問(遵守MIT的外部專業活動政策)時為這項工作做出了貢獻。這項工作不是他的麻省理工學院研究的一部分。