본문 바로가기

NLP/논문이해

[논문이해] LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING

논문명: LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING

논문 링크: https://arxiv.org/abs/2308.03303

 

LoRA-FA: Memory-efficient Low-rank Adaptation for Large Language Models Fine-tuning

The low-rank adaptation (LoRA) method can largely reduce the amount of trainable parameters for fine-tuning large language models (LLMs), however, it still requires expensive activation memory to update low-rank weights. Reducing the number of LoRA layers

arxiv.org

 

 

핵심만 정리합니다


핵심

 

  • 문제점: LoRA로는 부족해. 더 줄여야 해.
  • 해결책: LoRA의 layer A 도 얼려버리자 (frozen). 오로지 layer B 만 있으면 돼.

 

문제점: LoRA 는 사실 Activation Memory 를 많이 사용해

  • 위 그림에 잘 보면 X가 있다. X는 W와 곱해질 입력을 의미함.
  • 여기서 layer A를 업데이트하려면 X의 activation 정보를 모두 저장해야 했다.
  • 예컨대,  LLaMA-65B (with input sequence length of 2048 and batch size of 4)를 fine-tuning 하는데 50GB 이상의 GPU가 activation memory (in 16-bit format) 를 저장하는데 쓰인다고 한다. (많긴 하네요...?)

 

해결책: Frozen A

  • 기존: X 의 차원은 H이야. 즉 H 만큼 Activation Memory 를 사용해.
  • 개선: A가 얼었으니, 학습에 관여하지 않아. B만 학습할 거니까, X가 아닌 A의 activation memory 를 저장하면 돼. A의 차원은 R이야. LoRA 의 전제 자체가 H >> R 이니까 훨씬 작은 값을 사용하겠지? 그러면 메모리도 확실히 줄어.
  • 예컨대 LLaMA-65B를 full-finetuning  (H = 8192) 하는 것에 비해 LoRA-FA 를 사용하면 (R = 4) 2048배 효율적인 메모리 사용이 가능하다.
  • 방법은 매우 간단하다. 그래서 당황스러울 정도. 이게 논문이 될려나 싶으면서도 저자가 최대한 정당성을 부여하고 방대한 실험을 통해 결과를 제시한다.
  • 실험이 방대하지만 아이디어를 이해한 이상, 그 논문을 술술 읽히기 마련. 결론만 말하자면, Full-Finetuning, LoRA 와 매우 비슷한 성능을 내면서도 메모리 효율적이다는 결론으로 논문을 마친다.

 

 

논문을 구현하면서 알게 된 흥미로운 점들

  • LoRA 를 사용하면, layer A 와 layer B만 학습하는 게 아니라 모델 끝에 붙은 nn.linear 도 함께 학습한다. 예를 들어, LoRA 를 사용했을 때 전체 파라미터의 1%만 사용한다고 치자. 그러면 A = 0.5%, B = 0.5% 가 아니라 nn.linear(classifier) = 0.6%, A = 0.2%, B = 0.2% 이런 식이다.
  • LoRA는 실용성이 떨어진다: LoRA 논문의 실험을 보면, 같은 하이퍼 파라미터가 아니다. lr 도 높고, rank 도 다르고, rank_alpha 도 다르다. 이외에도 여러 변수들을 조정해가며 성능을 측정해야 한다. 효율적인 방법이지만 손이 많이 가는 건 사실이다. 실험을 확인해보면, hyperparameter search 영역이 엄청나다....