Transformers documentation
AutoRound
AutoRound
AutoRound, 2-bit hassasiyette bile güçlü doğruluk sunan gelişmiş bir kuantizasyon algoritmasıdır. İşaret gradyan inişinden (sign gradient descent) yararlanarak hem yuvarlama değerlerini hem de min-max kırpma eşiklerini yalnızca 200 adımda ince ayarlar. Geniş uyumluluk için tasarlanmış olup geniş bir LLM yelpazesini sorunsuz şekilde destekler ve kapsamını giderek daha fazla VLM'yi kapsayacak şekilde aktif olarak genişletmektedir. Ayrıca CPU, XPU ve CUDA dahil olmak üzere çeşitli donanım platformlarında kuantizasyon ve çıkarım (inference) işlemlerini destekler.
AutoRound, otomatik karma bit ayarı ve çıkarım, MXFP4 ve NVFP4 veri türleri desteği, model bağımsız kuantizasyon, GPTQ, AWQ, GGUF ve LLM-Compressor gibi formatlara dışa aktarma ve esnek ayar tarifleri gibi çeşitli faydalı özellikler sunar. Kapsamlı bir genel bakış ve en son güncellemeler için AutoRound README'sine göz atın.
AutoRound, derin öğrenme için genel amaçlı bir model sıkıştırma kütüphanesi olarak Intel Neural Compressor'ın bir parçası olarak geliştirilmiştir. Zamanla, büyük dil modelleri (LLM) için düşük hassasiyetli optimizasyona odaklanan bağımsız bir kütüphaneye evrilmiştir. AutoRound, Intel Neural Compressor ile tam olarak entegre kalmaya devam etmektedir ve daha fazla ayrıntı için depoyu inceleyebilirsiniz.
Kurulum
pip install auto-round
Desteklenen Kuantizasyon Yapılandırmaları
AutoRound aşağıdaki kuantizasyon yapılandırmalarını destekler:
- INT2–INT8 Sadece Ağırlık
- Karışık-Bit Sadece Ağırlık
- GGUF Q*_K
- MXFP (sınırlı destek)
- NVFP4 (sınırlı destek)
Donanım Uyumluluğu
Hem kuantizasyon hem de çıkarım için CPU, XPU ve CUDA.
Kantizasyon ve Seriye Alma (çevrimdışı)
Şu anda, kuantize modelleri üretmek için yalnızca çevrimdışı mod desteklenmektedir.
Komut Satırı Kullanımı
auto-round \
--model Qwen/Qwen3-0.6B \
--scheme "W4A16" \
--group_size 128 \
--output_dir ./tmp_autoroundAutoRound, sırasıyla en yüksek doğruluk ve iyileştirilmiş hız için tasarlanmış auto-round-best, auto-round-light, auto-round-opt-rtn ve auto-round-rtn olmak üzere dört ek tarif daha sunar.
2 bit için auto-round-best’ın --enable_alg_ext ile kullanılmasını öneririz.
AutoScheme Kullanımı
AutoScheme, hedef ortalama bit genişliğine bağlı olarak, saniyeler içinde her bir katman için mevcut seçeneklerden en iyi kuantizasyon şemasını otomatik olarak seçen bir özelliktir.
auto-round \
--model Qwen/Qwen3-0.6B \
--options "W4A16,W2A16G64" \
--target_bits 3.5 \
--output_dir ./tmp_autoroundAlgoritma Kombinasyonları
AutoRound, AutoRound, AutoRound + AWQ ve AutoRound + AWQ + Hadamard (çok sınırlı destek) gibi birden fazla algoritmanın birleştirilmesini destekler. Şu anda daha fazla algoritma için desteği genişletiyoruz. Bu, özellikle kuantize edilmiş aktivasyonlar içeren senaryolarda kuantizasyon sonuçlarının daha da optimize edilmesini sağlar.
auto-round \
--model Qwen/Qwen3-0.6B \
--algs "autoround,awq" \
--output_dir ./tmp_autoroundAutoRound API Kullanımı
Bu ayar, doğruluk ve ayarlama maliyeti arasında daha iyi bir denge sunar ve tüm senaryolarda önerilir.
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
# mixed bits config
# layer_config = {"model.decoder.layers.6.self_attn.out_proj": {"bits": 2, "group_size": 32}}
ar = AutoRound(
model_name,
scheme="W4A16",
# enable_torch_compile=True,
# layer_config=layer_config,
)
output_dir = "./tmp_autoround"
# format= 'auto_round'(default), 'llm_compressor', "gguf:q4_k_m", 'auto_gptq', 'auto_awq'
ar.quantize_and_save(output_dir, format='auto_round') AutoRoundEn iyi yöntem
Bu ayar, çoğu senaryoda en iyi doğruluğu sağlar ancak standart AutoRound tarifiyle karşılaştırıldığında 4–5 kat daha yavaştır. Özellikle 2-bit kuantizasyon için önerilir ve yeterli kaynak mevcutsa iyi bir seçimdir.
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
ar = AutoRound(
model_name,
scheme="W4A16",
nsamples=512,
iters=1000,
)
output_dir = "./tmp_autoround"
ar.quantize_and_save(output_dir, format='auto_round') AutoRoundLight tarifi
Bu ayar en iyi hızı sunar (AutoRound'dan 2-3 kat daha hızlıdır), ancak küçük modellerde ve 2-bit kuantizasyonda önemli bir doğruluk düşüşüne neden olabilir. 4-bit ayarları ve 3B'den büyük modeller için önerilir.
from transformers import AutoModelForCausalLM, AutoTokenizer
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
ar = AutoRound(
model_name,
iters=50,
lr=5e-3,
)
output_dir = "./tmp_autoround"
ar.quantize_and_save(output_dir, format='auto_round') W4G128 ortalama doğruluğu 13 görev (mmlu-pro, if_eval, gsm8k vb.) ve zaman maliyeti sonuçları (Testler, enable_torch_compile ile PyTorch 2.6.0 sürümü kullanılarak Nvidia A100 80G üzerinde gerçekleştirildi):
| Model | Qwen2.5-0.5B-Instruct | Falcon3-3B | Qwen2.5-7B-Instruct | Meta-Llama-3.1-8B-Instruct | Falcon3-10B | Qwen2.5-72B-Instruct |
|---|---|---|---|---|---|---|
| 16 bits | 0.4192 | 0.5203 | 0.6470 | 0.6212 | 0.6151 | 0.7229 |
| En iyi | 0.4137(7m) | 0.5142(23m) | 0.6426(58m) | 0.6116(65m) | 0.6092(81m) | 0.7242(575m) |
| Varsayılan | 0.4129(2m) | 0.5133(6m) | 0.6441(13m) | 0.6106(13m) | 0.6080(18m) | 0.7252(118m) |
| Açık | 0.4052(2m) | 0.5108(3m) | 0.6453(5m) | 0.6104(6m) | 0.6063(6m) | 0.7243(37m) |
Çıkarım
AutoRound, kurulu kütüphanelere göre en iyi kullanılabilir arka ucu otomatik olarak seçer ve daha iyi bir arka uç bulunduğunda kullanıcıya ek kütüphanelerin yüklenmesini önerir.
CPU
2, 4 ve 8 bit'i destekler. Çıkarım için AutoRound Kernel (ARK) arka ucunu kullanmanızı öneririz. ARK ile birlikte PyTorch 2.8.0 veya daha yeni bir sürüm gereklidir.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))XPU
2, 4 ve 8 bit'i destekler. Çıkarım için AutoRound Kernel (ARK) arka ucunu kullanmanızı öneririz. ARK ile birlikte PyTorch 2.8.0 veya daha yeni bir sürüm gereklidir.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="xpu", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))CUDA
2-8 bit destekler. 4 ve 8 bit çıkarım için GPTQModel kullanmanızı öneririz.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cuda", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Çıkarım Arka Ucu Belirt
AutoRound, uyumluluğa göre her katman için arka ucu otomatik olarak seçer. Genel olarak öncelik sırası Marlin > ExLLaMAV2 > Triton şeklindedir, ancak nihai seçim grup boyutu, bit genişliği, paketleme biçimi, donanım cihazı ve diğer uygulama detayları gibi faktörlere bağlıdır. Daha fazla ayrıntı için lütfen backends bölümüne başvurun,
Arka uç, belirli cihazlar için her zaman en uygun seçenek olmayabilir. İhtiyaçlarınıza veya donanım uyumluluğunuza göre, CPU ve XPU için “ark” veya CUDA için “marlin/exllamav2/triton” gibi tercih ettiğiniz arka ucu belirleyebilirsiniz. Lütfen ek olarak ilgili kütüphanelerin gerekebileceğini unutmayın.
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
quantization_config = AutoRoundConfig(backend="ark")
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", quantization_config=quantization_config, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))GPTQ/AWQ'yi AutoRound'a dönüştürme
Çoğu GPTQ/AWQ modeli, Intel cihazlarla daha iyi uyumluluk ve destek için AutoRound biçimine dönüştürülebilir. Lütfen dikkat edin: model serileştirildiğinde kuantizasyon yapılandırması değiştirilir.
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig
model_name = "ybelkada/opt-125m-gptq-4bit"
quantization_config = AutoRoundConfig()
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", quantization_config=quantization_config, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Sorunlar
transformers entegrasyonuyla ilgili herhangi bir sorunla karşılaşırsanız, lütfen transformers deposunda bir sorun açın.
auto-round ile ilgili herhangi bir sorunla karşılaşırsanız, lütfen AutoRound deposunda bir sorun açın.
Teşekkür
AutoGPTQ, AutoAWQ, GPTQModel, Triton, Marlin ve ExLLaMAV2 gibi açık kaynak düşük hassasiyetli kütüphanelere, AutoRound'da kullanılan düşük hassasiyetli CUDA çekirdeklerini sağladıkları için özel teşekkürler.
Katkı
AutoRound projesine yapılan katkılar memnuniyetle karşılanır ve büyük takdirle karşılanır! Hata düzeltme, dokümantasyonu iyileştirme, yeni özellikler ekleme veya iyileştirme önerileri sunma gibi konularda desteğiniz her zaman değerlidir.
Update on GitHub