Paper Review

[Paper Review] QLoRA: Efficient Finetuning of Quantized LLMs

무명-hj 2025. 1. 22. 22:50

QLoRA : Efficient Finetuning of Quantize LLMs

🔗 https://arxiv.org/abs/2305.14314

기업 해커톤에 필요한 내용을 도출하기 위해 논문의 전문을 꼼꼼하게 보지는 못하고, 핵심 부분만 빠르게 정리하였다. 생략된 내용이 있을 수 있으니 참고 바람

 

QLoRA : LoRA 와 nf4로 양자화 한 pretrained language model 을 사용하는 방식

QLoRA 의 방법론 :

  1. NF4
  2. Double quantization
  3. Paged Optimization

아래부터 QLoRA 를 위한 기본 지식부터 방법론에 대해서 설명하려 한다.

 


Quantization :

연산과 저장에 필요한 정밀도를 낮추어 모델의 메모리 사용량과 계산 효율을 높이는 기술

Quantization 종류 :

  1. Post-training Quantization (PTQ)
    • 모델 학습 후 양자화 수행
    • 비교적 구현이 쉽다는 장점이 존재한다.
    • 정확도 손실 가능성 존재
  2. Quantization-Aware training (QAT)
    • 학습 중 양자화를 고려
    • 정확도 손실이 적지만 구현 복잡도가 높음
  3. Dynamic Quantization / Static Quantization
    • Dynamic : 추론 중에 양자화
    • Static : 사전에 양자화 된 값 사용


PTQ 정수 양자화 방식 예시 :

 

  1. absmax(X[fp32])   : fp32의 X에서 절댓값이 가장 큰 친구를 뽑는다
  2. 127/ [1번결과] : 8 bit tensor의 max abs 값인 127에 나눈다 → quantization constant (양자화 상수)  $ 
  3. 나온 값을 x 에 다 곱해줌, 그리고 반올림

  • quantile quantization : 각 양자화 구간에 할당되는 데이터 수가 균등한 양자화
  • 정규분포 전제 하에 양자화 구간을 만들고, 이를 [-1,1] 사이로 스케일링 된 가중치 텐서를 양자화 구간에 맵핑한다. 16개로 양자화 구간도 나눠주는데 이는 4bit 양자화여서 16개 (nf4)

NF4 (NormalFloat 4-bit)

1. 문제

 “분포” 를 고려한 양자화의 필요성

일반적으로, 양자화(Quantization) 은 다음 두 가지를 모두 고려해야 한다.

  1. 정밀도 손실 최소화
  2. 연산 및 메모리 효율

이 때, Quantile Quantization 은 정보 이론적으로 “각 양자화 구간 (bin)” 에 할당되는 데이터 수가 균등” 하도록 설정한다. 즉, 데이터가 어떤 분포를 가지고 있더라도, 모든 bin 에 같은 갯수의 값이 있도록 경계를 설정하는 방식이다.

ex : 데이터가 0 근처에 몰려 있으면, 구간을 더 촘촘하게 쪼개서 0 부근의 정밀도를 높이고, 데이터가 거의 없는 극단 영역(아웃라이어)에는 구간을 넓게 할당함.

문제는 이 ‘분포를 직접 추정하는 과정(quantile estimation)’이 비싸고(계산량 많고), 아웃라이어가 있으면 오차가 커진다는 것.

2. 딥러닝 모델 가중치 (weights) 는 “정규분포” 에 가깝다.

key idea : 이미 학습된 신경망의 가중치는 대체로 0을 중심으로 하는 정규분포에 가깝다.

즉 “학습된 가중치가 보통 ± 몇 표준편차(σ) 안에 몰려있다” 는 통계적 성질을 이용하자는 것.

→ “아예 표준 정규분포에 대해서 이론적으로 최적인 양자화 구간을 미리 고정해버리자” 라는 전략이다.
→ 한마디로, 매번 가중치의 분위수를 새로 추정할 필요 없이, “표준 정규분포용으로 미리 계산해둔 구간 경계”를 활용하면 된다는 것.

( 여기서 NFk 양자화 아이디어를 얻을 수 있다. )

3. NormalFloat(NFk) 아이디어 :

0 평균, σ(표준편차) 가 일정한 정규분포에 맞춰서 미리 양자화 구간을 만든 뒤, 가중치 텐서가 실제로는 다른 표준 편차를 가질 수 있으니, 이를 [-1, 1] 범위로 정규화 (스케일링) 해 매핑한다.

→ 정규분포 전제 하에 양자화 구간을 만들고, 이를 [-1,1] 사이로 스케일링 된 가중치 텐서를 양자화 구간에 맵핑한다. 16개로 양자화 구간도 나눠주는데 이는 4bit 양자화여서 16개

간단히 설명 :

[-1,1] 사이에 4bit 의 16간격으로 쪼개서 그 안에 있는 값을 가까운 거로 바꾸기

