Veni AI
모델 훈련

미세 조정 및 전이 학습: 모델 훈련 가이드

LLM 미세 조정 기술, LoRA, QLoRA, PEFT 방식 및 엔터프라이즈 AI 모델 커스터마이징을 위한 종합 기술 가이드.

Veni AI Technical Team11 Ocak 20255 dk okuma
미세 조정 및 전이 학습: 모델 훈련 가이드

파인튜닝 및 전이학습: 모델 학습 가이드

파인튜닝은 사전 학습된 모델을 특정 작업 또는 도메인에 맞게 최적화하는 과정입니다. 올바른 파인튜닝 전략을 적용하면 엔터프라이즈 AI 솔루션에서 최대 40%까지 성능 향상을 달성할 수 있습니다.

전이학습 기본 개념

전이학습은 한 작업에서 학습된 지식을 다른 작업에 이전하는 것입니다.

전이학습의 장점

  1. 데이터 효율성: 적은 데이터로도 좋은 결과
  2. 시간 절약: 처음부터 학습하는 것보다 훨씬 빠름
  3. 비용 절감: 적은 컴퓨팅 자원
  4. 성능 향상: 사전 학습된 지식 활용

사전 학습 vs 파인튜닝

1Pre-training: 2- Large, general dataset (TBs) 3- Learning general language/task understanding 4- Training takes months 5- Cost in millions of dollars 6 7Fine-tuning: 8- Small, domain-specific dataset (MB-GB) 9- Specific task adaptation 10- Training takes hours-days 11- Cost in thousands of dollars

Full Fine-Tuning

모든 모델 파라미터를 업데이트하는 방식.

장점

  • 최대 적응 능력
  • 가장 높은 잠재 성능

단점

  • 높은 메모리 요구량
  • Catastrophic forgetting 위험
  • 작업별로 별도의 모델 복사본 필요

하드웨어 요구사항

Model SizeGPU Memory (FP32)GPU Memory (FP16)
7B28 GB14 GB
13B52 GB26 GB
70B280 GB140 GB

파라미터 효율적 파인튜닝 (PEFT)

모델의 일부분 파라미터만 업데이트하는 방식.

PEFT 장점

  • 메모리 효율성: 90% 이상 절감
  • 속도: 더 빠른 학습
  • 모듈성: 하나의 기본 모델로 여러 어댑터 사용 가능
  • Catastrophic Forgetting: 위험 최소화

LoRA (Low-Rank Adaptation)

가장 널리 사용되는 PEFT 방식.

LoRA 이론

저랭크 행렬을 사용하여 가중치 행렬을 근사적으로 업데이트:

1W' = W + ΔW = W + BA 2 3Where: 4- W: Original weight matrix (d × k) 5- B: Low-rank matrix (d × r) 6- A: Low-rank matrix (r × k) 7- r: Rank (typical: 8-64)

파라미터 절감

1Original: d × k parameters 2LoRA: r × (d + k) parameters 3 4Example (d=4096, k=4096, r=16): 5Original: 16.7M parameters 6LoRA: 131K parameters 7Savings: ~127x

LoRA 구성

