AutoRound ist ein fortschrittlicher Quantisierungsalgorithmus für die Low-Bit-LLM-Inferenz. Es ist auf eine Vielzahl von Modellen zugeschnitten. AutoRound nutzt den Vorzeichengradientenabstieg zur Feinabstimmung von Rundungswerten und Minmax-Werten von Gewichtungen in nur 200 Schritten. Dies konkurriert beeindruckend mit neueren Methoden, ohne zusätzlichen Inferenzaufwand zu verursachen und die Optimierungskosten niedrig zu halten. Das folgende Bild zeigt einen Überblick über AutoRound. Weitere Informationen finden Sie in unserem Artikel zu arxiv und unter low_bit_open_llm_leaderboard finden Sie weitere Genauigkeitsdaten und Rezepte für verschiedene Modelle.
[2024/10] AutoRound wurde in Torch/AO integriert, sehen Sie sich deren Versionshinweis an
[2024/10] Wichtiges Update: Wir unterstützen jetzt die symmetrische Vollbereichsquantisierung und haben sie zur Standardkonfiguration gemacht. Diese Konfiguration ist in der Regel besser oder vergleichbar mit der asymmetrischen Quantisierung und übertrifft andere symmetrische Varianten deutlich, insbesondere bei niedrigen Bitbreiten wie 2 Bit.
[2024/09] Das AutoRound-Format unterstützt mehrere LVM-Modelle, sehen Sie sich die Beispiele Qwen2-Vl, Phi-3-vision, Llava an
[2024/08] Das AutoRound-Format unterstützt Intel Gaudi2-Geräte. Bitte beziehen Sie sich auf Intel/Qwen2-7B-int4-inc.
[2024/08] AutoRound führt mehrere experimentelle Funktionen ein, darunter die schnelle Abstimmung von Norm-/Bias-Parametern (für 2-Bit und W4A4), Aktivierungsquantisierung und den Datentyp mx_fp.
pip install -vvv --no-build-isolation -e .
pip install automatische Rundung
Durch Aufrufen von auto-round -h
auf dem Terminal wird ein Benutzerhandbuch mit einer detaillierten Liste der unterstützten Argumente bereitgestellt. Alternativ können Sie auto_round
anstelle von auto-round
verwenden. Legen Sie unter format
das gewünschte Format fest. Der Export in mehrere Formate wird unterstützt.
CUDA_VISIBLE_DEVICES=0 automatische Rundung --model facebook/opt-125m --bits 4 --group_size 128 --format „auto_round,auto_gptq“ --disable_eval --output_dir ./tmp_autoround
Wir bieten zwei Rezepte für beste Genauigkeit und schnelle Laufgeschwindigkeit bei geringem Speicher. Einzelheiten siehe unten.
## beste Genauigkeit, 3X langsamer, low_gpu_mem_usage könnte ~20G einsparen, aber ~30% langsamerCUDA_VISIBLE_DEVICES=0 automatische Rundung --model facebook/opt-125m --bits 4 --group_size 128 --nsamples 512 --iter 1000 --low_gpu_mem_usage --disable_eval
## schnell und wenig Speicher, 2-3-fache Beschleunigung, leichter Genauigkeitsabfall bei W4G128CUDA_VISIBLE_DEVICES=0 Autorundung --model facebook/opt-125m --bits 4 --group_size 128 --nsamples 128 --iters 200 --seqlen 512 --batch_size 4 --disable_eval
AutoRound-Format : Dieses Format eignet sich gut für CPU-, HPU-Geräte, 2 Bit sowie Inferenz mit gemischter Genauigkeit. [2,4] Bits werden unterstützt. Es profitiert auch vom Marlin-Kernel, der die Inferenzleistung deutlich steigern kann. Es hat jedoch noch keine breite Akzeptanz in der Community gefunden.
AutoGPTQ-Format : Dieses Format eignet sich gut für die symmetrische Quantisierung auf CUDA-Geräten und wird von der Community weithin übernommen. [2,3,4,8] Bits werden unterstützt. Es profitiert auch vom Marlin-Kernel, der die Inferenzleistung deutlich steigern kann. Der asymmetrische Kernel weist jedoch Probleme auf , die insbesondere bei 2-Bit-Quantisierung und kleinen Modellen zu erheblichen Genauigkeitseinbußen führen können. Darüber hinaus weist die symmetrische Quantisierung bei einer 2-Bit-Präzision tendenziell eine schlechte Leistung auf.
AutoAWQ-Format : Dieses Format eignet sich gut für die asymmetrische 4-Bit-Quantisierung auf CUDA-Geräten und ist in der Community weit verbreitet. Es wird nur die 4-Bit-Quantisierung unterstützt. Es verfügt über eine spezielle Schichtfusion, die auf Lama-Modelle zugeschnitten ist.
from Transformers import AutoModelForCausalLM, AutoTokenizermodel_name = "facebook/opt-125m"model = AutoModelForCausalLM.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name)from auto_round import AutoRoundbits, group_size, sym = 4, 128, Trueautoround = AutoRound(model, tokenizer , bits=bits, group_size=group_size, sym=sym)## die beste Genauigkeit, 3X langsamer, low_gpu_mem_usage könnte ~20G einsparen, aber ~30 % langsamer# autoround = AutoRound(model, tokenizer, nsamples=512, iters=1000, low_gpu_mem_usage =True, bits=bits, group_size=group_size, sym=sym)## schnell und wenig Speicher, 2-3-fache Beschleunigung, leichter Genauigkeitsabfall bei 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'(Standard in Version>0.3.0), 'auto_gptq ', 'auto_awq'autoround.save_quantized(output_dir, format='auto_round', inplace=True)
Die Tests wurden auf dem Nvidia A100 80G mit der Nightly-Version von PyTorch 2.6.0.dev20241029+cu124 durchgeführt. Bitte beachten Sie, dass Datenlade- und Packkosten von der Auswertung ausgeschlossen wurden. Wir aktivieren Torch.compile für Torch 2.6, jedoch nicht für 2.5 aufgrund aufgetretener Probleme.
Um die GPU-Speichernutzung zu optimieren, können Sie zusätzlich zur Aktivierung von low_gpu_mem_usage
“ gradient_accumulate_steps=8
und batch_size=1
festlegen, obwohl dies die Optimierungszeit verlängern kann.
Die 3B- und 14B-Modelle wurden auf Qwen 2.5 evaluiert, das 8X7B-Modell ist Mixtral, während die übrigen Modelle LLaMA 3.1 verwendeten.
Brennerversion/Konfiguration W4G128 | 3B | 8B | 14B | 70B | 8X7B |
---|---|---|---|---|---|
2.6 mit Taschenlampe kompilieren | 7min 10 GB | 12min 18 GB | 23min 22 GB | 120min 42 GB | 28min 46 GB |
2.6 mit Taschenlampe kompilieren low_gpu_mem_usage=True | 12min 6 GB | 19min 10 GB | 33min 11 GB | 140min 25 GB | 38min 36 GB |
2.6 mit Taschenlampe kompilieren low_gpu_mem_usage=True gradient_accumulate_steps=8,bs=1 | 15min 3 GB | 25min 6 GB | 45min 7 GB | 187min 19 GB | 75min 36 GB |
2,5 ohne Brennerkompilierung | 8min 10 GB | 16min 20 GB | 30min 25 GB | 140min 49 GB | 50min 49 GB |
Bitte führen Sie zuerst den Quantisierungscode aus
CPU : auto_round Version >0.3.1 , pip install intel-extension-for-pytorch (viel höhere Geschwindigkeit auf Intel-CPU) oder pip install intel-extension-for-transformers,
HPU : Docker-Image mit Gaudi Software Stack wird empfohlen. Weitere Einzelheiten finden Sie im Gaudí-Guide.
CUDA : Keine zusätzlichen Operationen für die sym-Quantisierung. Für die asymmetrische Quantisierung muss die automatische Rundung aus der Quelle installiert werden
from Transformers Import AutoModelForCausalLM, AutoTokenizerfrom auto_round import AutoRoundConfigbackend = "auto" ##cpu, hpu, cuda, cuda:marlin(unterstützt in auto_round>0.3.1 und 'pip install -v gptqmodel --no-build-isolation')quantization_config = AutoRoundConfig(backend=backend)quantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map=backend.split(':')[0], quantization_config=quantization_config)tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = " Es gibt ein Mädchen, das Abenteuer mag,"inputs = tokenizer(text, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]) )
auto-round --model gespeichertes_quantisiertes_modell --eval --task lambada_openai --eval_bs 1
from Transformers Import AutoModelForCausalLM, AutoTokenizerquantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map="auto")tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = "Es gibt ein Mädchen, das Abenteuer mag,"inputs = tokenizer( text, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
AutoRound unterstützt grundsätzlich alle großen großen Sprachmodelle.
Bitte beachten Sie, dass ein Sternchen (*) auf quantisierte Modelle von Drittanbietern hinweist, denen möglicherweise Genauigkeitsdaten fehlen und die ein anderes Rezept verwenden. Wir schätzen ihre Bemühungen sehr und ermutigen mehr Benutzer, ihre Modelle zu teilen, da wir die meisten Modelle nicht selbst veröffentlichen können.
Modell | Unterstützt |
---|---|
meta-llama/Meta-Llama-3.1-70B-Instruct | Rezept |
meta-llama/Meta-Llama-3.1-8B-Instruct | model-kaitchup-autogptq-int4*, model-kaitchup-autogptq-sym-int4*, Rezept |
Meta-Lama/Meta-Lama-3.1-8B | model-kaitchup-autogptq-sym-int4* |
Qwen/Qwen-VL | Genauigkeit, Rezept |
Qwen/Qwen2-7B | model-autoround-sym-int4, model-autogptq-sym-int4 |
Qwen/Qwen2-57B-A14B-Anleitung | model-autoround-sym-int4,model-autogptq-sym-int4 |
01-ai/Yi-1.5-9B | model-LnL-AI-autogptq-int4* |
01-ai/Yi-1.5-9B-Chat | model-LnL-AI-autogptq-int4* |
Intel/neural-chat-7b-v3-3 | model-autogptq-int4 |
Intel/neural-chat-7b-v3-1 | model-autogptq-int4 |
TinyLlama-1.1B-Mittelstufe | model-LnL-AI-autogptq-int4* |
mistralai/Mistral-7B-v0.1 | model-autogptq-lmhead-int4, model-autogptq-int4 |
google/gemma-2b | model-autogptq-int4 |
tiiuae/falcon-7b | model-autogptq-int4-G64 |
sapienzanlp/modello-italia-9b | model-fbaldassarri-autogptq-int4* |
Microsoft/Phi-2 | model-autoround-sym-int4 model-autogptq-sym-int4 |
microsoft/Phi-3.5-mini-instruct | model-kaitchup-autogptq-sym-int4* |
microsoft/Phi-3-vision-128k-instruct | Rezept |
mistralai/Mistral-7B-Instruct-v0.2 | Genauigkeit, Rezept, Beispiel |
mistralai/Mixtral-8x7B-Instruct-v0.1 | Genauigkeit, Rezept, Beispiel |
mistralai/Mixtral-8x7B-v0.1 | Genauigkeit, Rezept, Beispiel |
Meta-Lama/Meta-Llama-3-8B-Instruct | Genauigkeit, Rezept, Beispiel |
google/gemma-7b | Genauigkeit, Rezept, Beispiel |
meta-lama/Llama-2-7b-chat-hf | Genauigkeit, Rezept, Beispiel |
Qwen/Qwen1.5-7B-Chat | Genauigkeit, Sym-Rezept, Asym-Rezept, Beispiel |
baichuan-inc/Baichuan2-7B-Chat | Genauigkeit, Rezept, Beispiel |
01-ai/Yi-6B-Chat | Genauigkeit, Rezept, Beispiel |
facebook/opt-2.7b | Genauigkeit, Rezept, Beispiel |
bigscience/bloom-3b | Genauigkeit, Rezept, Beispiel |
EleutherAI/gpt-j-6b | Genauigkeit, Rezept, Beispiel |
AutoRound wurde in mehrere Repositories integriert.
Intel Neural Compressor
ModelCloud/GPTQModel
pytorch/ao
Wenn Sie AutoRound für Ihre Forschung nützlich finden, zitieren Sie bitte unseren Artikel:
@article{cheng2023optimize, title={Gewichtungsrundung durch vorzeichenbehafteten Gradientenabstieg für die Quantisierung von LLMs optimieren}, Autor={Cheng, Wenhua und Zhang, Weiwei und Shen, Haihao und Cai, Yiyang und He, Xin und Lv, Kaokao und Liu, Yi}, journal={arXiv preprint arXiv:2309.05516}, Jahr={2023} }