LoRA는 GPT와 같은 Large Language Models(LLM)을 특정 task에 fine-tuning(미세조정)하는 데 있어서 time, resource cost가 너무 크다는 단점을 해결하기 위해 제안된 방법으로 기존 모델의 Pre-trained weights는 그대로 두고 Dense layer의 Weight을 Low rank로 Decomposition한 Matrices만을 Optimization하는 것이라고 할 수 있다.
이를 통해 학습 시간과 하드웨어의 비용을 크게 절약할 수 있다.
성능을 유지하면서 최소한의 인프라로 모델을 미세 조정할 수 있는 PEFT(Parameter Efficient Fine-Tuning)라는 효율적인 기술에 최근 관심이 깊어지고 있다. 특히 기존에는 기업에서만 LLM을 사용할 수 있었지만, PEFT 를 사용한다면, 일반 사용자들 역시 보다 쉽게 대형 모델을 연구가 용이해지기 때문에 보다 많은 연구자들이 LLM 분야에 참여할 수 있기 때문이다.
사전 학습된 모델에서 귀중한 지식을 유지하는 것과 더 적은 매개 변수로 대상 작업에 효과적으로 적용하는 것 사이에서 균형을 맞출 수 있는 Parameter-Efficient Fine-Tuning (PEFT) 의 중요한 축을 이루고 있는 LoRA, 그리고 최근 이를 더욱 개선한 QLoRA에 대해서 알아보도록 하자.
LoRA의 등장
LLM은 기본적으로 pre-trained model로부터 특정 task(e.g. summarization, question and answering, ...)에 adaptation하기 위해 fine-tuning을 해야 하는데, Fine-tuning을 하면서 LLM모델의 weight parameters를 모두 다시 학습하게 되는데 이게 엄청난 cost!! 비용이 들어가게 된다.
예를 들어 GPT-2(or 3), RoBERTa large모델의 경우 데이터에 따라서 fine-tuning만 몇 달이 걸릴 지 모르지만, 실제 이를 학습하기 위한 하드웨어 역시 큰 비용이라고 할 수 있다.
그래서 이를 해결하기 위해 Micorosoft에서는 Low-Rank Adaptation(LoRA)를 공개 발표하였다.
Low-Rank 방법을 고려하게 된 계기는 "Measuring the Intrinsic Dimension of Objective Landscapes" 논문과 "Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning." 논문에서 "Over-parameterized model은 low intrinsic dimension으로 존재하고 있다"라는 사실에서 기반으로, Model adaptation동안의 Weight change에도 Low intrinsic rank를 가질 거라고 가정하여 가중치에 중요한 영향을 미치는 Low-Rank를 이용하는 방식을 적용한 것이다.
LoRA 논문에서 일반적인 Full Fine-tuning에 대한 수식은 아래로 표현하였다. 아래는 LLM 관련 미세조정 방법에 대한 내용으로, LoRA는 기존 가중치는 건드리지 않고 별도의 Low Rank를 위한 d(차원)에 파라메터(P의 0) + 학습한 가중치를 더하는 방식(아답터)으로 문제를 하결하였다.
이를 조금 더 쉽게 그림으로 표현해 보면 다음과 같다. LoRA는 Multi-Head Atten FFNN(Feed Forward Neural Network)
LoRA는 학습 가능한 매개 변수(가중치)의 추가 계층을 도입하고, 기존 모델은 매개 변수를 수정하지 않고 고정한 상태로 유지 한다. 이를 논문에서는 Frozon이라고 하였으며, 이러한 훈련 가능한 파라미터는 원래 네트워크의 차원에 비해 상당히 감소된 순위(차원)를 갖게 되는데, 보통 512의 매개 변수(가중치)라면 512 매개 변수 x 512 벡터의 차원 = 262,144 만큼의 크기의 파라메터를 가지지만, LoRA의 Low Rank인 r로 선택된 하위 차원에 백터만 사용하게 가져가게 되어, 512 매개 변수 x 1 벡터 차원 = 512 크기의 파라메터만 가지기 때문에 적은 메모리로 더 빠르고 비용 효율적인 모델 학습이 가능하게 된다.
LoRA에서 WA와 WB는 dxr, rxd로 표현되는데, 쉽게 얘기하자면, WA는 파라메터에서 Low Rank를, WB는 차원에서 Low Rank를 구한 것이라고 이해할 수 있다. 이유는 앞서 설명 했듯이 기존 모델의 벡터의 차원을 줄이이는 것이 LoRA의 핵심이기 때문에 벡터 차원에서, 그리고 파라메터에서 Low Rank를 뽑아낸다고 이해하기 바란다.
QLoRA는 +양자화
BitAndBytes에서 LLM.Int8() 논문을 통해 기존 Flat32를 기본적으로 사용하는 가중치 공간을 8비트에서 최근에 4비트 양자화로 데이터 유형을 변경하여 메모리 공간을 상당히 최적화 하는 것에 성공하였는데, 이를 LoRA에도 적용한 것이라고 이해하면 된다.
보통 양자화하여 값을 축소한 이후 다시 역양자화를 하여 값을 복원하는 기술을 사용하기 때문에, 성능적인 부분에 약간의 손해가 있기는 하지만, 기존에 큰 GPU 메모리에서만 동작이 가능했던 모델들이 Colab T4에서도 실행이 가능하다는 부분은 놀랍지 않을 수 없다.
이외에도 QLoRA는 GPU 메모리가 부족한 경우 CPU를 이용해 CPU의 원활한 페이지 전송을 허용하는 nVidia 통합 메모리 기능을 활용하여 GPU의 갑작스러운 메모리 스파이크를 관리하고 메모리 오버플로/오버런 문제를 해결하고 있어, 보다 메모리 관리가 용이하고 최적하였다고 할 수 있다.
[2106.09685] LoRA: Low-Rank Adaptation of Large Language Models (arxiv.org)
'Bigdata' 카테고리의 다른 글
Python - Gaussian Error Linear Unit (GELU) 수식 - 코드 (0) | 2024.08.11 |
---|---|
LLM - fine-tuning GPT 계열 공식 이해 (0) | 2024.08.11 |
딥러닝 - 텐서(Tensor)란? (0) | 2024.08.11 |
RNN 단점 - 기울기 소실(vanishing gradient)과 장기 의존성 문제(long-term dependency problem) (0) | 2024.08.11 |
머신러닝 - 결정계수와 과대/과소적합 (0) | 2024.08.11 |