1from peft import LoraConfig, get_peft_model 2 3config = LoraConfig( 4 r=16, # Rank 5 lora_alpha=32, # Scaling factor 6 target_modules=[ # Which layers to apply 7 "q_proj", 8 "k_proj", 9 "v_proj", 10 "o_proj" 11 ], 12 lora_dropout=0.05, 13 bias="none", 14 task_type="CAUSAL_LM" 15) 16 17model = get_peft_model(base_model, config)

LoRA 하이퍼파라미터

Rank (r):

  • 낮음 (4-8): 단순 작업, 데이터 적음
  • 중간 (16-32): 일반적 용도
  • 높음 (64-128): 복잡한 적응

Alpha:

  • 일반적으로 alpha = 2 × r

Target Modules:

  • Attention 레이어: q_proj, k_proj, v_proj, o_proj
  • MLP 레이어: gate_proj, up_proj, down_proj

QLoRA (Quantized LoRA)

LoRA + 4-bit 양자화를 결합한 방식.

QLoRA 특징

  1. 4-bit NormalFloat (NF4): 맞춤형 양자화 포맷
  2. Double Quantization: 양자화 상수까지 양자화
  3. Paged Optimizers: GPU 메모리 초과 방지 관리

QLoRA 메모리 비교

Method7B Model70B Model
Full FT (FP32)28 GB280 GB
Full FT (FP16)14 GB140 GB
LoRA (FP16)12 GB120 GB
QLoRA (4-bit)6 GB48 GB

QLoRA 구현

1from transformers import BitsAndBytesConfig 2import torch 3 4bnb_config = BitsAndBytesConfig( 5 load_in_4bit=True, 6 bnb_4bit_use_double_quant=True, 7 bnb_4bit_quant_type="nf4", 8 bnb_4bit_compute_dtype=torch.bfloat16 9) 10 11model = AutoModelForCausalLM.from_pretrained( 12 "meta-llama/Llama-2-7b-hf", 13 quantization_config=bnb_config, 14 device_map="auto" 15) 16## 기타 PEFT 방법 17 18### Prefix Tuning 19 20입력 임베딩에 학습 가능한 프리픽스를 추가합니다: 21

Input: [PREFIX_1, PREFIX_2, ..., PREFIX_N, token_1, token_2, ...]

1 2### Prompt Tuning 3 4Soft prompt를 학습합니다: 5

[SOFT_PROMPT] + "Actual input text"

1 2### Adapter Layers 3 4Transformer 레이어 사이에 작은 네트워크를 추가합니다: 5

Attention → Adapter → LayerNorm → FFN → Adapter → LayerNorm

1 2### (IA)³ - Infused Adapter 3 4활성값을 학습된 벡터와 곱합니다: 5

output = activation × learned_vector

1 2## 데이터 준비 3 4### 데이터 형식 5 6**Instruction 형식:** 7```json 8{ 9 "instruction": "Summarize this text", 10 "input": "Long text...", 11 "output": "Summary..." 12}

Chat 형식:

1{ 2 "messages": [ 3 {"role": "system", "content": "You are a helpful assistant"}, 4 {"role": "user", "content": "Question..."}, 5 {"role": "assistant", "content": "Answer..."} 6 ] 7}

데이터 품질

좋은 데이터의 특징:

  • 다양성 (다양한 예시)
  • 일관성 (일관된 형식)
  • 정확성 (정확한 레이블)
  • 충분한 양 (일반적으로 1K–100K 예시)

데이터 증강

1# Paraphrasing 2augmented_data = paraphrase(original_data) 3 4# Back-translation 5translated = translate(text, "tr") 6back_translated = translate(translated, "en") 7 8# Synonym replacement 9augmented = replace_synonyms(text)

학습 전략

하이퍼파라미터 선택

1training_args = TrainingArguments( 2 learning_rate=2e-4, # Typical for LoRA 3 num_train_epochs=3, 4 per_device_train_batch_size=4, 5 gradient_accumulation_steps=4, 6 warmup_ratio=0.03, 7 lr_scheduler_type="cosine", 8 fp16=True, 9 logging_steps=10, 10 save_strategy="epoch", 11 evaluation_strategy="epoch" 12)

Learning Rate

  • Full fine-tuning: 1e-5 - 5e-5
  • LoRA: 1e-4 - 3e-4
  • QLoRA: 2e-4 - 5e-4

Regularization

1# Weight decay 2weight_decay=0.01 3 4# Dropout 5lora_dropout=0.05 6 7# Gradient clipping 8max_grad_norm=1.0

평가 및 검증

메트릭

Perplexity:

PPL = exp(average cross-entropy loss) Lower = better

BLEU/ROUGE: 텍스트 생성 품질

Task-specific: Accuracy, F1, custom metrics

오버피팅 감지

1Train loss ↓ + Validation loss ↑ = Overfitting 2 3Solutions: 4- Early stopping 5- More dropout 6- Data augmentation 7- Fewer epochs

배포

모델 병합

LoRA 어댑터를 기반 모델에 병합:

merged_model = model.merge_and_unload() merged_model.save_pretrained("merged_model")

Multi-Adapter 서빙

하나의 기본 모델로 여러 어댑터를 사용:

1from peft import PeftModel 2 3base_model = AutoModelForCausalLM.from_pretrained("base") 4model_a = PeftModel.from_pretrained(base_model, "adapter_a") 5model_b = PeftModel.from_pretrained(base_model, "adapter_b")

엔터프라이즈 파인튜닝 파이프라인

1┌─────────────┐ ┌─────────────┐ ┌─────────────┐ 2│ Data │────▶│ Training │────▶│ Evaluation │ 3│ Preparation │ │ (LoRA/QLoRA)│ │ & Testing │ 4└─────────────┘ └─────────────┘ └──────┬──────┘ 56 ┌─────────────┐ ┌──────▼──────┐ 7 │ Production │◀────│ Model │ 8 │ Deployment │ │ Registry │ 9 └─────────────┘ └─────────────┘

일반적인 문제와 해결책

1. 메모리 부족

해결: QLoRA, gradient checkpointing, batch size 감소

2. Catastrophic Forgetting

해결: 낮은 learning rate, replay buffer, elastic weight consolidation

3. 오버피팅

해결: 더 많은 데이터, regularization, early stopping

4. 일반화 성능 저하

해결: 데이터 다양성 증가, instruction 다양성 증가

결론

파인튜닝은 사전 학습된 모델을 엔터프라이즈 요구사항에 맞게 적응시키는 가장 효과적인 방법입니다. LoRA와 QLoRA와 같은 PEFT 방식을 사용하면 제한된 리소스만으로도 강력한 커스터마이징이 가능합니다.

Veni AI는 엔터프라이즈 파인튜닝 프로젝트를 위한 컨설팅 및 구현 서비스를 제공합니다. 필요한 사항이 있으시면 언제든지 문의하십시오.

İlgili Makaleler