GPTQModel
GPTQModel (GPTQModel)
GPTQ는 언어 모델을 4비트·8비트로 압축해 메모리와 연산을 크게 줄이는 대표적인 양자화 기법이에요. vLLM에서 GPTQ 양자화 모델을 만들거나 실행할 때 쓰는 도구로 GPTQModel(ModelCloud.AI 제공)을 소개해요. 이 페이지에서는 그 설치·양자화·실행 과정을 차근차근 따라가 볼게요.
양자화가 주는 이점 (What quantization buys you)
GPTQ 양자화는 모델 정밀도를 BF16/FP16(16비트)에서 INT4(4비트)나 INT8(8비트)로 낮춰요. 그 결과 전체 모델 메모리 사용량이 크게 줄고, 동시에 추론 성능도 올라가죠. 특히 GPTQModel 호환 양자화 모델은 Nvidia Ampere(A100+)와 Hopper(H100+) GPU에서 Marlin과 Machete라는 vLLM 커스텀 커널을 활용해 배칭 처리량(tps)과 토큰 지연 시간을 극대화할 수 있어요. 이 커널들은 vLLM과 NeuralMagic(현재 Red Hat 소속)이 고도로 최적화한 것들입니다.
GPTQModel의 또 한 가지 눈에 띄는 점은 동적(per-module) 양자화를 지원한다는 거예요. 모델 안의 서로 다른 레이어나 모듈에 서로 다른 양자화 파라미터를 적용해서 더 세밀하게 최적화할 수 있죠. 이 동적 양자화는 vLLM에 완전히 통합되어 있고, ModelCloud.AI 팀의 지원을 받고 있어요. 자세한 내용은 GPTQModel readme를 참고하세요.
설치 (Installation)
자신의 모델을 양자화하려면 GPTQModel을 설치하거나, HuggingFace에 이미 올라와 있는 5000여 개의 GPTQ 모델 중 하나를 골라 쓰면 돼요.
pip install -U gptqmodel --no-build-isolation -v
모델 양자화 (Quantizing a model)
GPTQModel을 설치했다면 이제 모델을 양자화할 준비가 된 거예요. 아래는 meta-llama/Llama-3.2-1B-Instruct를 양자화하는 예시예요.
from datasets import load_dataset
from gptqmodel import GPTQModel, QuantizeConfig
model_id = "meta-llama/Llama-3.2-1B-Instruct"
quant_path = "Llama-3.2-1B-Instruct-gptqmodel-4bit"
calibration_dataset = load_dataset(
"allenai/c4",
data_files="en/c4-train.00001-of-01024.json.gz",
split="train",
).select(range(1024))["text"]
quant_config = QuantizeConfig(bits=4, group_size=128)
model = GPTQModel.load(model_id, quant_config)
# batch_size를 GPU/VRAM 사양에 맞게 키우면 양자화가 빨라져요
model.quantize(calibration_dataset, batch_size=2)
model.save(quant_path)
vLLM으로 양자화 모델 실행하기 (Running a quantized model)
ModelCloud/DeepSeek-R1-Distill-Qwen-7B-gptqmodel-4bit-vortex-v2를 예로 들면, 다음 명령으로 실행할 수 있어요.
python examples/deployment/llm_engine_example.py \
--model ModelCloud/DeepSeek-R1-Distill-Qwen-7B-gptqmodel-4bit-vortex-v2
Python API로 쓰기 (vLLM Python API)
GPTQModel 양자화 모델은 LLM 진입점으로도 바로 지원돼요.
from vllm import LLM, SamplingParams
# 샘플 프롬프트
prompts = [
"Hello, my name is",
"The president of the United States is",
"The capital of France is",
"The future of AI is",
]
# sampling params 객체 생성
sampling_params = SamplingParams(temperature=0.6, top_p=0.9)
# LLM 생성
llm = LLM(model="ModelCloud/DeepSeek-R1-Distill-Qwen-7B-gptqmodel-4bit-vortex-v2")
# 프롬프트에서 텍스트 생성. RequestOutput 객체 리스트 반환
outputs = llm.generate(prompts, sampling_params)
print("-" * 50)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}\nGenerated text: {generated_text!r}")
print("-" * 50)