Transformers documentation

개요

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

개요

Quantization은 모델의 가중치, 경우에 따라 활성화 값까지 더 적은 비트로 저장하여 모델이 필요한 메모리 용량을 줄입니다. 모델은 일반적으로 1개 매개변수당 2바이트를 사용하는 bf16으로 로드됩니다. 8B 모델의 가중치는 bf16 기준 약 16GB, 8비트 기준 약 8GB, 4비트 기준 약 4~5GB가 필요합니다. 비트 수가 줄어들면 정확도가 일부 저하되며, 각 양자화 방식은 메모리, 속도, 정확도 사이에서 서로 다른 트레이드오프를 제공합니다.

Transformers는 from_pretrained()를 통해 20개 이상의 양자화 방법을 통합하고 있으므로, 선택한 방법에 관계없이 동일한 로딩 코드를 사용할 수 있습니다.

양자화 모델을 사용하는 두 가지 방법

quantization을 사용하는 방법은 체크포인트가 이미 양자화되어 있는지 여부에 따라 달라집니다.

다음과실시 내용메서드
전체 정밀도 체크포인트from_pretrained에 quantization config를 전달하면, 가중치가 로드되는 동안 양자화됩니다.모델 로드 시 양자화
이미 양자화된 체크포인트from_pretrained를 양자화 설정 없이 호출합니다. Transformers는 체크포인트의 config.json 또는 사용자가 지정한 GGUF 파일에서 메서드를 읽습니다.사전 양자화 체크포인트 로드

AWQ, AutoRound, AQLM, compressed-tensors, GGUF와 같은 일부 메서드는 체크포인트에서만 로드할 수 있습니다. 먼저 해당 메서드 자체의 라이브러리를 사용하여 모델을 양자화한 다음, Transformers에서 결과를 로드합니다.

모델 로드 시 양자화

해당 메서드의 config 클래스를 생성하고 quantization_config에 전달합니다. 아래 예제는 bitsandbytes를 사용하여 8B 모델을 4비트로 로드합니다.

import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B-Instruct",
    quantization_config=quantization_config,
    device_map="auto",
)

이 그룹의 각 메서드는 TorchAoConfig 또는 BitsAndBytesConfig와 같은 자체 설정 클래스를 가집니다. 대부분은 교정 데이터셋이 필요하지 않습니다. GPTQ는 모델 로딩 중에 데이터셋으로 교정을 수행하기 때문에 예외입니다.

pre-quantized 체크포인트 로드

사전 양자화 체크포인트에는 config.json에 quantization_config가 저장되어 있습니다. from_pretrained가 이를 발견하면 해당 양자화기가 자동으로 선택됩니다.

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/zephyr-7B-alpha-AWQ",
    device_map="auto",
)
print(model.config.quantization_config.quant_method)

체크포인트를 로드하기 전에 해당 메서드가 의존하는 라이브러리를 설치하세요. 각 메서드 페이지에는 설치할 항목이 나열되어 있습니다. 어떤 커널 백엔드가 실행되는지와 같은 로드 옵션을 변경하려면, 동일한 유형의 config를 전달하세요. 이 옵션은 체크포인트에 저장된 옵션과 병합됩니다.

GGUF 체크포인트

GGUF 체크포인트는 가중치, 설정, 토크나이저를 하나의 파일에 담고 있으며, from_pretrained가 읽을 config.json이 없습니다. 파일 이름을 gguf_file로 지정하세요.

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "unsloth/Qwen3.5-4B-GGUF",
    gguf_file="Qwen3.5-4B-Q4_K_M.gguf",
)

대부분의 GGUF 모델은 로드 시 풀 정밀도로 디퀀트화되므로, 퀀트화되지 않은 모델과 동일한 양의 메모리를 사용합니다. kernels 패키지가 설치된 MPS 환경에서만 Qwen3.5 및 Qwen3.5 MoE의 가중치가 패킹된 상태로 유지됩니다. 자세한 내용은 GGUF를 참고하세요.

양자화된 모델 저장

quantization_config와 양자화된 가중치를 저장하려면 save_pretrained() 또는 push_to_hub()를 호출하세요. 모든 메서드가 양자화된 가중치를 저장할 수 있는 것은 아닙니다.

방법 선택

방법 선택은 일반적인 목표를 위한 시작점을 제안하고, 하드웨어, 비트 폭, 저장, 파인튜닝, torch.compile 지원 기준으로 모든 방법을 비교합니다. 양자화 선택기를 사용하여 각 정밀도에서 모델이 하드웨어의 메모리에 맞는지 확인하세요.

기타 도구

이 도구들은 Transformers 외부에서 모델을 양자화합니다.

  • Optimum은 Intel CPU, ONNX Runtime과 같은 특정 하드웨어 및 런타임에 맞게 모델을 양자화합니다.
  • Hub Spaces는 모델을 양자화한 후 결과를 사용자의 계정에 업로드합니다: bitsandbytes, GGUF, MLX.

리소스

다음 단계

  • 양자화 스킴, 그라놀라리티, 기법이 어떻게 작동하는지 확인하려면 Quantization concepts를 읽어보세요.
  • quantized cache를 사용하여 KV 캐시를 양자화하면 긴 생성 과정에서 메모리를 절약할 수 있습니다.
  • Quantizing exports를 사용하여 내보내는 동안 모델을 양자화합니다.
  • 양자화 방법 기여하기를 통해 새로운 방법을 기여할 수 있습니다.
Update on GitHub