전체 미세 조정이 메모리를 많이 쓰는 이유
큰 모델의 모든 가중치를 학습하려면 각 가중치의 그래디언트와 옵티마이저 상태까지 보관해야 해. 이 추가 상태가 모델 자체보다 먼저 GPU 메모리를 소진해. LoRA(Low-Rank Adaptation)는 원래 가중치를 모두 고정하고 옆에 더하는 작은 저랭크 행렬 쌍만 학습해 문제를 피하지. 수억 개 대신 수십만 개 매개변수만 갱신하면서 전체를 조정한 것에 가까운 동작을 얻어.
한 줄로 얻는 두 가지 큰 이점
KerasHub에서 backbone.enable_lora(rank=r)를 호출한 뒤 평소처럼 fit()을 실행하면 어댑터만 갱신돼. rank가 높을수록 적응 용량과 학습 매개변수가 함께 늘며 대부분의 경우 4~16이면 충분해. 첫째, 학습 가능 매개변수가 크게 줄어 클러스터가 필요하던 모델도 GPU 한 장에 들어갈 수 있어. 둘째, 전체 모델 복사본이 아니라 작은 어댑터 가중치만 저장하므로 같은 백본을 열 번 미세 조정해도 작은 파일 열 개만 추가돼.
QLoRA는 양자화까지 결합해
QLoRA는 고정된 백본을 먼저 quantize()로 int8이나 int4로 줄인 뒤 LoRA 어댑터를 붙여. 백본은 작고 고정돼 있으며 어댑터만 작고 학습 가능해, 전체 미세 조정에 가까운 품질을 노릴 수 있어. 이 조합 덕분에 7B급 모델의 미세 조정도 소비자용 하드웨어에서 가능해졌어.