Hugging Face Transformers 양자화 개요
Hugging Face는 Transformers 라이브러리에서 bitsandbytes와 auto-gptq라는 두 가지 주요 양자화 방식을 기본적으로 지원합니다. 이러한 통합을 통해 사용자는 더 작은 하드웨어에서 대규모 모델을 실행하고 어댑터를 사용하여 매개변수 효율적 미세 조정(PEFT)을 수행할 수 있습니다.
bitsandbytes와 auto-gptq 비교
bitsandbytes와 auto-gptq 중 무엇을 선택할지는 주요 목표가 설정 및 미세 조정의 용이성인지, 아니면 텍스트 생성을 위한 최대 추론 속도인지에 따라 달라집니다.
bitsandbytes: 사용 편의성 및 미세 조정
Bitsandbytes는 접근성과 유연성을 위해 설계되었으며 다음과 같은 몇 가지 주요 장점을 제공합니다:
- Zero-shot 양자화: 보정(calibration) 데이터셋이 필요하지 않으므로,
torch.nn.Linear모듈을 포함하는 모든 모델은 모델 로드 시 즉시 양자화할 수 있습니다. - 교차 모달리티 상호 운용성: 선형 레이어를 대상으로 하므로 Whisper, ViT, Blip2와 같은 모델을 지원하며 다양한 모달리티에서 작동합니다.
- 어댑터 통합: 양자화된 베이스 모델에서 훈련된 어댑터는 추론 성능 저하 없이 배포를 위해 베이스 모델 또는 역양자화된 모델로 다시 병합될 수 있습니다.
한계: bitsandbytes 4-bit 모델은 텍스트 생성 시 GPTQ보다 느리며, 현재 4-bit 가중치 직렬화를 지원하지 않습니다.
auto-gptq: 최적화된 추론
Auto-gptq는 배포 및 고처리량 텍스트 생성에 최적화되어 있습니다:
- 생성 속도: GPTQ 양자화 모델은 텍스트 생성 시 bitsandbytes 모델보다 훨씬 빠릅니다.
- N-bit 지원: 이 알고리즘은 2비트까지 양자화를 지원하지만, 품질을 위한 권장 트레이드오프는 4비트입니다.
- 직렬화: GPTQ 모델은 모든 비트 수에 대해 직렬화를 지원하여, 사전 양자화된 모델(예: TheBloke의 모델)을 쉽게 로드할 수 있습니다.
- 하드웨어 지원: AMD GPU에서도 즉시 사용 가능합니다.
한계: GPTQ는 양자화를 위해 보정 데이터셋이 필요하며, 이는 몇 시간(예: 175B 파라미터 모델의 경우 4 GPU 시간)이 걸릴 수 있습니다. 또한, 현재 API는 언어 모델을 위해 특별히 설계되었으며 멀티모달 모델을 기본적으로 지원하지 않습니다.
성능 및 속도 벤치마크
Hugging Face는 NVIDIA A100, T4, Titan RTX GPU에서 meta-llama/Llama-2-7b-hf 및 meta-llama/Llama-2-13b-hf를 사용하여 벤치마크를 수행했습니다.
추론 및 생성 속도
- Forward Pass (Prefill): prefill 단계에서 bitsandbytes와 GPTQ는 유사한 성능을 보이지만, 큰 배치 크기에서는 GPTQ가 약간 더 빠릅니다.
- 텍스트 생성: GPTQ는 다양한 하드웨어(A100, T4, Titan RTX) 및 생성 길이에서 bitsandbytes보다 일관되게 빠릅니다. 배치 크기 4에서 어텐션 캐싱(
use_cache=True)을 사용할 경우, GPTQ는 bitsandbytes보다 두 배 더 빠를 수 있습니다.
어댑터 미세 조정 속도
Low Rank Adapters (LoRA)를 사용하여 어댑터를 미세 조정할 때, bitsandbytes가 GPTQ보다 빠릅니다. GPTQ 미세 조정의 경우, 훈련 시 지원되지 않는 exllama 커널을 비활성화해야 함에 유의하십시오.
모델 품질 저하
Open-LLM 리더보드의 벤치마크에 따르면 양자화로 인한 성능 저하는 미미하며, 이러한 저하는 모델의 크기가 클수록 덜 두드러집니다.
Llama-2-7b 성능 (평균 점수):
- FP16: 54.32
- bnb-4bit: 53.4
- GPTQ: 53.23
Llama-2-13b 성능 (평균 점수):
- FP16: 58.66
- GPTQ (actorder_True): 58.03
- GPTQ: 57.56
- bnb-4bit: 56.9
최적화된 모델을 위한 권장 워크플로우
미세 조정의 유연성과 배포 성능 사이의 최적의 균형을 달성하기 위해 Hugging Face는 다음과 같은 파이프라인을 제안합니다:
- bitsandbytes를 사용하여 베이스 모델을 양자화하여 zero-shot 양자화를 수행합니다.
- 양자화된 베이스 모델 위에 어댑터를 미세 조정합니다.
- 훈련된 어댑터를 베이스 모델 또는 역양자화된 모델에 병합합니다.
- 생성 속도를 극대화하기 위해 최종 배포를 위해 GPTQ를 사용하여 결과 병합 모델을 양자화합니다.