deep daiv./NLP 스터디

[NLP 학습] 4주차 : PEFT, Quantization

HaeWon_Seo 2024. 8. 26. 14:21

이전 포스트에서 다룬 LLM을 실제 환경에서 더 효율적으로 사용하기 위해서 어떤 연구가 진행되어 왔는지 알아본다.

 

1. LLM의 한계 

2. Parameter Efficient Fine Tuning(PEFT)

3. Quantization 양자화 

 

 


1. LLM의 Scaling law 


- OpenAI에서 2020년 발표한 "Scaling Laws for Language Models"은 LLM의 성능 향상에 대한 근거 제시 

- LM 학습 시 연산량, 데이터셋 규모, 파라미터를 늘리면 test loss가 계속해서 감소함을 실험적으로 보임

  모델 사이즈 증가에 따라 모델의 성능이 선형적으로 향상 

- 모델 사이즈가 커질수록 성능이 좋아진다는 사실로 인해 대규모 파라미터와 훈련 데이터를 사용하는 LLM이 발전해옴 



- 하지만 사이즈가 큰 LLM은 학습에 엄청난 비용 + 시간 + 용량이 소요되는 fine-tuning 과정이 필요 
- 이로 인해 개인이나 작은 규모의 기업에선 LLM을 fine-tuning하는 것이 거의 불가능

 

➡️ 훈련 데이터 수와 학습 비용을 줄이면서 LLM의 성능을 저하시키지 않을 수 있는 fine-tuning 방법에 대한 연구 

 

 



2. Parameter Efficient Fine Tuning(PEFT)


- fine-tuning 과정에서 모델 파라미터 전체를 재학습하는 것이 아닌 task-specific 파라미터만 학습하는 방식
- 이미 수천억 개 이상의 파라미터를 학습한 LLM은 적은 파라미터만 추가학습하여도 전체 파라미터를 학습한 것과 유사한 성능을 낼 수 있다는 선행 연구에서 아이디어 
- 기존의 파라미터 전체를 fine-tuning하는 방식보다 훨씬 적은 훈련 비용과 데이터만 사용하지만, 비슷한 수준의 성능을 보이도록 하는 것이 목표 

  • Adapter Tuning
  • Prompt Tuning 
  • LoRA (Low-Rank Adaptation)

 

 

1)  Adapter Tuning

 

논문 : "Parameter-Efficient Transfer Learning for NLP"
https://arxiv.org/abs/1902.00751

 

Parameter-Efficient Transfer Learning for NLP

Fine-tuning large pre-trained models is an effective transfer mechanism in NLP. However, in the presence of many downstream tasks, fine-tuning is parameter inefficient: an entire new model is required for every task. As an alternative, we propose transfer

arxiv.org

 

- adapter = 학습 가능한 작은 feed-forward networks = 추가되는 task-specific parameter
- 각 task마다 pre-trained 모델의 layer 중간중간에 학습 가능한 작은 feed-forward networks를 삽입 
- pre-trained 모델의 파라미터는 고정해놓고 feed-forward networks의 파라미터만 추가적으로 학습시켜 task-specific하게 fine-tuning 

- Prompt tuning보다 안정적이고 여러 환경에서의 활용 가능성도 높음 

 

 

 

 

2) Prompt Tuning 


논문 : "The Power of Scale for Parameter-Efficient Prompt Tuning"
https://arxiv.org/abs/2104.08691

 

The Power of Scale for Parameter-Efficient Prompt Tuning

In this work, we explore "prompt tuning", a simple yet effective mechanism for learning "soft prompts" to condition frozen language models to perform specific downstream tasks. Unlike the discrete text prompts used by GPT-3, soft prompts are learned throug

arxiv.org

 

- pre-trained 모델의 가중치는 고정하고, 입력값에 task-specific하게 프롬프트를 추가하여 학습하는 방식
- 각 task에 맞게 조정된 입력 텍스트를 사용하여 task마다 pre-trained 모델의 성능 향상
- task(A, B, C)별로 input embedding 앞에 prompt embedding을 추가하여, fine-tuning하는 대신 prompt embedding을 학습 

 

 

 

