AutoRound 是一種用於低位 LLM 推理的高級量化演算法。它專為多種型號量身定制。 AutoRound 採用符號梯度下降法,只需 200 步即可微調權重的捨入值和最小最大值,與最新方法相比,無需引入任何額外的推理開銷,並保持較低的調整成本。下圖展示了 AutoRound 的概述。請查看我們在 arxiv 上的論文以了解更多詳細信息,並訪問 low_bit_open_llm_leaderboard 以了解各種模型的更準確數據和配方。
[2024/10] AutoRound 已整合到 torch/ao,查看他們的發行說明
[2024/10] 重要更新:我們現在支援全範圍對稱量化,並將其設為預設配置。這種配置通常比非對稱量化更好或相當,並且顯著優於其他對稱變體,特別是在 2 位等低位寬下。
[2024/09] AutoRound 格式支援多種 LVM 模型,請參閱範例 Qwen2-Vl、Phi-3-vision、Llava
[2024/08] AutoRound 格式支援 Intel Gaudi2 裝置。請參考Intel/Qwen2-7B-int4-inc。
[2024/08] AutoRound 引入了幾個實驗性功能,包括範數/偏差參數的快速調整(針對 2 位元和 W4A4)、活化量化和 mx_fp 資料類型。
pip install -vvv --no-build-isolation -e 。
pip 安裝自動輪次
透過在終端機上呼叫auto-round -h
可以提供詳細說明受支援參數的完整清單的使用者指南。或者,您可以使用auto_round
而不是auto-round
。在format
中設定您想要的格式,並支援多種格式匯出。
CUDA_VISIBLE_DEVICES=0 自動循環 --型號 facebook/opt-125m --位 4 --group_size 128 --格式“auto_round,auto_gptq” --disable_eval --output_dir ./tmp_autoround
我們提供了兩種方法,可在低記憶體的情況下實現最佳準確性和快速運行速度。詳情如下。
## 最佳精度,慢 3 倍,low_gpu_mem_usage 可以節省約 20G,但慢約 30%CUDA_VISIBLE_DEVICES=0 自動回合 --型號 facebook/opt-125m --位 4 --group_size 128 --n樣本512 --iters 1000 --low_gpu_mem_usage --disable_eval
## 快速且佔用記憶體少,加速 2-3 倍,W4G128CUDA_VISIBLE_DEVICES=0 自動回合時精度略有下降 --型號 facebook/opt-125m --位 4 --group_size 128 --n樣本128 --迭代200 --seqlen 512 --批次大小 4 --disable_eval
AutoRound 格式:此格式非常適合 CPU、HPU 裝置、2 位元以及混合精度推理。支持 [2,4] 位。它還受益於 Marlin 內核,可以顯著提高推理性能。然而,它尚未獲得社區的廣泛採用。
AutoGPTQ 格式:此格式非常適合 CUDA 裝置上的對稱量化,並被社群廣泛採用,支援 [2,3,4,8] 位元。它還受益於 Marlin 內核,可以顯著提高推理性能。然而,非對稱內核存在可能導致精度大幅下降的問題,特別是在 2 位元量化和小型模型中。此外,對稱量化在 2 位精度下往往表現不佳。
AutoAWQ 格式:此格式非常適合 CUDA 裝置上的非對稱 4 位元量化,並在社群中廣泛採用,僅支援 4 位元量化。它具有專為 Llama 模型量身定制的專門層融合功能。
從變壓器匯入 AutoModelForCausalLM, AutoTokenizermodel_name = "facebook/opt-125m"model = AutoModelForCausalLM.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name)from auto_round AutoTokenizer.from_pretrained(model_name)from auto_round, AutoTokenizer. model, tokenizer , bits=bits, group_size=group_size, sym=sym)## 最佳精度,慢3 倍,low_gpu_mem_usage 可以節省約20G,但慢約30%# autoround = AutoRound(model, tokenizer, nsamples=512, iters=1000 , low_gpu_mem_usage =True, bits=bits, group_size=group_size, sym=sym)## 快速且佔用內存少,加速2-3倍,W4G128的精度略有下降# autoround = AutoRound(model, tokenizer, nsamples=128, iters=200, seqlen =512、batch_size=4、bits=bits、group_size=group_size、sym=sym )autoround.quantize()output_dir = "./tmp_autoround"## format= 'auto_round'(中版本>0.3.預設), 'auto_gptq ', 'auto_awq'autoround.save_quantized(output_dir, format='auto_round', inplace=True)
使用夜間版本的 PyTorch 2.6.0.dev20241029+cu124 在 Nvidia A100 80G 上進行測試。請注意,評估中不包括資料載入和打包成本。我們為 Torch 2.6 啟用 torch.compile,但由於遇到問題而不為 2.5 啟用。
要最佳化 GPU 記憶體使用,除了啟動low_gpu_mem_usage
之外,您還可以設定gradient_accumulate_steps=8
和batch_size=1
,但這可能會增加調整時間。
3B和14B模型在Qwen 2.5上進行評估,8X7B模型是Mixtral,而其餘模型則使用LLaMA 3.1。
火炬版本/配置 W4G128 | 3B | 8B | 14B | 70B | 8X7B |
---|---|---|---|---|---|
2.6 用torch編譯 | 7分鐘 10GB | 12分鐘 18GB | 23分鐘 22GB | 120分鐘 42GB | 28分鐘 46GB |
2.6 用torch編譯 low_gpu_mem_usage=真 | 12分鐘 6GB | 19分鐘 10GB | 33分鐘 11GB | 140分鐘 25GB | 38分鐘 36GB |
2.6 用torch編譯 low_gpu_mem_usage=真 梯度累積步數=8,bs=1 | 15分鐘 3GB | 25分鐘 6GB | 45分鐘 7GB | 187分鐘 19GB | 75分鐘 36GB |
2.5 不帶 torch 編譯 | 8分鐘 10GB | 16分鐘 20GB | 30分鐘 25GB | 140分鐘 49GB | 50分鐘 49GB |
請先運行量化程式碼
CPU : auto_round版本> 0.3.1 ,pip install intel-extension-for-pytorch(在Intel CPU上速度較高)或pip install intel-extension-for-transformers,
HPU :建議使用 Gaudi 軟體堆疊的 docker 映像。更多詳細資訊可以在高迪指南中找到。
CUDA :對稱量化不需要額外的操作,對於非對稱量化,需要從來源安裝自動舍入
from Transformers import AutoModelForCausalLM, AutoTokenizerfrom auto_round import AutoRoundConfigbackend = "auto" ##cpu, hpu, cuda, cuda:marlin(在auto_round>0.3.1 和'pip install -v gptilqdel-olno-builq 中支援) quantization_config = AutoRoundConfig(backend=backend)quantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map=backend.split('config:')[sadizer,device_map:-dizer. quantized_model_path)text = "有一個喜歡冒險的女孩,"inputs = tokenizer(text, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0] ) )
自動舍入--模型保存的量化模型 --評估 --任務 lambda_openai --eval_bs 1
from Transformers import AutoModelForCausalLM, AutoTokenizerquantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map="auto")tokenizer =quperizer.mizer =frompers在內_sper_pp 這些 所有的冒險kenizer(文本,return_tensors =“pt”)。
AutoRound基本上支援所有主要的大語言模式。
請注意,星號 (*) 表示第三方量化模型,該模型可能缺乏準確性數據並使用不同的配方。我們非常感謝他們的努力,並鼓勵更多用戶分享他們的模型,因為我們自己無法發布大部分模型。
模型 | 支援 |
---|---|
元駱駝/元駱駝-3.1-70B-指示 | 食譜 |
元駱駝/元駱駝-3.1-8B-指示 | 模型-kaitchup-autogptq-int4*,模型-kaitchup-autogptq-sym-int4*,配方 |
元駱駝/元駱駝-3.1-8B | 模型-kaitchup-autogptq-sym-int4* |
Qwen/Qwen-VL | 準確度、配方 |
Qwen/Qwen2-7B | 模型-autoround-sym-int4、模型-autogptq-sym-int4 |
Qwen/Qwen2-57B-A14B-指令 | 模型-autoround-sym-int4,模型-autogptq-sym-int4 |
01-ai/Yi-1.5-9B | 模型-LnL-AI-autogptq-int4* |
01-ai/Yi-1.5-9B-聊天 | 模型-LnL-AI-autogptq-int4* |
英特爾/神經聊天-7b-v3-3 | 模型-autogptq-int4 |
英特爾/神經聊天-7b-v3-1 | 模型-autogptq-int4 |
TinyLlama-1.1B-中級 | 模型-LnL-AI-autogptq-int4* |
米斯特拉萊/Mistral-7B-v0.1 | 模型-autogptq-lmhead-int4,模型-autogptq-int4 |
Google/gemma-2b | 模型-autogptq-int4 |
蒂尤埃/falcon-7b | 模型-autogptq-int4-G64 |
sapienzanlp/modello-italia-9b | 模型-fbaldassarri-autogptq-int4* |
微軟/phi-2 | 模型 autoround-sym-int4 模型 autogptq-sym-int4 |
微軟/Phi-3.5-迷你指令 | 模型-kaitchup-autogptq-sym-int4* |
微軟/Phi-3-vision-128k-instruct | 食譜 |
米斯特拉萊/Mistral-7B-指令-v0.2 | 準確性、配方、範例 |
Mistralai/Mixtral-8x7B-Instruct-v0.1 | 準確性、配方、範例 |
米斯特拉萊/Mixtral-8x7B-v0.1 | 準確性、配方、範例 |
元駱駝/元駱駝-3-8B-指示 | 準確性、配方、範例 |
Google/gemma-7b | 準確性、配方、範例 |
元駱駝/Llama-2-7b-chat-hf | 準確性、配方、範例 |
Qwen/Qwen1.5-7B-聊天 | 準確性、sym 配方、asym 配方、範例 |
百川公司/百川2-7B-聊天 | 準確性、配方、範例 |
01-ai/Yi-6B-聊天 | 準確性、配方、範例 |
臉書/opt-2.7b | 準確性、配方、範例 |
大科學/bloom-3b | 準確性、配方、範例 |
EleutherAI/gpt-j-6b | 準確性、配方、範例 |
AutoRound 已整合到多個儲存庫中。
英特爾神經壓迫器
ModelCloud/GPTQ模型
pytorch/ao
如果您發現 AutoRound 對您的研究有用,請引用我們的論文:
@文章{heng2023優化, title={透過有符號梯度下降優化權重捨入以實現 LLM 的量化}, 作者={程、文華和張、偉偉和沈、海浩和蔡、一陽和何、辛和呂、考考和劉、易}, 期刊={arXiv預印本arXiv:2309.05516}, 年={2023} }