반응형

PEFT 간단 정리

생성 이미지

이전에 파라미터 효율적인 파인튜닝(Parameter Efficient Fine-Tuning, PEFT)에 대해 글을 쓴 적이 있습니다.

[Note/Deep Learning] - [NLP] LLM의 효율적인 Fine-Tuning을 진행하는 방법 | Parameter Efficient Fine-Tuning, PEFT



위 글에서는 간단 개념만 설명했어서 이번에는 조금 더 자세한 정리 및 더 심화된 개념을 정리해보려고 합니다.

Adapter

Adpater는 기존 학습 모델 사이에 Adapter 모듈을 삽입하는 것을 제안하였습니다.Adpater는 bottleneck과 skip-connection으로 구성되어 다음과 같은 역할을 수행할 수 있도록 하고 있습니다. (추정하건데 ResNet의 내용들에서 적용을 시도해본 것이 아닐까 생각이 들기도 합니다)

  • Bottleneck : 하나의 행렬(d x d)을 두개의 작은행렬의 곱으로 바꾸는 Reparametrization Trick(d x m, m x d의 행렬 곱으로 바꾸는 것)을 통해 차원의 축소와 복구가 이뤄지는 효과. feed-forward down project에서 차원 축소. 비선형성 적용 후 feedforward up-project에서 다시 차원 확장(복구)
  • Skip-connection : bottleneck 이전 입력값의 차원으로 복구 후 더해주면서 적용

여기서 Adapter 당 추가되는 매개변수의 총 수는 2md + m + d이며, m(랭크)에 대한 조절을 통해 매개변수를 조절할 수 있습니다. 이에 대한 전반적인 개요는 아래와 같이 요약될 수 있습니다.[1]

Adapter 구조 [1]

LoRA

LoRA(Low Rank Adaptation)은 트랜스포머 구조의 Adapater와 유사하게 랭크 분해 행렬을 통해 차원을 나누지만, 이를 병렬적으로 위치시켜서 추론 과정에서 효율을 달성한 방법입니다. Adapter에서 처럼 Reparametrization Trick을 사용하지만, 위의 구조와 아래의 LoRA 구조가 다른 것은 순차적으로 진행되는 것들이 없다는 것입니다. 그리고 그에 따라 비선형 함수나 bias 파라미터도 사용하지 않고 있는데, 이로 인해 속도 측면에서 효율적이죠.

LoRA 구조 [2]

심화 개념 1. AdapterFusion

AdapterFusion은 이름처럼 여러 Adapter들을 결합하여 다양한 task를 해결하는 모델을 구축하는 것입니다. Fine-Tuning의 역할은 일반적으로 학습된 사전학습 모델을 우리가 해결하고 싶은 세부 task에 맞춰서 좀 더 잘 해결할 수 있도록 하는 것이 목적입니다. 그러는 과정에서 좀 더 효율적인 Fine-Tuning의 방법론으로 Adapter로 다양한 문제에 대해 Fine-Tuning을 수행한 Adapter를 만들 수 있게 됐죠. 이렇게 만들어진 Adapter는 특정 작업에는 성능이 좋을지 모르겟지만 범용적으로 사용하기 위해선 제한점이 있는데 이를 해결하기 위해 등장한 것이 AdapterFusion 입니다.



Fusion은 크게 두가지 알고리즘의 조합으로 구축됩니다. 먼저 Knowledge Extraction입니다. 이는 여러 개의 문제를 동일한 개수의 Adapter 파라미터로 학습하는 과정입니다. 이는 앞서 Adapter를 활용하는 것과 동일합니다.



다음으로 Knowledge Composition입니다. 이는 입력에 따라 Adapter를 어떻게 합칠지 결정하는 모듈인데, 이를 위해 이전에 개발된 방법 Attention에서 아이디어를 얻어 제안하고 있습니다. 먼저 병렬적으로 수행한 Adapter 연산들의 출력값을 취합합니다. 그리고 최적의 출력 생성을 위해 Adapter Attention을 수행합니다. Adapter Attention은 아래와 같이 동작합니다.

1) 이미 학습된 Adpater와 모델 파라미터는 고정
2) Self-Attention 수행 : 어떤 Adapter에 해당하는지(Q), Adapter별 출력(V), Adapter별 키(K)로 설정해 QKV의 Attention 메커니즘 동작


전반적인 동작 방식은 아래 그림처럼 표현될 수 있습니다.

AdapterFusion 구조 [3]

심화 개념 2. QLoRA

QLoRA는 이름에서 유추할 수 있듯이 LoRA에 Q(양자화)가 추가된 것입니다. PEFT의 가장 널리 사용되고 효과적인 방법인 LoRA에 경량화를 위한 양자화까지 추가했기 때문에 모델의 경제성을 높이는데 도움이 될만한 방법입니다. 이를 위해 크게 아래 2가지 방법이 사용됩니다.



먼저, 양자화 기법을 사용하는 것입니다. LoRA의 경우 BF16(Brain Floating Point 16)을 사용한다고 합니다. 이는 16비트를 부호(1 bit), 지수(8 bit), 가수(7 bit)에 할당하는 방식입니다. 이런 BF16을 NF4(4-bit Normal Float), 즉 부호(1 bit), 지수(1 bit), 가수(2 bit)에 할당하도록 바꾸는 것입니다.



여기에 더해 Double Quantization이라는 기법도 사용합니다. 양자화에서는 복원을 위해 양자화 상수(s, z)가 필요합니다. 관련 링크 보통은 양자화 상수 값은 복원을 위해 높은 정밀도로 저장을 하는데, Double Quantization은 이러한 상수 저장에도 추한번 더 양자화를 진행하는 것입니다. 다만, 위에서 사용하는 양자화 기법만큼 획기적으로 용량을 감축하는 것은 아닙니다.

참고자료

[1] Parameter-Efficient Transfer Learning for NLP
[2] LoRA: Low-Rank Adaptation of Large Language Models
[3] AdapterFusion: Non-Destructive Task Composition for Transfer Learning
[4] QLoRA: Efficient Finetuning of Quantized LLMs
[5] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.

반응형