Quanto: Optimum용 PyTorch 양자화 백엔드

Hugging Face는 Optimum 라이브러리를 위한 PyTorch 양자화 백엔드인 Quanto를 출시했습니다. Quanto는 양자화에 대한 간소화되고 다재다능한 접근 방식을 제공하여, 개발자가 가중치와 활성화를 32비트 부동소수점(float32) 대신 8비트 정수(int8)와 같은 저정밀 데이터 타입으로 표현함으로써 메모리 저장 및 계산 비용을 줄일 수 있게 합니다.

주요 기능 및 역량

Quanto는 단순함과 다재다능함을 위해 설계되었으며, 많은 최신 양자화 라이브러리의 LLM 전용 초점을 넘어선다. 선형 및 그룹별 양자화를 위한 기본 요소를 제공하여 모든 모델 모달리티에 적용 가능하도록 합니다.

  • Device Agnosticism: 양자화된 모델은 CUDA, CPU, MPS(Apple Silicon)를 포함한 모든 디바이스에 배포할 수 있습니다.
  • Eager Mode Support: 모든 기능이 eager mode에서 제공되어 추적 불가능한 모델과도 호환됩니다.
  • Broad Precision Support: 가중치는 int2, int4, int8, float8을 지원하고, 활성화는 int8 및 float8을 지원합니다.
  • Automated Integration: 백엔드는 양자화/역양자화 스텁, 양자화된 함수 연산 및 양자화된 모듈을 자동으로 삽입합니다.
  • Performance Optimizations: CUDA 디바이스에서 int8-int8, fp16-int4, bf16-int8, bf16-int4 등 여러 조합에 대해 가속화된 행렬 곱셈을 제공합니다.
  • Serialization: 효율적인 모델 저장 및 로드를 위해 PyTorch weight_only 및 Hugging Face Safetensors와 호환됩니다.

양자화 워크플로우

Quanto는 모델을 부동소수점 정밀도에서 고정된 양자화 상태로 전환하기 위한 구조화된 워크플로우를 구현합니다:

  1. Quantize: 표준 float 모델을 동적 양자화 모델로 변환합니다.
  2. Calibrate (Optional): 활성화가 양자화된 경우, 캘리브레이션 모드가 대표 샘플을 사용해 활성화 범위를 기록합니다.
  3. Tune (Optional): 몇 epoch의 학습을 통해 성능 손실을 회복하기 위해 Quantization-Aware-Training (QAT)을 지원합니다.
  4. Freeze: float 가중치를 양자화된 가중치로 교체합니다.
  5. Serialize: 양자화된 가중치를 state_dict에 저장하고 양자화 맵을 JSON 파일에 저장합니다.
  6. Reload: requantize 헬퍼를 사용해 빈 모델을 인스턴스화하고 직렬화된 가중치와 맵을 다시 로드합니다.

Hugging Face Transformers와의 통합

Quanto는 transformers 라이브러리에 직접 통합됩니다. 사용자는 from_pretrained 메서드에 QuantoConfig를 전달하여 모델을 양자화할 수 있습니다.

이 통합에 대한 기술적 제약 및 최적화는 다음과 같습니다:

  • Hardware Requirements: 디바이스에 구애받지 않지만, float8은 호환 가능한 하드웨어가 필요합니다; 그렇지 않으면 Quanto는 행렬 곱셈 중에 조용히 float32 또는 float16으로 업캐스트합니다. 현재 float8은 MPS 디바이스에서 오류를 발생시킵니다.
  • Compilation: Quanto는 torch.compile에 친화적입니다. 그러나 더 빠른 생성을 위해 사용자는 QuantoConfig에서 activations=None을 유지하여 동적 양자화(예: QAT 또는 양자화된 활성화)와 관련된 문제를 피해야 합니다.
  • Cross-Modality Use: 이 통합은 다양한 모달리티를 지원하며, openai/whisper-large-v3와 같은 모델을 int8로 양자화할 수 있음을 보여줍니다.

성능 벤치마크

meta-llama/Meta-Llama-3.1-8B에 대한 평가 결과, Quanto가 지연 시간과 메모리 사용량을 감소시키는 경로를 제공함을 보여줍니다. 토큰당 지연 시간은 NVIDIA A10 GPU에서 측정되었습니다. 제공된 결과는 AWQ 또는 HQQ와 같은 사후 훈련 최적화 알고리즘을 적용하지 않고 얻은 것입니다.

SUMMARY: Hugging Face는 다양한 모달리티에 걸쳐 저정밀 모델 배포를 간소화하도록 설계된, 다재다능하고 디바이스에 구애받지 않는 PyTorch 양자화 백엔드 Quanto를 Optimum용으로 소개합니다.

TITLE: Quanto: Optimum용 PyTorch 양자화 백엔드

Sources