Transformers documentation
AutoRound
AutoRound
AutoRound는 2-bit 정밀도에서도 높은 정확도를 제공하는 고급 양자화 알고리즘입니다. 부호 기하급수적 감소(sign gradient descent)를 활용하여 반올림 값과 min-max 클리핑 임계값을 단 200단계로 미세 조정합니다. 광범위한 호환성을 위해 설계되어 다양한 LLM을 원활하게 지원하며, 더 많은 VLM을 포괄하도록 지속적으로 확장되고 있습니다. 또한 CPU, XPU, CUDA를 포함한 여러 하드웨어 플랫폼에서 양자화 및 추론을 지원합니다.
AutoRound은 자동 혼합 비트 튜닝 및 추론, MXFP4 및 NVFP4 데이터 유형 지원, 모델 없이 수행되는 양자화, GPTQ, AWQ, GGUF, LLM-Compressor와 같은 형식으로 내보내기, 유연한 튜닝 레시피 등 다양한 유용한 기능을 제공합니다. 포괄적인 개요와 최신 업데이트는 AutoRound README를 확인하세요.
AutoRound은 Intel Neural Compressor의 일부로 처음 개발되었으며, 딥러닝을 위한 범용 모델 압축 라이브러리로 기능했습니다. 이후에는 대규모 언어 모델(LLM)의 저정밀도 최적화에 특화된 독립형 라이브러리로 발전했습니다. AutoRound는 여전히 Intel Neural Compressor와 완전히 통합되어 있으며, 자세한 내용은 저장소를 참고하세요.
설치
pip install auto-round
지원되는 양자화 구성
AutoRound은 다음 양자화 구성을 지원합니다:
- INT2–INT8 가중치 전용
- 혼합 비트 가중치 전용
- GGUF Q*_K
- MXFP (제한된 지원)
- NVFP4 (제한된 지원)
하드웨어 호환성
양자화 및 추론 모두에 CPU, XPU, CUDA를 지원합니다.
양자화 및 직렬화(오프라인)
현재 양자화 모델 생성에는 오프라인 모드만 지원됩니다.
명령줄 사용
auto-round \
--model Qwen/Qwen3-0.6B \
--scheme "W4A16" \
--group_size 128 \
--output_dir ./tmp_autoroundAutoRound는 최적의 정확도와 향상된 속도를 위해 각각 설계된 auto-round-best, auto-round-light, auto-round-opt-rtn, auto-round-rtn의 네 가지 레시피를 추가로 제공합니다.
2비트인 경우 auto-round-best를 --enable_alg_ext와 함께 사용하는 것을 권장합니다.
AutoScheme 사용
AutoScheme는 대상 평균 비트 폭을 조건으로, 양자화 대상 각 레이어에 대해 몇 분 만에 사용 가능한 옵션 중 최적의 양자화 스킴을 자동으로 선택하는 기능입니다.
auto-round \
--model Qwen/Qwen3-0.6B \
--options "W4A16,W2A16G64" \
--target_bits 3.5 \
--output_dir ./tmp_autoround알고리즘 조합
AutoRound은 AutoRound, AutoRound + AWQ, AutoRound + AWQ + Hadamard(지원 범위가 매우 제한적)와 같이 여러 알고리즘을 조합하는 것을 지원합니다. 현재 더 많은 알고리즘에 대한 지원을 확대하고 있습니다. 이를 통해 양자화 결과를 추가로 최적화할 수 있으며, 특히 양자화된 activations가 포함된 시나리오에서 유용합니다.
auto-round \
--model Qwen/Qwen3-0.6B \
--algs "autoround,awq" \
--output_dir ./tmp_autoroundAutoRound API 사용
이 설정은 정확도와 튜닝 비용 사이의 균형이 더 우수하며, 모든 시나리오에서 권장됩니다.
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') AutoRound 최적 레시피
이 설정은 대부분의 시나리오에서 가장 높은 정확도를 제공하지만, 표준 AutoRound 레시피보다 4~5배 느립니다. 2-bit 양자화에 특히 권장되며, 충분한 리소스가 사용 가능한 경우 좋은 선택입니다.
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 레시피
이 설정은 가장 빠른 속도(AutoRound보다 2~3배 빠름)를 제공하지만, 소형 모델 및 2-bit 양자화에서는 정확도가 크게 떨어질 수 있습니다. 4-bit 설정 및 3B 이상의 모델에 권장됩니다.
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의 13개 작업(mmlu-pro, if_eval, gsm8k 등)의 평균 정확도 및 시간 비용 결과(테스트는 enable_torch_compile이 활성화된 PyTorch 2.6.0 버전으로 Nvidia A100 80G에서 수행됨):
| 모델 | Qwen2.5-0.5B-Instruct | Falcon3-3B | Qwen2.5-7B-Instruct | Meta-Llama-3.1-8B-Instruct | Falcon3-10B | Qwen2.5-72B-Instruct |
|---|---|---|---|---|---|---|
| 16bits | 0.4192 | 0.5203 | 0.6470 | 0.6212 | 0.6151 | 0.7229 |
| 최고 | 0.4137(7m) | 0.5142(23m) | 0.6426(58m) | 0.6116(65m) | 0.6092(81m) | 0.7242(575m) |
| 기본값 | 0.4129(2m) | 0.5133(6m) | 0.6441(13m) | 0.6106(13m) | 0.6080(18m) | 0.7252(118m) |
| 라이트 | 0.4052(2m) | 0.5108(3m) | 0.6453(5m) | 0.6104(6m) | 0.6063(6m) | 0.7243(37m) |
추론
AutoRound은 설치된 라이브러리를 기반으로 가장 적합한 백엔드를 자동으로 선택하며, 더 나은 백엔드가 발견되면 사용자에게 추가 라이브러리 설치를 안내합니다.
CPU
2, 4, 8 비트를 지원합니다. 추론에는 AutoRound Kernel(ARK) 백엔드를 사용하는 것을 권장합니다. ARK를 사용하려면 PyTorch 2.8.0 이상이 필요합니다.
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, 8 비트를 지원합니다. 추론에는 AutoRound Kernel(ARK) 백엔드를 사용하는 것을 권장합니다. ARK를 사용하려면 PyTorch 2.8.0 이상이 필요합니다.
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비트를 지원합니다. 4비트 및 8비트 추론에는 GPTQModel 사용을 권장합니다.
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]))추론 백엔드 지정
AutoRound은 호환성에 따라 각 레이어의 백엔드를 자동으로 선택합니다. 일반적으로 우선순위는 Marlin > ExLLaMAV2 > Triton이지만, 최종 선택은 group size, bit width, packing format, 하드웨어 디바이스 및 기타 구현 세부 사항에 따라 달라집니다. 자세한 내용은 backends를 참고하세요.
특정 장치에 대해 백엔드가 항상 가장 적합하지 않을 수 있습니다. 필요 사항 또는 하드웨어 호환성에 따라 CPU와 XPU의 경우 “ark”, CUDA의 경우 “marlin/exllamav2/triton”과 같이 선호하는 백엔드를 지정할 수 있습니다. 추가적인 관련 라이브러리가 필요할 수 있다는 점을 유의하세요.
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를 AutoRound로 변환
대부분의 GPTQ/AWQ 모델은 Intel 장치와의 호환성 및 지원을 개선하기 위해 AutoRound 형식으로 변환할 수 있습니다. 모델이 직렬화되면 양자화 설정이 변경된다는 점에 유의하세요.
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]))이슈
transformers 통합에서 문제가 발생하면 transformers 저장소에 이슈를 등록해 주세요.
auto-round에서 문제가 발생하면 AutoRound 저장소에 이슈를 등록해 주세요.
감사
AutoGPTQ, AutoAWQ, GPTQModel, Triton, Marlin, ExLLaMAV2와 같은 오픈소스 저정밀 라이브러리가 AutoRound에서 활용되는 저정밀 CUDA 커널을 제공해 주셔서 특별히 감사드립니다.
기여
AutoRound에 대한 기여를 환영하며, 매우 감사드립니다! 버그 수정, 문서 개선, 새로운 기능 추가, 개선 사항 제안 등 어떤 도움도 항상 소중히 여깁니다.
Update on GitHub