[14. sLLM 파인튜닝] sLLM 파인튜닝 개요 (250623 수업)

해피해피슈크림·2025년 6월 24일

1️⃣ sLLM 파인튜닝

sLLM(Small Language Model) 파인튜닝은 소규모 언어 모델에 특정 도메인이나 작업에 특화된 데이터를 추가 학습시켜 성능을 향상시키는 과정이다.

일반적으로 파인튜닝은 전체 모델을 미세 조정하거나 일부 레이어만 학습시키는 방식으로 이뤄지며, 효율성과 과적합 방지를 고려해 설정된다.

LoRA와 같은 파라미터 효율적 튜닝 기법을 활용하면 적은 자원으로도 효과적인 성능 개선이 가능하다.

2️⃣ 양자화

양자화(Quantization)는 딥러닝 모델의 크기를 줄이기 위해 파라미터를 더 작은 데이터 타입(예: float32 → int8)으로 변환하는 기법이다.

대표적인 타입으로 fp16, bf16 등이 있으며, 이들은 저장 공간을 줄이면서도 계산 속도와 효율성을 개선할 수 있다.

bf16은 fp32와 동일한 표현 범위를 갖되 정밀도는 낮아지는 절충안이며, 정수 기반 양자화(int8)는 크기와 속도 면에서 가장 효율적이나 정보 손실 가능성이 크다.

✅ 좀 더 자세히:
float16은 float32보다 크기는 절반으로 줄지만, 표현할 수 있는 숫자의 범위와 정밀도가 떨어져 정보 손실이 클 수 있어. 이를 보완하기 위해 구글 브레인이 제안한 bfloat16(bf16)float32와 동일한 범위(지수부 8bit)를 유지하면서 정밀도(가수부)를 줄인 형식으로, 정밀도는 낮아지지만 범위 손실 없이 더 넓은 값을 표현할 수 있어.

그리고 더 나아가 8비트 정수 기반 양자화(int8)를 사용하면 모델 크기와 연산량을 크게 줄일 수 있지만, 정수는 부동소수점보다 훨씬 표현력이 떨어지기 때문에, 성능 유지와 정보 손실 사이의 균형을 맞추는 것이 핵심이야.

👻 INT 8 양자화, Absmax 양자화

INT8 양자화는 딥러닝 모델의 파라미터와 활성화 값을 32비트 부동소수점(fp32)에서 8비트 정수(int8)로 변환하여, 모델 크기를 약 75% 줄이고 추론 속도를 2~4배 향상시키는 기법이다.

Absmax Quantization은 가장 단순한 양자화 방식으로, 텐서의 절대값 최대값을 기준으로 스케일 팩터를 계산하고 모든 값을 정수로 변환한다. 계산이 간단하고 대칭적인 데이터 분포에 적합하지만, 이상치에 매우 민감하여 전체 정밀도가 낮아질 수 있다.

이를 보완하기 위해, 텐서를 **작은 블록 단위(K개씩)**로 나누고 각 블록에서 개별적으로 최대 절대값을 계산해 양자화를 수행하는 방식이 사용된다. 이렇게 하면 이상치의 영향을 국소적으로 제한하여 더 정밀한 양자화가 가능하다.

👽 PEFT(Parameter-Efficient Fine-Tuning)

**PEFT(Parameter-Efficient Fine-Tuning)**는 대형 모델을 효율적으로 미세조정하기 위해 전체 파라미터가 아닌 일부 구성 요소만 학습하는 방법이다.
대표적으로 LoRA, 어댑터 튜닝, 프롬프트 튜닝, P-튜닝 등이 있으며, 기존 모델은 고정한 채 작은 모듈이나 입력 프롬프트만 학습해 자원 소모를 줄인다.
이러한 방식은 성능은 유지하면서도 메모리, 계산 비용, 학습 시간 측면에서 훨씬 효율적이다.

3️⃣ LoRA

🔍 LoRA란 무엇인가?

LoRA는 "원래 모델은 건드리지 않고, 작고 가벼운 학습 가능한 보조 장치(Adaptor)를 덧붙이는 방식"으로, 저비용 고효율 파인튜닝을 가능하게 해주는 기술이다.

“기존 모델의 모든 파라미터를 바꾸지 않고, 작은 두 개의 행렬만 새로 학습하자!”

학습할 때는 작은 2개 행렬만 학습하고, 추론할 때 고정시켜놓은 큰 행렬 쓰기! why) 도메인 특성만 뽑아내면 되니까


🔧 어떻게 작동하나?

  1. 모델의 원래 weight WRd×dW \in \mathbb{R}^{d \times d}는 학습하지 않고 **고정(freeze)**시켜.
  2. 대신, 작은 차원의 두 행렬 A (d×rd \times r)와 B (r×dr \times d)를 새로 도입해.
  3. 이렇게 해서 weight는 다음처럼 표현돼:
W0x+BAx=Wx+ΔWxW_0x + BAx = Wx + \Delta Wx

즉, 원래 weight로 만든 출력에 BAx를 더해서 보정해주는 방식이야. 여기서 ΔW=BA\Delta W = BA는 학습되는 부분이야.

예를 들어 d=100이고 r=8이라면, 원래 weight는 10,000개 파라미터지만 A와 B는 800 + 800 = 1,600개만 학습하면 되지!


🎯 왜 좋은가?

  • 학습 파라미터 수가 줄어든다 → 연산 속도와 효율성 증가!
  • 원래 모델은 그대로 보존되기 때문에 파인튜닝한 LoRA 모듈만 저장하거나 교체 가능.
  • GPU 메모리 사용량이 크게 감소해 저사양 환경에서도 미세조정이 가능해.

⚙️ 주요 하이퍼파라미터

  • r (rank): A, B 행렬의 중간 차원. 작게 설정할수록 학습 파라미터 수가 줄지만 표현력은 감소.

  • alpha: 학습된 LoRA 결과의 중요도를 얼마나 반영할지 조절.

    • 실제로는 αr\frac{\alpha}{r}를 곱해서 BAx의 스케일을 조절해.
  • 적용 위치: 트랜스포머 구조 안에서 LoRA를 어느 linear layer에 적용할지도 선택해야 해.

    • 보통 self-attention의 query, value 레이어에만 적용해도 충분한 성능 향상이 가능해.

0개의 댓글