TL;DR LoRA(Low-Rank Adaptation)는 사전 훈련된 대규모 머신러닝 모델의 모든 가중치를 재훈련하는 대신, 일부 가중치 행렬에 작은 규모의 '어댑터' 행렬을 추가하여 학습시키는 파라미터 효율적 파인튜닝(PEFT) 기법입니다. 이 방식은 기존 모델의 가중치는 동결(freeze)시킨 채, 주입된 저차원(low-rank) 행렬만을 학습 대상으로 삼습니다. 결과적으로, 훈련에 필요한 파라미터 수를 획기적으로 줄여 GPU 메모리 사용량을 최소화하고, 훈련 시간을 단축하며, 파인튜닝된 모델의 저장 공간을 크게 절약할 수 있습니다.
LoRA란 무엇인가: 거대 모델을 효율적으로 길들이는 법
대규모 언어 모델(LLM)이나 이미지 생성 모델은 수십억 개에서 수천억 개의 파라미터를 가집니다. 특정 도메인이나 스타일에 맞게 모델을 '파인튜닝'하려면, 이 거대한 모델 전체를 다시 학습시켜야 했습니다. 이는 엄청난 양의 컴퓨팅 자원(특히 고사양 GPU)과 시간을 요구하며, 결과물로 원본 모델 크기의 복사본이 생성되어 저장 비용도 만만치 않았습니다.
LoRA(Low-Rank Adaptation)는 이러한 비효율을 해결하기 위해 Microsoft 연구원들이 제안한 기법입니다. 핵심 아이디어는 '사전 훈련된 모델의 가중치들은 이미 충분히 좋은 상태이며, 새로운 작업에 적응하기 위해 필요한 변화는 크지 않다'는 가정에서 출발합니다. 따라서 원본 모델의 가중치(W)는 그대로 두고, 작업에 필요한 변화량(ΔW)만을 따로 학습합니다.
LoRA는 이 변화량(ΔW)을 두 개의 작은 행렬(A와 B)의 곱(ΔW=BA)으로 표현합니다. 여기서 A와 B는 원본 가중치 행렬 W보다 훨씬 작은 차원을 가집니다. 이것이 '저차원(Low-Rank)' 적응이라고 불리는 이유입니다. 파인튜닝 과정에서는 원본 가중치 W를 동결(학습 대상에서 제외)하고, 오직 행렬 A와 B만을 학습시킵니다.
Why it matters: LoRA는 전체 모델을 재학습하는 대신, 아주 작은 규모의 '패치'를 학습하는 것과 같습니다. 이로 인해 개인 개발자나 소규모 팀도 제한된 리소스로 거대 모델을 특정 목적에 맞게 커스터마이징할 수 있는 길이 열렸습니다.
LoRA의 작동 원리와 장점
작동 원리
수학적으로 LoRA의 적용은 다음과 같이 표현됩니다. 기존 모델의 특정 레이어(예: 어텐션 레이어)의 가중치 행렬을
라고 할 때, 파인튜닝 후의 가중치 W는 다음과 같습니다.
W=W0+ΔW=W0+BA
여기서
이고,
입니다. 랭크(rank)를 나타내는 r은 d나 k보다 훨씬 작은 값(r≪min(d,k))입니다. 예를 들어, 1024x1024 크기의 행렬(약 100만 개 파라미터)을 업데이트하는 대신, 1024x8 행렬과 8x1024 행렬(총 약 1만 6천 개 파라미터) 두 개만 학습하면 됩니다. 학습 파라미터 수가 98% 이상 감소하는 것입니다.
추론(inference) 시에는 학습된 B와 A를 곱해 ΔW를 계산한 후, 이를 원본 가중치 W0에 더해 W를 만듭니다. 이 병합 과정 덕분에 추론 시 추가적인 계산 지연(latency)이 발생하지 않습니다.
주요 장점
- 훈련 효율성: 훈련 가능한 파라미터 수가 크게 줄어들어, 필요한 GPU VRAM이 감소하고 훈련 속도가 빨라집니다.
- 저장 공간 절약: 전체 모델을 저장할 필요 없이, 학습된 LoRA 어댑터(행렬 A, B)만 저장하면 됩니다. 이는 수십 GB에 달하는 모델 체크포인트를 수십 MB 수준으로 줄여줍니다.
- 빠른 작업 전환: 하나의 기본 모델에 여러 개의 LoRA 어댑터를 '플러그인'처럼 교체하며 다양한 작업을 수행할 수 있습니다.
- 과적합 방지: 학습 파라미터 수가 적어, 특히 작은 데이터셋으로 파인튜닝할 때 발생할 수 있는 과적합(overfitting) 위험을 줄여줍니다.
Why it matters: LoRA는 모델 파인튜닝의 패러다임을 '무거운 전체 복사'에서 '가벼운 패치 적용'으로 바꾸었습니다. 이는 AI 모델의 배포, 관리, 실험 비용을 극적으로 낮추는 실질적인 효과를 가져옵니다.
Hugging Face PEFT를 이용한 LoRA 구현 예제
허깅페이스(Hugging Face)의 PEFT(Parameter-Efficient Fine-Tuning) 라이브러리를 사용하면 몇 줄의 코드만으로 LoRA를 쉽게 적용할 수 있습니다. 다음은 사전 훈련된 언어 모델에 LoRA를 적용하는 예시입니다.
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
# 1. 사전 훈련된 모델과 토크나이저 로드
model_name = "meta-llama/Llama-2-7b-chat-hf"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 2. LoRA 설정 정의
lora_config = LoraConfig(
r=16, # 랭크(rank). 값이 클수록 표현력은 높아지나 파라미터 수가 증가. 보통 8, 16, 32 사용.
lora_alpha=32, # LoRA 가중치의 스케일링 팩터. 보통 r의 2배 값을 사용.
target_modules=["q_proj", "v_proj"], # LoRA를 적용할 모듈(레이어) 지정. 어텐션 레이어가 주로 대상이 됨.
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM" # 작업 유형 지정
)
# 3. 모델에 LoRA 적용
peft_model = get_peft_model(model, lora_config)
# 훈련 가능한 파라미터 수 비교
def print_trainable_parameters(model):
"""
Prints the number of trainable parameters in the model.
"""
trainable_params = 0
all_param = 0
for _, param in model.named_parameters():
all_param += param.numel()
if param.requires_grad:
trainable_params += param.numel()
print(
f"trainable params: {trainable_params} || all params: {all_param} || trainable%: {100 * trainable_params / all_param:.2f}"
)
print("Original Model:")
print_trainable_parameters(model)
print("\nLoRA Model:")
print_trainable_parameters(peft_model)
# 이제 peft_model을 일반적인 Hugging Face 모델처럼 훈련시키면 됩니다.
# 예: trainer = Trainer(model=peft_model, ...)
# trainer.train()
예상 출력:
Original Model:
trainable params: 6738415616 || all params: 6738415616 || trainable%: 100.00
LoRA Model:
trainable params: 8388608 || all params: 6746804224 || trainable%: 0.12
위 코드에서 볼 수 있듯이, LoRA를 적용하면 전체 파라미터의 약 0.12%만 학습 대상이 되어 효율성이 극대화됩니다.
Why it matters: Hugging Face PEFT와 같은 라이브러리는 LoRA의 복잡한 내부 구현을 추상화하여, 개발자가 모델 아키텍처 수정 없이 간단한 설정만으로 PEFT 기법을 도입할 수 있게 합니다. 이는 기술의 접근성을 높여 더 넓은 커뮤니티가 LLM 파인튜닝에 참여하도록 돕습니다.
결론
LoRA는 대규모 AI 모델의 시대에 필수적인 기술로 자리 잡았습니다. 전체 파인튜닝의 높은 진입 장벽을 낮춤으로써, 더 많은 개발자와 연구자들이 AI 모델을 특정 요구사항에 맞게 최적화할 수 있게 되었습니다. 훈련 효율성, 저장 공간의 절약, 그리고 유연한 모델 관리라는 명확한 장점을 통해 LoRA는 머신러닝 프로젝트의 비용과 복잡성을 줄이는 현실적인 해결책을 제공합니다.
References:
| LoRA: Low-Rank Adaptation of Large Language Models | arXiv | 2021-10-26 | https://arxiv.org/abs/2106.09685 |
| What is LoRA (Low-Rank Adaption)? | IBM | 2024-01-22 | https://www.ibm.com/think/topics/lora |
| LoRA - Hugging Face PEFT | Hugging Face | N/A | https://huggingface.co/docs/peft/developer_guides/lora |
| Mastering Low-Rank Adaptation (LoRA): Enhancing Large Language Models for Efficient Adaptation | DataCamp | 2024-01-16 | https://www.datacamp.com/tutorial/mastering-low-rank-adaptation-lora-enhancing-large-language-models-for-efficient-adaptation |
| What is LoRA? | Low-rank adaptation | Cloudflare | N/A | https://www.cloudflare.com/learning/ai/what-is-lora/ |
'개발 창고 > AI' 카테고리의 다른 글
에이전틱 AI(Agentic AI)란? 스스로 생각하고 행동하는 AI 에이전트 개념, 사례 총정리 (1) | 2025.10.06 |
---|---|
텐센트 Hunyuan-DiT: Sora와 동일 아키텍처의 이미지 생성 AI (3) | 2025.10.04 |
OpenAI Sora 2 출시: 향상된 물리엔진과 오디오 동기화 심층 분석 (3) | 2025.10.04 |
Claude Sonnet 4.5: 향상된 코딩 및 AI 에이전트 기능 심층 분석 (1) | 2025.10.01 |
쿠버네티스 볼륨 완벽 가이드: PV, PVC, StorageClass 개념 분석 (2) | 2025.09.22 |