[project4] 양자화

sujin·2024년 11월 18일
0

nlp_project4

목록 보기
1/3

bitsandbytes
bitsandbytes는 모델을 8비트 및 4비트로 양자화하는 가장 쉬운 방법이다.

1. 8bit 양자화
fp16의 이상치와 int8의 비이상치를 곱한 후, 비이상치 값을 fp16으로 다시 변환하고, 이들을 합산하여 fp16으로 가중치를 반환한다. 이렇게 하면 이상치 값이 모델 성능에 미치는 저하 효과를 줄일 수 있다.

2. 4bit 양자화
모델을 더욱 압축하며, QLoRA와 함께 사용하여 양자화된 대규모 언어 모델을 미세 조정하는데 흔히 사용되며, 모델 파라미터와 메모리 사용량을 크게 줄인다.

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",  
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.float16,
)

양자화 타입(bnb_4bit_quant_type)의 예로는 fp4, nf4가 있다.

  • fp4(floating-point 4 bit)
    4bit 부동소수점 형식. 4bit를 사용하여 값을 표현하므로, 메모리 효율성을 크게 높일 수 있다. 일부 모델에서 nf4보다 성능이 떨어질 수 있다.
  • nf4(normalized float 4 bit)
    데이터 분포를 고려한 양자화 방식으로, 특히 신경망의 활성화 값 분포에 맞춰 설계되었다. 일반적인 신경망의 활성화 값은 정규분포를 따르는 경우가 많은데, nf4는 이러한 분포를 반영하여 양자화된 값이 더 균일하게 분포되도록한다. fp4보다 정밀한 표현이 가능할 수 있다.
  • QLoRA에서는 기본적으로 nf4가 권장된다.

bnb_4bit_use_double_quant
양자화된 데이터의 양자화 상수를 추가로 양자화하여 메모리 사용량을 줄인다. 이를 통해 파라미터당 평균 0.4비트를 추가로 절약할 수 있다.

profile
감자 그리고 NLP

0개의 댓글