AutoRound adalah algoritma kuantisasi tingkat lanjut untuk inferensi LLM bit rendah. Ini disesuaikan untuk berbagai model. AutoRound mengadopsi penurunan gradien tanda untuk menyempurnakan nilai pembulatan dan nilai minmax bobot hanya dalam 200 langkah, yang bersaing secara mengesankan dengan metode terbaru tanpa menimbulkan overhead inferensi tambahan dan menjaga biaya penyetelan tetap rendah. Gambar di bawah menyajikan ikhtisar AutoRound. Lihat makalah kami di arxiv untuk detail lebih lanjut dan kunjungi low_bit_open_llm_leaderboard untuk data dan resep yang lebih akurat di berbagai model.
[2024/10] AutoRound telah terintegrasi ke torch/ao, lihat catatan rilisnya
[2024/10] Pembaruan penting: Kami sekarang mendukung kuantisasi simetris jangkauan penuh dan menjadikannya konfigurasi default. Konfigurasi ini biasanya lebih baik atau sebanding dengan kuantisasi asimetris dan secara signifikan mengungguli varian simetris lainnya, terutama pada lebar bit rendah seperti 2-bit.
[2024/09] Format AutoRound mendukung beberapa model LVM, lihat contoh Qwen2-Vl,Phi-3-vision, Llava
[2024/08] Format AutoRound mendukung perangkat Intel Gaudi2. Silakan merujuk ke Intel/Qwen2-7B-int4-inc.
[2024/08] AutoRound memperkenalkan beberapa fitur eksperimental, termasuk penyesuaian cepat parameter norma/bias (untuk 2-bit dan W4A4), kuantisasi aktivasi, dan tipe data mx_fp.
pip install -vvv --no-build-isolasi -e .
pip install putaran otomatis
Panduan pengguna yang merinci daftar lengkap argumen yang didukung disediakan dengan memanggil auto-round -h
di terminal. Alternatifnya, Anda dapat menggunakan auto_round
daripada auto-round
. Atur format yang Anda inginkan dalam format
dan ekspor berbagai format telah didukung.
CUDA_VISIBLE_DEVICES=0 putaran otomatis --model facebook/opt-125m --bit 4 --grup_ukuran 128 --format "putaran_otomatis,auto_gptq" --disable_eval --output_dir ./tmp_autoround
Kami menyediakan dua resep untuk akurasi terbaik dan kecepatan lari cepat dengan memori rendah. Detailnya seperti di bawah ini.
## akurasi terbaik, 3X lebih lambat, low_gpu_mem_usage dapat menghemat ~20G tetapi ~30% lebih lambatCUDA_VISIBLE_DEVICES=0 putaran otomatis --model facebook/opt-125m --bit 4 --grup_ukuran 128 --contoh 512 --iters 1000 --low_gpu_mem_usage --disable_eval
## memori cepat dan rendah, percepatan 2-3X, sedikit penurunan akurasi pada W4G128CUDA_VISIBLE_DEVICES=0 putaran otomatis --model facebook/opt-125m --bit 4 --grup_ukuran 128 --contoh 128 --iter 200 --seqlen 512 --batch_ukuran 4 --disable_eval
Format AutoRound : Format ini sangat cocok untuk CPU, perangkat HPU, 2 bit, serta inferensi presisi campuran. [2,4] bit didukung. Ini juga mendapat manfaat dari kernel Marlin, yang dapat meningkatkan kinerja inferensi secara signifikan. Namun, hal ini belum diadopsi secara luas oleh masyarakat.
Format AutoGPTQ : Format ini sangat cocok untuk kuantisasi simetris pada perangkat CUDA dan diadopsi secara luas oleh komunitas, [2,3,4,8] bit didukung. Ini juga mendapat manfaat dari kernel Marlin, yang dapat meningkatkan kinerja inferensi secara signifikan. Namun, kernel asimetris memiliki masalah yang dapat menyebabkan penurunan akurasi yang signifikan, terutama pada kuantisasi 2-bit dan model kecil. Selain itu, kuantisasi simetris cenderung berkinerja buruk pada presisi 2-bit.
Format AutoAWQ : Format ini sangat cocok untuk kuantisasi 4-bit asimetris pada perangkat CUDA dan diadopsi secara luas di komunitas, hanya kuantisasi 4-bit yang didukung. Ini menampilkan fusi lapisan khusus yang disesuaikan untuk model Llama.
dari transformator impor 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 , bit=bit, group_size=group_size, sym=sym)## akurasi terbaik, 3X lebih lambat, low_gpu_mem_usage dapat menghemat ~20G tetapi ~30% lebih lambat# autoround = AutoRound(model, tokenizer, nsamples=512, iters=1000, low_gpu_mem_usage=True, bits= bit, group_size=group_size, sym=sym)## memori cepat dan rendah, Peningkatan kecepatan 2-3X, sedikit penurunan akurasi pada 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'(default di versi>0.3.0), 'auto_gptq', 'auto_awq'autoround.save_quantized(output_dir, format='auto_round', inplace=True)
Pengujian dilakukan pada Nvidia A100 80G menggunakan PyTorch 2.6.0.dev20241029+cu124 versi malam. Harap dicatat bahwa biaya pemuatan dan pengepakan data tidak termasuk dalam evaluasi. Kami mengaktifkan torch.compile untuk Torch 2.6, tetapi tidak untuk 2.5 karena ada masalah.
Untuk mengoptimalkan penggunaan memori GPU, selain mengaktifkan low_gpu_mem_usage
, Anda dapat mengatur gradient_accumulate_steps=8
dan batch_size=1
, meskipun hal ini dapat menambah waktu penyetelan.
Model 3B dan 14B dievaluasi pada Qwen 2.5, model 8X7B adalah Mixtral, sedangkan model lainnya menggunakan LLaMA 3.1.
Versi obor/Konfigurasi W4G128 | 3B | 8B | 14B | 70B | 8X7B |
---|---|---|---|---|---|
2.6 dengan kompilasi obor | 7 menit 10GB | 12 menit 18GB | 23 menit 22GB | 120 menit 42GB | 28 menit 46GB |
2.6 dengan kompilasi obor low_gpu_mem_usage=Benar | 12 menit 6GB | 19 menit 10GB | 33 menit 11GB | 140 menit 25GB | 38 menit 36GB |
2.6 dengan kompilasi obor low_gpu_mem_usage=Benar gradien_akumulasi_langkah=8,bs=1 | 15 menit 3GB | 25 menit 6GB | 45 menit 7GB | 187 menit 19GB | 75 menit 36GB |
2.5 tanpa kompilasi obor | 8 menit 10GB | 16 menit 20GB | 30 menit 25GB | 140 menit 49GB | 50 menit 49GB |
Silakan jalankan kode kuantisasi terlebih dahulu
CPU : auto_round version >0.3.1 , pip install intel-extension-for-pytorch (kecepatan jauh lebih tinggi pada CPU Intel) atau pip install intel-extension-for-transformers,
HPU : gambar buruh pelabuhan dengan Gaudi Software Stack direkomendasikan. Detail lebih lanjut dapat ditemukan di Panduan Gaudi.
CUDA : tidak ada operasi tambahan untuk kuantisasi sim, untuk kuantisasi asym, perlu menginstal putaran otomatis dari sumber
dari transformator import AutoModelForCausalLM, AutoTokenizerfrom auto_round import AutoRoundConfigbackend = "auto" ##cpu, hpu, cuda, cuda:marlin(didukung di auto_round>0.3.1 dan '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 = "Ada seorang gadis yang menyukai petualangan,"inputs = tokenizer(text , return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
putaran otomatis --model save_quantized_model --eval --tugas lambada_openai --eval_bs 1
dari transformator impor AutoModelForCausalLM, AutoTokenizerquantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map="auto")tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = "Ada seorang gadis yang menyukai petualangan,"inputs = tokenizer( teks, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
AutoRound pada dasarnya mendukung semua model bahasa besar utama.
Harap perhatikan bahwa tanda bintang (*) menunjukkan model terkuantisasi pihak ketiga, yang mungkin kekurangan data akurasi dan menggunakan resep berbeda. Kami sangat menghargai upaya mereka dan mendorong lebih banyak pengguna untuk membagikan model mereka, karena kami tidak dapat merilis sendiri sebagian besar model tersebut.
Model | Didukung |
---|---|
meta-llama/Meta-Llama-3.1-70B-Instruksikan | resep |
meta-llama/Meta-Llama-3.1-8B-Instruksikan | model-kaitchup-autogptq-int4*, model-kaitchup-autogptq-sym-int4*, resep |
meta-llama/Meta-Llama-3.1-8B | model-kaitchup-autogptq-sym-int4* |
Qwen/Qwen-VL | akurasi, resep |
Qwen/Qwen2-7B | model-autoround-sym-int4, model-autogptq-sym-int4 |
Qwen/Qwen2-57B-A14B-Instruksikan | 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-Obrolan | model-LnL-AI-autogptq-int4* |
Intel/neural-obrolan-7b-v3-3 | model-autogptq-int4 |
Intel/neural-obrolan-7b-v3-1 | model-autogptq-int4 |
TinyLlama-1.1B-menengah | 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 | resep |
mistralai/Mistral-7B-Instruksikan-v0.2 | akurasi, resep, contoh |
mistralai/Mixtral-8x7B-Instruksikan-v0.1 | akurasi, resep, contoh |
mistralai/Mixtral-8x7B-v0.1 | akurasi, resep, contoh |
meta-llama/Meta-Llama-3-8B-Instruksikan | akurasi, resep, contoh |
google/gemma-7b | akurasi, resep, contoh |
meta-llama/Llama-2-7b-chat-hf | akurasi, resep, contoh |
Qwen/Qwen1.5-7B-Obrolan | akurasi, resep sim, resep asym, contoh |
baichuan-inc/Baichuan2-7B-Obrolan | akurasi, resep, contoh |
01-ai/Yi-6B-Obrolan | akurasi, resep, contoh |
facebook/opt-2.7b | akurasi, resep, contoh |
ilmu besar/mekar-3b | akurasi, resep, contoh |
EleutherAI/gpt-j-6b | akurasi, resep, contoh |
AutoRound telah diintegrasikan ke dalam beberapa repositori.
Kompresor Neural Intel
ModelCloud/GPTQModel
pytorch/ao
Jika Anda merasa AutoRound berguna untuk penelitian Anda, silakan kutip makalah kami:
@artikel{cheng2023optimalkan, title={Optimalkan Pembulatan Berat melalui Penurunan Gradien yang Ditandatangani untuk Kuantisasi LLM}, author={Cheng, Wenhua dan Zhang, Weiwei dan Shen, Haihao dan Cai, Yiyang dan He, Xin dan Lv, Kaokao dan Liu, Yi}, jurnal={arXiv pracetak arXiv:2309.05516}, tahun={2023} }