AutoRound

AutoRound

AutoRound은 2비트 정밀도에서도 강력한 정확도를 내는 고급 양자화 알고리즘입니다. 부호 경사 하강(sign gradient descent)을 활용해 반올림 값과 최소-최대 클리핑 임계값을 단 200 스텝 만에 미세 조정해요. 광범위한 호환성을 위해 설계되어 다양한 LLM을 매끄럽게 지원하며, 더 많은 VLM도 적극적으로 확장하고 있어요. CPU, XPU, CUDA를 포함한 여러 하드웨어 플랫폼에서 양자화와 추론을 지원합니다.

출처: 문서

본문

AutoRound는 자동 혼합 비트 튜닝·추론, MXFP4·NVFP4 데이터 타입 지원, 모델 없는(model-free) 양자화, GPTQ·AWQ·GGUF·LLM-Compressor 같은 형식으로의 내보내기, 유연한 튜닝 레시피 등 다양한 유용한 기능도 제공합니다. 종합적인 개요와 최신 업데이트는 AutoRound README를 확인하세요.

AutoRound는 원래 Intel Neural Compressor의 일부로 개발되었으며, 딥러닝을 위한 범용 모델 압축 라이브러리 역할을 했어요. 이후 대규모 언어 모델(LLM)을 위한 저정밀 최적화에 특화된 독립 라이브러리로 발전했습니다. AutoRound는 여전히 Intel Neural Compressor에 완전히 통합되어 있으며, 자세한 내용은 저장소에서 확인할 수 있습니다.

설치 (Installation)

pip install auto-round

지원되는 양자화 설정 (Supported Quantization Configurations)

AutoRound는 다음 양자화 설정을 지원합니다.

  1. INT2–INT8 Weight-Only
  2. Mixed-Bit Weight-Only
  3. GGUF Q*_K
  4. MXFP (제한적 지원)
  5. NVFP4 (제한적 지원)

하드웨어 호환성 (Hardware Compatibility)

양자화와 추론 모두에 CPU, XPU, CUDA를 지원합니다.

양자화와 직렬화 (오프라인) (Quantization and Serialization (offline))

현재 양자화된 모델을 생성하는 것은 오프라인 모드만 지원합니다.

명령줄 사용법 (Command Line Usage)

auto-round \
    --model Qwen/Qwen3-0.6B \
    --scheme "W4A16" \
    --group_size 128 \
    --output_dir ./tmp_autoround

AutoRound는 최적의 정확도와 향상된 속도를 위해 각각 설계된 auto-round-best, auto-round-light, auto-round-opt-rtn, auto-round-rtn의 네 가지 레시피도 제공합니다. 2비트에서는 --enable_alg_ext와 함께 auto-round-best를 사용하는 것을 추천해요.

AutoScheme 사용법 (AutoScheme Usage)

AutoScheme은 사용 가능한 옵션에서 목표 평균 비트 폭을 기준으로, 양자화할 각 레이어의 최상의 양자화 방식을 수 분 안에 자동으로 선택하는 기능입니다.

auto-round \
    --model Qwen/Qwen3-0.6B \
    --options "W4A16,W2A16G64" \
    --target_bits 3.5 \
    --output_dir ./tmp_autoround

알고리즘 결합 (Algorithm Combinations)

AutoRound는 AutoRound, AutoRound + AWQ, AutoRound + AWQ + Hadamard(매우 제한적 지원)처럼 여러 알고리즘의 결합을 지원합니다. 현재 더 많은 알고리즘에 대한 지원을 확장하고 있어요. 이는 양자화된 활성화를 포함하는 시나리오에서 특히 양자화 결과를 더 최적화할 수 있게 합니다.

auto-round \
    --model Qwen/Qwen3-0.6B \
    --algs "autoround,awq" \
    --output_dir ./tmp_autoround

AutoRound API 사용법 (AutoRound API Usage)

이 설정은 정확도와 튜닝 비용 사이에서 더 나은 트레이드오프를 제공하며, 모든 시나리오에서 권장됩니다.

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') 

AutoRoundBest 레시피 (AutoRoundBest recipe)

이 설정은 대부분의 시나리오에서 최상의 정확도를 제공하지만 표준 AutoRound 레시피보다 4~5배 느립니다. 특히 2비트 양자화에 권장되며, 충분한 자원이 있다면 좋은 선택입니다.

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 레시피 (AutoRoundLight recipe)

이 설정은 최상의 속도(AutoRound보다 2~3배 빠름)를 제공하지만, 작은 모델과 2비트 양자화에서는 상당한 정확도 저하를 일으킬 수 있어요. 4비트 설정과 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 등) 평균 정확도와 시간 비용 결과 (테스트는 Nvidia A100 80G에서 PyTorch 2.6.0 버전, enable_torch_compile로 수행됨):

모델 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
Best 0.4137(7m) 0.5142(23m) 0.6426(58m) 0.6116(65m) 0.6092(81m) 0.7242(575m)
Default 0.4129(2m) 0.5133(6m) 0.6441(13m) 0.6106(13m) 0.6080(18m) 0.7252(118m)
Light 0.4052(2m) 0.5108(3m) 0.6453(5m) 0.6104(6m) 0.6063(6m) 0.7243(37m)

추론 (Inference)

AutoRound는 설치된 라이브러리를 기반으로 사용 가능한 최상의 백엔드를 자동으로 선택하며, 더 나은 백엔드를 찾으면 추가 라이브러리 설치를 사용자에게 안내합니다.

CPU

2, 4, 8비트를 지원합니다. 추론에는 AutoRound 커널(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 커널(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]))

추론 백엔드 지정 (Specify Inference Backend)

AutoRound는 호환성에 따라 각 레이어의 백엔드를 자동으로 선택합니다. 일반적으로 우선순위는 Marlin > ExLLaMAV2 > Triton이지만, 최종 선택은 그룹 크기, 비트 폭, 패킹 형식, 하드웨어 기기, 기타 구현 세부 사항 같은 요인에 달려 있어요. 자세한 내용은 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로 변환 (Convert GPTQ/AWQ to 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]))

이슈 (Issues)

transformers 통합에 문제가 있으면 transformers 저장소에 이슈를 열어 주세요. auto-round 자체에 문제가 있으면 AutoRound 저장소에 이슈를 열어 주세요.

감사의 말 (Acknowledgement)

AutoGPTQ, AutoAWQ, GPTQModel, Triton, Marlin, ExLLaMAV2 같은 오픈소스 저정밀 라이브러리가 제공하는 저정밀 CUDA 커널을 AutoRound에서 활용해 주셔서 감사합니다.

기여 (Contribution)

AutoRound에 대한 기여를 환영하며 매우 감사합니다! 버그 수정, 문서 개선, 새 기능 추가, 개선 제안 등 어떤 도움도 항상 가치 있게 여겨요.

더 알아보기 (Learn more)