최근 학습 과정에서 생겼던 궁금증에 대해 간략하게 정리해보는 시간을 가졌습니다.
1. 학습 파라미터 vs 하이퍼 파라미터
1) 학습 파라미터
학습 파라미터는 모델이 학습 과정에서 스스로 최적화하는 내부 변수들입니다.
- 정의: 데이터로부터 학습을 통해 자동으로 업데이트되는 모델 내부 변수
- 예시: 신경망의 가중치(weights), 편향(biases), 임베딩(embeddings)
- 특징:
- 역전파를 통해 자동으로 조정됨
- 모델의 성능을 직접적으로 결정하는 요소
- 학습이 완료된 후 모델과 함께 저장됨
- 파인튜닝 시 주로 조정되는 대상
대규모 언어 모델(LLM)의 경우, 학습 파라미터는 수십억 개에 달할 수 있으며, 파인튜닝 과정에서는 이 파라미터의 일부 또는 전체를 조정합니다.
2) 하이퍼 파라미터
하이퍼파라미터는 모델의 학습 방식을 제어하는 외부 설정값입니다.
- 정의: 학습 과정을 제어하기 위해 사람이 사전에 설정하는 변수들
- 예시:
- 학습률(learning rate)
- 배치 크기(batch size)
- 에폭 수(epochs)
- 정규화 계수(regularization factor)
- 드롭아웃 비율(dropout rate)
- 모델 구조 설정(은닉층 수, 뉴런 수)
- 특징:
- 모델이 자동으로 학습하지 않으며 개발자가 직접 설정
- 학습 프로세스와 속도, 성능에 큰 영향을 미침
- 최적값을 찾기 위해 그리드 서치(Grid Search), 랜덤 서치(Random Search), 베이지안 최적화(Bayesian Optimization) 등의 방법 사용
3) 실제 코드에서의 구분
# 학습 파라미터 (모델 내부에서 자동으로 학습됨)
# q_proj, k_proj, v_proj, o_proj, gate_proj 등의 가중치
model = FastLanguageModel.get_peft_model(
model,
r=128, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
"embed_tokens",
"lm_head",
], # Add for continual pretraining
lora_alpha=32,
lora_dropout=0, # Supports any, but = 0 is optimized
bias="none", # Supports any, but = "none" is optimized
# [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
use_gradient_checkpointing="unsloth", # True or "unsloth" for very long context
random_state=3407,
use_rslora=True, # We support rank stabilized LoRA
loftq_config=None, # And LoftQ
)
# 하이퍼파라미터 (개발자가 직접 설정)
args = UnslothTrainingArguments(
per_device_train_batch_size=2, # 배치 크기 설정
gradient_accumulation_steps=8, # 그래디언트 누적 단계 수
warmup_steps=10, # 워밍업 스텝 수
num_train_epochs=1, # 학습 에폭 수
learning_rate=5e-5, # 학습률
embedding_learning_rate=1e-5, # 임베딩 학습률
fp16=True, # 16비트 부동소수점 사용 여부
bf16=False, # bfloat16 사용 여부
# ... 기타 설정들
)
2. Trainer 종류 및 장단점
1) Hugging Face Trainer
Hugging Face의 기본 트레이너로, 다양한 모델과 데이터셋에 범용적으로 사용할 수 있습니다.
장점:
- 쉬운 사용법과 포괄적인 문서화
- 다양한 모델 아키텍처 지원
- 분산 학습, 혼합 정밀도 학습 등 고급 기능 내장
- 커스터마이징이 용이한 콜백 시스템
단점:
- 대규모 LLM 파인튜닝에 최적화되어 있지 않음
- 메모리 사용량이 다소 높을 수 있음
- 특수한 학습 기법(PEFT, QLoRA 등)에 대한 직접적인 지원이 부족
2) UnslothTrainer
Unsloth 라이브러리의 트레이너로, 대규모 LLM의 효율적인 파인튜닝에 특화되어 있습니다.
장점:
- LLM 파인튜닝에 최적화된 성능
- 메모리 효율성이 높아 더 큰 배치 크기 사용 가능
- FlashAttention, LoRA와 같은 최신 기술 내장
- 학습 속도가 일반 Trainer보다 빠름 (2-3배 속도 향상)
단점:
- 범용성이 다소 부족 (주로 LLaMA, Mistral 계열 모델에 최적화)
- 상대적으로 새로운 라이브러리로 문서화가 덜 완성됨
- 커스터마이징 옵션이 제한적일 수 있음
3) SFTTrainer
TRL 라이브러리의 일부로, 지시어 튜닝과 같은 지도 학습 파인튜닝에 특화되어 있습니다.
장점:
- 대화형 AI 모델 학습에 최적화
- 지시어 형식의 데이터 처리가 간편함
- RLHF(Reinforcement Learning from Human Feedback) 파이프라인과 연동 가능
- 토크나이징 프로세스가 자동화되어 사용이 편리함
단점:
- 일반적인 분류나 회귀 태스크에는 덜 적합
- 학습 과정의 세밀한 제어가 다소 제한적
- 특화된 용도로 인해 범용성이 다소 떨어짐
3. GPU 인스턴스 종류
1) NVIDIA A100
사양:
- 메모리: 40GB / 80GB 버전 존재
- FP32 성능: 최대 19.5 TFLOPS
- FP16/BF16 성능: 최대 312 TFLOPS (Tensor Cores)
- 메모리 대역폭: 1.6 TB/s (HBM2e)
장점:
- 우수한 가격 대비 성능
- 충분한 메모리로 대규모 모델 학습 가능
- 다양한 클라우드 제공업체에서 폭넓게 사용 가능
- TensorFloat-32(TF32) 지원으로 학습 속도 향상
단점:
- H100보다는 성능이 떨어짐
- 가격이 여전히 높은 편 (특히 80GB 버전)
적합한 사용 사례:
- 7B-70B 파라미터 규모의 LLM 파인튜닝
- 중간 규모의 연구 및 개발 프로젝트
2) NVIDIA H100
사양:
- 메모리: 80GB
- FP32 성능: 최대 67 TFLOPS
- FP16/BF16 성능: 최대 1,979 TFLOPS (Tensor Cores)
- 메모리 대역폭: 3.35 TB/s (HBM3)
장점:
- 최고 수준의 연산 성능
- 대규모 모델 학습 및 추론에 뛰어난 성능
- 향상된 메모리 대역폭으로 병목 현상 감소
- Transformer 엔진으로 LLM 학습 최적화
단점:
- 매우 높은 비용
- 가용성이 제한적일 수 있음
- 냉각 요구사항이 더 높음
적합한 사용 사례:
- 100B+ 파라미터 규모의 대형 LLM 파인튜닝
- 최고 성능이 필요한 대규모 상업 프로젝트
- 다중 GPU 환경에서의 분산 학습
3) 기타 주요 GPU 옵션
NVIDIA V100
- A100의 이전 세대로, 여전히 많이 사용됨
- 16GB/32GB 메모리 옵션
- 비용 효율적인 대안이지만 최신 최적화 부족
NVIDIA T4
- 저비용 추론 특화 GPU
- 파인튜닝에는 제한적이나 가벼운 작업에 적합
- 16GB 메모리로 소규모 모델 파인튜닝 가능
NVIDIA RTX 4090 (소비자용)
- 성능 대비 가격이 우수함
- 24GB 메모리로 중소형 모델 파인튜닝 가능
- 대규모 프로젝트에는 부적합
AMD MI250X
- NVIDIA 대안으로 부상 중
- LLM 학습 생태계 지원이 상대적으로 부족
- 특정 워크로드에서 좋은 성능
'DeepLearning' 카테고리의 다른 글
[DeepLearning] 딥러닝 프레임워크 비교 분석 (0) | 2025.04.25 |
---|---|
[DeepLearning] 딥러닝의 기초와 메모리 최적화 기법 복습 (0) | 2025.04.16 |
[Transformer] 인코더와 디코더 (0) | 2025.04.15 |
[Transformer] 어텐션 연산과 핵심 구성 요소 (0) | 2025.04.14 |
[Text Embedding] 텍스트를 임베딩하는 3단계 (0) | 2025.04.11 |