Fine-Tuning και Transfer Learning: Οδηγός Εκπαίδευσης Μοντέλων
Το fine-tuning είναι η διαδικασία προσαρμογής προεκπαιδευμένων μοντέλων για συγκεκριμένα tasks ή πεδία. Με τις σωστές στρατηγικές fine-tuning, μπορούν να επιτευχθούν αυξήσεις απόδοσης έως και 40% σε εταιρικές λύσεις AI.
Βασικές Αρχές Transfer Learning
Το transfer learning είναι η μεταφορά γνώσης που αποκτήθηκε σε ένα task σε ένα άλλο task.
Πλεονεκτήματα του Transfer Learning
- Αποδοτικότητα Δεδομένων: Καλό αποτέλεσμα με λιγότερα δεδομένα
- Εξοικονόμηση Χρόνου: Πολύ ταχύτερο από εκπαίδευση από το μηδέν
- Μείωση Κόστους: Λιγότεροι υπολογιστικοί πόροι
- Απόδοση: Αξιοποίηση προεκπαιδευμένης γνώσης
Pre-training vs Fine-tuning
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
- Ξεχωριστό αντίγραφο μοντέλου για κάθε task
Απαιτήσεις Υλικού
| Μέγεθος Μοντέλου | GPU Memory (FP32) | GPU Memory (FP16) |
|---|---|---|
| 7B | 28 GB | 14 GB |
| 13B | 52 GB | 26 GB |
| 70B | 280 GB | 140 GB |
Parameter-Efficient Fine-Tuning (PEFT)
Fine-tuning με ενημέρωση μόνο ενός μικρού μέρους των παραμέτρων.
Πλεονεκτήματα PEFT
- Αποδοτικότητα Μνήμης: Μείωση πάνω από 90%
- Ταχύτητα: Γρηγορότερη εκπαίδευση
- Modularity: Ένα βασικό μοντέλο, πολλαπλά adapters
- Catastrophic Forgetting: Ελαχιστοποιημένος κίνδυνος
LoRA (Low-Rank Adaptation)
Η πιο δημοφιλής μέθοδος PEFT.
LoRA Theory
Ενημέρωση του weight matrix προσεγγιστικά με low-rank matrices:
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 Configuration
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 Hyperparameters
Rank (r):
- Χαμηλό (4-8): Απλά tasks, λίγα δεδομένα
- Μεσαίο (16-32): Γενική χρήση
- Υψηλό (64-128): Πολύπλοκη προσαρμογή
Alpha:
- Γενικά alpha = 2 × r
Target Modules:
- Attention layers: q_proj, k_proj, v_proj, o_proj
- MLP layers: gate_proj, up_proj, down_proj
QLoRA (Quantized LoRA)
Συνδυασμός LoRA + 4-bit quantization.
Χαρακτηριστικά QLoRA
- 4-bit NormalFloat (NF4): Προσαρμοσμένη quantization μορφή
- Double Quantization: Quantizing quantization constants
- Paged Optimizers: Διαχείριση overflow μνήμης GPU
Σύγκριση Μνήμης QLoRA
| Μέθοδος | 7B Model | 70B Model |
|---|---|---|
| Full FT (FP32) | 28 GB | 280 GB |
| Full FT (FP16) | 14 GB | 140 GB |
| LoRA (FP16) | 12 GB | 120 GB |
| QLoRA (4-bit) | 6 GB | 48 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Προσθέτει μαθήσιμα prefixes στα input embeddings: 21
Input: [PREFIX_1, PREFIX_2, ..., PREFIX_N, token_1, token_2, ...]
1 2### Prompt Tuning 3 4Μάθηση soft prompts: 5
[SOFT_PROMPT] + "Actual input text"
1 2### Adapter Layers 3 4Προσθήκη μικρών δικτύων μεταξύ των transformer layers: 5
Attention → Adapter → LayerNorm → FFN → Adapter → LayerNorm
1 2### (IA)³ - Infused Adapter 3 4Πολλαπλασιασμός activations με learned vectors: 5
output = activation × learned_vector
1 2## Προετοιμασία Δεδομένων 3 4### Μορφές Δεδομένων 5 6**Instruction Format:** 7```json 8{ 9 "instruction": "Summarize this text", 10 "input": "Long text...", 11 "output": "Summary..." 12}
Chat Format:
1{ 2 "messages": [ 3 {"role": "system", "content": "You are a helpful assistant"}, 4 {"role": "user", "content": "Question..."}, 5 {"role": "assistant", "content": "Answer..."} 6 ] 7}
Ποιότητα Δεδομένων
Χαρακτηριστικά Καλών Δεδομένων:
- Ποικιλία (diverse examples)
- Συνέπεια (consistent format)
- Ακρίβεια (accurate labels)
- Επαρκής ποσότητα (συνήθως 1K-100K examples)
Data Augmentation
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)
Στρατηγικές Εκπαίδευσης
Επιλογή Hyperparameters
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
Αξιολόγηση και Επικύρωση
Metrics
Perplexity:
PPL = exp(average cross-entropy loss) Lower = better
BLEU/ROUGE: Ποιότητα παραγωγής κειμένου
Task-specific: Accuracy, F1, custom metrics
Εντοπισμός Overfitting
1Train loss ↓ + Validation loss ↑ = Overfitting 2 3Solutions: 4- Early stopping 5- More dropout 6- Data augmentation 7- Fewer epochs
Deployment
Model Merging
Συγχώνευση LoRA adapter στο base model:
merged_model = model.merge_and_unload() merged_model.save_pretrained("merged_model")
Multi-Adapter Serving
Πολλαπλά adapters με ένα μόνο base model:
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")
Enterprise Fine-Tuning Pipeline
1┌─────────────┐ ┌─────────────┐ ┌─────────────┐ 2│ Data │────▶│ Training │────▶│ Evaluation │ 3│ Preparation │ │ (LoRA/QLoRA)│ │ & Testing │ 4└─────────────┘ └─────────────┘ └──────┬──────┘ 5 │ 6 ┌─────────────┐ ┌──────▼──────┐ 7 │ Production │◀────│ Model │ 8 │ Deployment │ │ Registry │ 9 └─────────────┘ └─────────────┘
Συνηθισμένα Προβλήματα και Λύσεις
1. Out of Memory
Λύση: QLoRA, gradient checkpointing, μείωση batch size
2. Catastrophic Forgetting
Λύση: Μείωση learning rate, replay buffer, elastic weight consolidation
3. Overfitting
Λύση: Περισσότερα δεδομένα, regularization, early stopping
4. Κακή Γενίκευση
Λύση: Αύξηση ποικιλίας δεδομένων, ποικιλία οδηγιών
Συμπέρασμα
Η προσαρμογή μέσω fine-tuning είναι ο πιο αποτελεσματικός τρόπος για να προσαρμόσετε προεκπαιδευμένα μοντέλα στις ανάγκες μιας επιχείρησης. Ισχυρές προσαρμογές μπορούν να επιτευχθούν ακόμη και με περιορισμένους πόρους χρησιμοποιώντας μεθόδους PEFT όπως LoRA και QLoRA.
Στη Veni AI, παρέχουμε υπηρεσίες συμβουλευτικής και υλοποίησης για έργα enterprise fine-tuning. Επικοινωνήστε μαζί μας για τις ανάγκες σας.
