1.Fully Fine-Tuning 이 힘든 이유?
LLM의 weight는 최소 1.5~3B 이다.
Model을 GPU에 load 하는 것만 해도 웬만한 GPU가 아닌 이상 불가능 하다.
모델을 Fine-Tuning 학습하는것도 힘듦
forward & Backward, 이를 통한 Model weight update는 gradient 를 전부 GPU에 저장해야 된다.
gradient 뿐만 아니라 Optimizer를 위한 이전 기록(=tensor)들도 GPU에 저장해야 한다.
결국 Fully Fine-Tuning을 위해서는 모델의 weight수 *2~3배의 GPU vram이 필요하다.
weight의 수가 많은 LLM을 Fully Fine-tuning하지 않는 이유가 이것이다.
이를 개선 하고자 나온 것이 LoRA d이다.
2. LoRA 학습 방법
LoRA의 방법론
- Fully Fine-Tuning하지 않음
- Model weight를 Freeze함
- 학습하는 Layer는 LoRA_A & LoRA_B 이다. (둘 다 nn.linear 형태)
- Transformer Layer에 있는 Query, key, Value, Ouput(=self attenction)중 선택하여 (LoRA_B * LoRA_A)를 더해줬기 때문
즉, Model Weight를 freeze하지만 inference 시 사용되는 weight값은 update가 됨.
model weight에 (LoRA_B * LoRA_A)를 더해줬기 때문
- 왼쪽에 있는 파란색 box는 pretrained Model의 Weight이다.
- Transformer Layer의 Query, key, Value, Output(=Self attention)의 차원은 (d*k)dlek.
- d는 hidden_size, k는 d와 거의 같다.
- Fully Freeze 되어 학습시 weight update가 되지 않는다.
- gradient, optimize 관련된 tensor값이 gpu에 load되지 않는다.
- 즉, vram을 save할 수 있다.
- 오른쪽에 있는 주황색 A가 LoRA_A layer 이다.
- LoRA_A는 nn.linear이다.
- {d * r}의 차원을 가지고 있다.
- d는 hidden_size, r은 사용자가 설정한 낮은 차원 (r << d)이다.
- 오른쪽에 있는 주황색 B가 LoRA_B layer이다.
- LoRA_B는 nn.linear 이다.
- {r*k}의 차원을 가지고 있다. (k는 d와 거의 유사)
- k는d와 거의 유사하며, r은 사용자가 설정한 낮은 차원 (r<<d)이다.
3. LoRA_B, * LoRA_A 는 어디 Pretrain layer weight에 더해지는가?
해당 표는 모델을 학습 하기 위해 18M의 weight만을 가지고 2개의 Downstream task에 대한 loRA학습 결과를 보여준다.
18M의 weight는 LoRA_A, LoRA_B에 의한 weight수이다.
- Weight Type?
- (LoRA_A * LoRA_B)가 더해지는 transformer layer이다.
참고:
반응형
'Paper Review' 카테고리의 다른 글
[PaperReview]FinGPT: Open-Source Financial Large Languge Models(2023) (8) | 2024.11.13 |
---|---|
what is Review paper? (3) | 2024.11.06 |
Surrvey paper (0) | 2024.11.05 |