3) LoRA (Low-Rank Adaptation)

 

2024.08.16 - [deep daiv./NLP 스터디] - [NLP 학습] 3주차 : LoRA / 논문 리뷰 : LoRA: Low-Rank Adaptation of Large Language Models

 

[NLP 학습] 3주차 : LoRA / 논문 리뷰 : LoRA: Low-Rank Adaptation of Large Language Models

이전 포스트에서 다룬 언어모델에 대한 이해를 바탕으로 LoRA에 대해 학습해본다. LoRA와 관련된 논문 "LoRA: Low-Rank Adaptation of Large Language Models"를 리뷰한다.  1. LoRA 2. 논문 리뷰    1. LoRA- Microsoft

working-helen.tistory.com

 

- 전체 파라미터 행렬을 row-rank 행렬로 근사하여 2개의 저랭크 행렬 간 곱으로 표현
- 이 저랭크 행렬만 학습함으로써 추가 학습하는 파라미터 수를 줄임
- 저랭크 행렬은 전체 모델 가중치 행렬과 독립적으로 연산이 수행되기 때문에 기존 모델에 새로운 layer를 추가하는 Adapter Tuning 방식에 비해 inference latency가 적음  

 

 

 

 

 

 

3. Quantization 양자화 

- PEFT의 경우 fine-tuning 과정의 효율은 향상되지만, 여전히 이미 pre-train된 LLM을 사용한다는 한계
- LLM을 불러오는 것 자체만으르도 많은 메모리가 사용되기 때문에 LLM 모델 자체를 경량화하려는 시도 

- pre-trained 모델 파라미터를 low bit로 표현하여 더 적은 메모리와 더 빠른 속도로 학습하는 방식

  pre-trained weight의 데이터 타입을 더 적은 메모리를 사용하는 타입으로 변환 

- 정보 손실은 최소화하며 더 적은 메모리를 사용하는 데이터 타입으로 변환하는 것이 목표 
- bit 수 감소(Bit Reduction)로 모델 사이즈를 줄임 = 모델을 경량화 

- "QLORA: Efficient Finetuning of Quantized LLMs"에서 제안된 QLoRA는 LoRA에 양자화을 접목한 모델 

 

- 주로 32bit float 타입을 8bit int 타입으로 변환하여 사용 (FP32 → INT8)

출처 : https://developer.nvidia.com/blog/achieving-fp32-accuracy-for-int8-inference-using-quantization-aware-training-with-tensorrt/

 

 

 

1) 양자화 시점에 따른 양자화 종류 

  • Post-Training Quantization (PTQ) : 이미 학습이 끝난 모델을 Quantization 통해 경량화, 간단한 방법이나 손실로 인한 모델 성능 저하에 주의해야함 
  • Quantization-Aware Training (QAT) : 모델 훈련 과정에서 Quantization을 고려하여 학습, 추가적인 학습 과정이 필요하지만 PTQ에 비해 성능 하락이 적음 

 

 

 

2) 양자화 식에 따른 양자화 종류 (FP32 → INT8 예시) 

- 양자화 식 = 어떻게 Quantization Bin에 할당할 것인지 정의 

- Quantization Cosntant, Quantization Scale, scale factor = 자화 상수 

 

 

absmax maximum quantization : 최대 절대값을 기준으로 양자화 

 

- FP32를 [-127, 127] 범위의 signed INT8로 변환 

- 양자화 상수 c : 127 / absmax
- Dequantization : INT8 숫자를 c로 나눔 

 

 

