원본 모델은 그대로 두고 옆에 붙인 작은 행렬 두 개만 학습하는 파인튜닝 기법으로, GPU 한 장으로도 대형 모델에 말투·출력 형식·화풍 같은 것을 가르칠 때 쓴다. 학습하는 양은 전체의 1% 안팎이지만 성능은 전체 파인튜닝과 거의 비슷하다.
| 항목 | 전체 파인튜닝 | LoRA |
|---|---|---|
| 학습하는 파라미터 | 전부 | 0.1~1% |
| 결과물 | 모델 전체 사본 | 수십 MB 어댑터 파일 |
| 원래 능력 잊어버림 | 상대적으로 많음 | 적음 |
파인튜닝할 때 가중치가 바뀌는 패턴은 생각보다 단순하다. 그래서 큰 가중치 행렬은 그대로 두고, 바뀌는 부분만 작은 행렬 두 개(A, B)로 따로 배운다.
4096×4096 행렬 하나 기준, 학습할 숫자 개수.
학습이 끝나면 어댑터를 원본에 병합해서 추론 속도 손해 없이 쓸 수 있다. 병합하지 않고 파일로 따로 두면 화풍이나 말투가 다른 어댑터 여러 개를 갈아 끼우면서 쓸 수 있다.
Hugging Face의 peft 라이브러리를 쓰면 LoraConfig에 몇 가지 값만 정해서 바로 붙일 수 있다. 원본 모델을 4비트로 줄여 올리는 QLoRA를 함께 쓰면 메모리가 다시 4분의 1로 준다. Unsloth 같은 라이브러리를 쓰면 학습 속도도 더 빨라진다.
| GPU | QLoRA로 학습 가능한 모델 |
|---|---|
| RTX 4090 (24GB) | 7~8B급 |
| A100 한 장 | 70B급 |
처음에는 아래 값에서 시작하면 된다. 랭크는 무작정 키운다고 좋아지지 않는다.
| 설정 | 출발값 |
|---|---|
r (랭크) | 8~32 |
lora_alpha | 랭크와 같게 또는 2배 |
target_modules | 어텐션 + FFN까지 포함 |
| 에폭 | 1~3 |
QLoRA 4비트로 학습했다면 서빙도 4비트로 해야 정확도가 덜 떨어진다. 어댑터 여러 개를 병합하지 않고 한꺼번에 서빙하려면 vLLM의 멀티 LoRA 기능을 쓰면 된다.
Stable Diffusion이나 FLUX 쪽에서는 특정 화풍·인물·사물을 학습한 LoRA 파일을 Civitai 같은 곳에서 받아 쓰는 게 일반적이다. 화풍 LoRA와 캐릭터 LoRA를 동시에 얹을 수 있지만, 서로 간섭해서 품질이 무너질 수 있다. 그래서 각 LoRA의 가중치 비율은 직접 바꿔 보면서 맞춰야 한다.
배울 수 있는 양이 작아서 말투, 출력 형식, 특정 작업 요령을 익히는 데는 뛰어나지만, 모델이 모르던 지식을 대량으로 넣는 데는 약하다. "덜 배우는 대신 덜 잊는" 셈이다. 또 어댑터는 특정 베이스 모델 버전에 묶여 있어서, 베이스 모델을 바꾸면 다시 학습해야 한다.
가장 흔한 건 오픈 모델에 특정 작업 요령과 말투를 입히는 용도다. 새 지식은 문서 검색(RAG)으로 넣고, LoRA로는 답변 형식과 말투만 맞추는 식으로 나눠 쓰는 경우가 많다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 업무용 챗봇·사내 도우미 | 원하는 답변 형식·말투 예시로 QLoRA 학습, 지식은 검색으로 따로 붙임 |
| 개인 GPU 실험 | Unsloth + QLoRA로 7~8B 오픈 모델을 분류·추출 같은 한 가지 작업에 특화 |
| 이미지 생성 | 받은 화풍·캐릭터 LoRA를 얹거나, 직접 모은 이미지로 내 LoRA를 학습 |
| 여러 작업 동시 서빙 | 베이스 모델 하나에 작업별 어댑터를 vLLM 멀티 LoRA로 갈아 끼움 |