LoRA에서 target_modules
란 무엇인가요?
LoRA를 사용할 때 핵심 설정 중 하나가 target_modules
입니다.
이는 어떤 레이어에만 LoRA를 적용할지를 지정하는 항목으로, 모델 내부의 Linear Layer 중 일부에만 저차원 행렬을 삽입해 학습하도록 설정합니다.
Transformer 구조에서의 주요 Linear Layer
Transformer 기반 모델에는 다음과 같은 주요 Linear Layer가 존재합니다.
용어 | 설명 |
---|---|
q (Query) |
입력 토큰으로부터 "무엇을 찾을지"를 계산하는 벡터 |
k (Key) |
입력 토큰의 "특징(열쇠)"을 나타내는 벡터 |
v (Value) |
입력 토큰의 실제 정보 내용 |
o (Output) |
Self-Attention 결과를 통합하여 출력값으로 변환 |
up (MLP Up Projection) |
FFN에서 차원을 확장하는 Linear Layer |
down (MLP Down Projection) |
확장된 차원을 다시 줄이는 Linear Layer |
gate (Gated FFN) |
일부 모델에서 사용하는 gating 메커니즘 레이어 |
이 레이어들은 왜 중요할까요?
Transformer는 입력 문장을 이해할 때, 각 토큰이 서로 어떤 관계에 있는지 계산합니다.
이때 가장 핵심적인 계산이 바로 Self-Attention이며, 그 과정에서 q
, k
, v
, o
레이어가 사용됩니다.
또한 Transformer의 Feed Forward Network (FFN) 구조에서는 up
, down
, gate
가 주요 역할을 합니다. 이들은 모델이 더 깊은 표현을 만들 수 있도록 도와줍니다.
어떤 모듈을 선택하면 좋을까요?
LoRA는 모델의 성능을 유지하면서도 파라미터 수를 줄이기 위해, 다음과 같은 방식으로 target_modules
를 설정합니다.
target_modules = ["q_proj", "v_proj"]
하지만 상황에 따라 다음처럼 확장할 수 있습니다:
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "up_proj", "down_proj", "gate_proj"]
의미 요약:
target_module | 의미 | LoRA 적용 시 효과 |
---|---|---|
q_proj |
Query 생성 | Attention 입력 조정 |
k_proj |
Key 생성 | 문맥 키 조정 |
v_proj |
Value 생성 | 정보 유입 조절 |
o_proj |
Output 계산 | Attention 출력 방향 조정 |
up_proj |
FFN 차원 확장 | 표현력 향상 |
down_proj |
FFN 차원 축소 | 요약된 정보 표현 |
gate_proj |
Gated FFN 활성화 | 정보 흐름 제어 |
실제 적용 코드 예시
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=8,
lora_alpha=32,
lora_dropout=0.1,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "up_proj", "down_proj", "gate_proj"]
)
이렇게 설정하면 모델의 핵심 레이어에만 저차원 행렬이 삽입되어, 학습 속도와 메모리 사용량은 줄이면서도 성능은 유지할 수 있습니다.
마무리하며
모든 레이어에 LoRA를 적용할 필요는 없습니다. 일반적으로는 q_proj
와 v_proj
만으로도 충분한 성능 향상을 볼 수 있으며,
보다 세밀한 튜닝이 필요한 경우 k
, o
, up
, down
, gate
등도 함께 고려해볼 수 있습니다.
모델 구조에 따라 적용 가능한 레이어 이름이 다르므로, 실제 모델 소스코드를 살펴보고 정확한 레이어 명칭을 사용하는 것이 중요합니다.
'개발 창고 > AI' 카테고리의 다른 글
Streamlit 앱을 Hugging Face Spaces에 배포하는 가이드 (3) | 2025.06.17 |
---|---|
AI 모델 성능을 좌우하는 데이터 전처리, 어떻게 해야 할까? (1) | 2025.06.17 |
SFTTrainer란? Hugging Face로 쉽게 시작하는 언어모델 미세 조정 (3) | 2025.06.15 |
NVIDIA-SMI 완전 정복: GPU 상태 확인 및 리소스 모니터링 가이드 (3) | 2025.06.14 |
vLLM: 고성능 LLM 추론을 위한 오픈소스 라이브러리 (1) | 2025.06.13 |