zero-point quantization : 기존 데이터의 0값을 기준으로 양자화 

 - FP32에서의 0이 양자화 된 범위에서 특정한 정수 값(zero-point)에 대응되도록

 - 예를 들어 zero-point = 10 이라면, 양자화된 INT8에서 10은 원래 FP32에서 0을 의미하는 것

   또한 양자화된 INT8에서 10보다 큰 수는 FP32에서 양수, 10보다 작은 수 는 FP32에서 음수가 됨 

- 양자화 이후에도 zero-point를 기존의 0과 같은 기능으로 사용하기 위한 목적 

 

- FP32를 [-128, 127] 범위의 signed INT8로 변환

- 양자화 상수 c : scale 값
- Dequantization : INT8 숫자에서 zero-point를 뺀 후 c로 나눔 

 

 

 

③ Block-wise Quantization
- 데이터 분포가 skewed 되어 있거나 특이값이 존재하는 경우 전체 데이터를 한번에 양자화하면

  양자화 성능이 크게 저하, 변환 과정에서 정보 손실 발생 

- 데이터를  블록 단위로 나눈 후 각 블록마다 quantization 진행 

출처 : 8-bit Optimizers via Block-wise Quantization (Dettmers et al., 2022)

 

 

 

④ Double Quantization
- 각 블럭마다 양자화를 진행하는 경우 계산에 많은 메모리가 필요하게 됨
- 메모리 사용량을 더 절약하기 위해 양자화 상수를 다시 양자화하는 과정을 진행 

- FP32를 INT8로 양자화하는 과정에서 구한 FP32크기 타입의 양자화 상수 c2에 대하여
  또 다른 양자화 상수 c1을 사용해 FP32 타입의 c2를 FP8 타입의 FP8로 양자화 

 

 

 

3) quantization error

- 양자화하는 과정에서 round, clipping 등으로 인해 에러 발생 

- Dequantization 과정으로 INT8을 다시 FP32으로 변환해도 원래 FP32 값과는 차이가 발생

- 이러한 Quantization error를 최소화할수록 좋은 양자화 알고리즘 

* round는 반올림, clipping이란 양자화 할 수 있는 실수 범위를 넘어가는 실수 값을 양자화하는 경우 양자화 범위 내 최소나 최대 값으로 변환하는 것 

 

 

 

 

 

 

 

➡️ PEFT vs Quantization

  PEFT Quantization
목표  LLM을 각 task에 더 효과적으로 fine-tuning 할 수 있도록  LLM 자체를 경량화하여 모델이 사용하는 메모리와 계산 비용을 줄일 수 있도록 
기능 pre-trained 모델의 일부 파라미터만 fine-tuning 함으로써 학습 효율성은 높이고 성능은 유지되는 파라미터 조정을 가능하게 함 
= 학습해야할 정보의 범위를 효율적으로 줄임
LLM의 파라미터를 low bit로 표현하여 메모리와 계산 비용에서 효율성을 높임 
 = 이미 학습된 정보를 더 적은 메모리로 표현 
사용 시점 LLM을 특정 태스크나 도메인에 맞게 조정할 때  LLM을 배포하거나 자원이 제한된 환경에서 실행할 때
➡️ PEFT와 Quantization을 통해
     비용과 메모리가 한정적인 일반 사람들도 LLM을 성능 저하 없이 효과적으로 사용 가능 

     LLM 오픈소스가 더 잘 활용되도록, 더 대중화되도록 기여함 

 

 

 

 

 

 

 

 

Reference

https://littlefoxdiary.tistory.com/120
https://devocean.sk.com/blog/techBoardDetail.do?ID=164779&boardType=techBlog
https://blog-ko.superb-ai.com/lightweighting-llm-with-peft/
https://blog.harampark.com/blog/llm-prompt-tuning/
https://heygeronimo.tistory.com/60
https://re-code-cord.tistory.com/entry/Quantization%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
https://scalar.tistory.com/176
https://medium.com/@sachinsoni600517/introduction-to-model-quantization-4effc7a17000
https://medium.com/@luis.vasquez.work.log/zero-point-quantization-how-do-we-get-those-formulas-4155b51a60d6