[vLLM] 기타 양자화: FP8, ModelOpt, INC, TorchAO, Quark
들어가며
vLLM은 GPTQ-Marlin, BitsAndBytes, GGUF, Compressed Tensors 외에도 수많은 양자화 방식을 지원한다. 이번 글에서는 FP8(온라인/오프라인), NVIDIA ModelOpt, Intel Neural Compressor(INC), TorchAO, AMD Quark 등의 구현을 간략히 정리한다.
공식 문서
vLLM 공식 문서: INC Quantization vLLM 공식 문서: ModelOpt Quantization vLLM 공식 문서: TorchAO Quantization vLLM 공식 문서: Quark Quantization
핵심 구조/코드 분석
FP8: vLLM의 핵심 양자화
Fp8Config는 vLLM에서 가장 폭넓게 사용되는 양자화 설정이다. 텐서 단위, 토큰 단위, 블록 단위(128x128) 스케일링을 모두 지원한다:
from vllm.model_executor.layers.quantization.utils.quant_utils import (
kFp8Dynamic128Sym, # 블록 128 동적 대칭
kFp8DynamicTensorSym, # 텐서 단위 동적 대칭
kFp8DynamicTokenSym, # 토큰 단위 동적 대칭
kFp8Static128BlockSym, # 블록 128 정적 대칭
kFp8StaticTensorSym, # 텐서 단위 정적 대칭
)
오프라인 FP8은 사전 양자화된 체크포인트를 로딩하고, 온라인 FP8은 bf16 체크포인트를 런타임에 변환한다. CUTLASS와 Marlin FP8 커널을 백엔드로 사용하며, ROCm에서는 e4m3fnuz 포맷을 지원한다.
NVIDIA ModelOpt
ModelOpt는 NVIDIA의 TensorRT 최적화 도구에서 생성한 양자화 모델을 지원한다:
class ModelOptConfig(QuantizationConfig):
# FP8, NVFP4, MXFP8 등 다양한 양자화를 ModelOpt 체크포인트에서 로딩
내부적으로는 FP8, NVFP4, MXFP8 등 기존 양자화 메서드를 재활용하되, ModelOpt 특유의 체크포인트 포맷(스케일 이름, 레이아웃 등)을 처리한다. KV 캐시 양자화와 MLA(Multi-head Latent Attention) 지원도 포함된다.
Intel Neural Compressor (INC)
INC는 Intel의 양자화 도구로, AutoRound 기반의 GPTQ/AWQ 포맷을 지원한다:
class INCConfig(QuantizationConfig):
SUPPORTED_BITS = {2, 3, 4, 8}
SUPPORTED_DTYPES = {"int"}
SUPPORTED_FORMATS = {"auto_round:auto_gptq", "auto_round:auto_awq"}
SUPPORTED_BACKENDS = {
"auto", "gptq", "gptq:marlin", "awq", "awq:marlin", "marlin",
}
2비트부터 8비트까지 지원하며, 내부적으로 GPTQ-Marlin이나 AWQ-Marlin 커널을 백엔드로 사용한다. Intel CPU에서도 동작하도록 설계되어 있다.
TorchAO
TorchAO는 PyTorch 네이티브 양자화 라이브러리로, vLLM에서는 동적으로 양자화 메서드를 바인딩한다:
def _bond_method_to_cls(func, obj):
if hasattr(func, "__self__") or not callable(func):
return func
else:
return types.MethodType(func, obj)
TorchAO의 독특한 점은 가중치에 커스텀 __torch_dispatch__를 사용하여 양자화된 연산을 투명하게 처리하는 것이다. vLLM은 이 패턴을 존중하면서 텐서 병렬 처리와 CUDA Graph를 지원하도록 래핑한다.
AMD Quark
Quark는 AMD에서 개발한 양자화 프레임워크로, DeepSeek-V3 패밀리 모델의 MXFP4 양자화를 특별히 지원한다:
class QuarkConfig(QuantizationConfig):
def maybe_update_config(self, model_name, hf_config, revision):
"""Enable dynamic MXFP4 only for DeepSeek-V3-family + fp4 checkpoints."""
if (getattr(hf_config, "model_type", None)
not in _DEEPSEEK_V3_FAMILY_MODEL_TYPES):
return
W8A8 FP8, W8A8 INT8, W4A8 MXFP4+FP8, OCP MX 등 다양한 스킴을 지원하며, MoE 전용 양자화 메서드도 제공한다.
왜 이 설계인가
-
생태계 포용: 각 하드웨어 벤더(NVIDIA, Intel, AMD)의 양자화 도구를 모두 지원하여, 사용자가 선호하는 도구로 양자화한 모델을 그대로 사용할 수 있다.
-
공통 추상화:
QuantizationConfig->QuantizeMethodBase->LinearMethodBase계층 구조를 통해, 모든 양자화 방식이 동일한 인터페이스를 따른다. 이 덕분에 모델 코드는 양자화 방식에 무관하게 작성할 수 있다. -
FP8 우선: FP8은 Hopper(H100) 이상에서 하드웨어 가속을 받으므로, vLLM에서 가장 적극적으로 최적화된 양자화 방식이다. 텐서/블록/토큰 단위 스케일링, 정적/동적 양자화 등 모든 조합을 지원하는 이유이기도 하다.
참고 자료
- vLLM 공식 문서 - Quantization
- 소스 코드:
vllm/model_executor/layers/quantization/fp8.py,modelopt.py,inc.py,torchao.py,quark/
관련 포스트
vLLM 의 다른글
- 이전글 [vLLM] Compressed Tensors: 양자화+희소성 통합 프레임워크
- 현재글 : [vLLM] 기타 양자화: FP8, ModelOpt, INC, TorchAO, Quark
- 다음글 [vLLM] MoE 라우팅 전략: 7종 라우팅 알고리즘 분석
댓글