Transformers documentation
개요
개요
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를 사용하여 내보내는 동안 모델을 양자화합니다.
- 양자화 방법 기여하기를 통해 새로운 방법을 기여할 수 있습니다.