(단순 균등까지는 아니고 ”정규분포의 분위수” 를 고려해 최적화된 지점을 찾기)

  • [-1, 1] 구간을 16개로 나눈다 (k=4비트 → 16개 bin)
    • 정확히는 단순 균등 간격이 아니라, “정규분포의 분위수”를 고려해 최적화된 지점을 찾음 (논문에서는 이론적 최적이라 함).
  • FP32 값(실제 가중치)을 해당 구간에서 가장 가까운 대표값(구간의 중앙값 등)으로 매핑
    • 예: 0.71 → 0.7333 구간에 해당하면, “0.7333”으로
  • 이때 그 대표값(혹은 구간)에 해당하는 인덱스(예: 14번 bin)를 저장
    • 메모리에 14라는 “4비트” 숫자만 저장하면, 역으로 복원할 때 14→0.7333 정도로 다시 확장 가능.

NF4 정리

  • “딥러닝 가중치는 (거의) $ N(0,σ^2) $ 분포를 따른다”는 점을 적극 활용!!
  • “정규분포에 최적인 양자화 구간” 고정(precomputed)해두고,
    • 정규분포를 기반으로 양자화 된 구간을 고정해두기 때문에 추가 계산이 불필요
    • quantile quantization 으로 하면 매번 계산을 해줘야 돼서 계산 cost 가 상당함
  • “가중치를 [-1,1]로 매핑” 만 해주면 손쉽게 4비트 양자화를 적용할 수 있게 해주는 방법입니다.
    • [-1,1] 사이로 스케일링 된 가중치를 정규분포에 최적인 양자화 구간에 맵핑 해주기
    • 학습된 가중치 텐서를 [-1,1] 범위로 스케일링하면, 미리 정의된 정규분포 기반 양자화 구간 (16 bin) 에 바로 맵핑 가능
  • 성능을 유지할 수 있는 이유는 양자화 구간이 사전학습된 가중치의 정규분포의 특성에 맞게 설계되었으므로, 가중치의 중심부에 더 촘촘한 구간이 배치되어 정밀도를 유지할 수 있다.

QLoRA 에서는 nf4 양자화를 통해서 PLM을 quantization 시킨다.


Double Quantization

Quantization Constant : 양자화 상수

양자화는 데이터를 압축하지만, 데이터 범위 (ex : min, max) 를 기록해야 원본 데이터를 복원할 수 있다. 이 때, 각 블록의 absmax 등을 저장한 것이 바로 양자화 상수이다.

4비트 양자화는 메모리를 크게 줄여주지만, 양자화 상수 자체는 여전히 fp32로 저장된다.

  • 각 블록의 크기를 64로 설정하면, 양자화 상수는 64개의 파라미터 당 32비트를 차지한다.

 

이는 4bit 효율성을 저하 시킴. 이를 해결하기 위해서 , QLoRA 는 double quantization을 도입하여 양자화 상수를 8bit 로 추가 양자화하여 메모리 사용량을 더 줄인다.

Double Quantization 의 동작 원리

1. 1차 양자화

  • 모델 가중치를 4비트로 양자화하며, 각 블록에 대해 양자화 상수 $ c_{FP32}^{(2)} 를 생성한다.

2. 2차 양자화

  • 1차 양자화 상수 $ c_{FP32}^{(2)}  를 추가로 양자화 하여 fp8로 변환한다.$ c_{FP8}^{(2)}​=Quantize(c_{FP32}^{(2)}​) $ 
  • 이 과정에서, FP32 양자화 상수의 평균값을 빼서 대칭적 양자화를 수행한다. (양자화 범위를 더 효율적으로 활용하기 위해 평균값을 뺀다고 한다. 

3. 양자화 상수의 양자화 상수 

  • 2차 양자화의 결과인  를 복원하기 위해 또 다른 양자화 상수  가 필요하다.

Page Optimization

Paged Optimization은 GPU VRAM의 용량을 초과하는 대규모 모델을 실행할 때, VRAM과 CPU RAM을 동적으로 활용하여 OOM(Out-of-Memory) 에러를 방지하는 기술이다. 모델의 일부 파라미터나 중간 연산 결과를 VRAM에서 RAM으로 옮겨 저장하고, 필요할 때 다시 VRAM으로 가져오는 방식으로 작동한다. 이를 통해 VRAM 사용량을 최적화하고, 제한된 하드웨어 환경에서도 대규모 모델을 효율적으로 실행할 수 있다.


즉, QLoRA 의 핵심은 PLM Optimization 으로 인해 발생하는 오차를 LoRA 가 학습하여 보정하는 것이다.

QLoRA의 핵심 원리:

  1. 양자화된 모델 동결:
    • QLoRA는 4비트로 양자화된 베이스 모델의 가중치를 frozen 한다.
    • 즉, 베이스 모델의 가중치는 학습되지 않으며, optimization 상태 그대로 유지
  2. LoRA 어댑터를 통해 보정:
    • optimization 된 PLM이 표현하지 못하는 정보(=양자화 오차)를 LoRA 어댑터가 학습한다. ( LoRA 어댑터는 low-rank matrix로 구성되어 있으며, 모델의 특정 선형 계층(Linear Layer)에 추가된다. )
  3. LoRA 학습 과정:
    • 학습 중, 모델 출력과 실제 정답 사이의 오차를 기반으로 LoRA 어댑터의 파라미터만 업데이트 된다.
    • LoRA 어댑터는 양자화된 모델의 출력을 보정하여, 양자화로 인한 성능 손실을 최소화한다.