|
Download docs/llava_lora_guide.md from stumpferWinkel/grasp: direct link, hf CLI and curl.
- Browser
- Download file 4.69 kB
-
https://huggingface.co/stumpferWinkel/grasp/resolve/main/docs/llava_lora_guide.md
- Command line
-
hf download hf://stumpferWinkel/grasp/docs/llava_lora_guide.md
-
curl -L -o llava_lora_guide.md https://huggingface.co/stumpferWinkel/grasp/resolve/main/docs/llava_lora_guide.md
4.69 kB
LLaVA LoRA Fine-tuning Guide
Overview
This guide explains how to use LoRA (Low-Rank Adaptation) to fine-tune the LLaVA model for the robotic grasping task. LoRA enables efficient adaptation of the language model while keeping most parameters frozen.
Key Benefits
- Memory Efficient: Only ~0.1-1% of parameters need updating
- Fast Training: Smaller optimizer states and gradients
- Preserve Base Knowledge: Original LLaVA weights remain unchanged
- Task Adaptation: Model learns task-specific language-vision patterns
Implementation Details
Model Architecture
The legrconv4x_llava_lora.py model:
- Inherits from the frozen v2 model for backward compatibility
- Uses HuggingFace PEFT for LoRA implementation
- Uses TaskType.CAUSAL_LM (correct for LLaVA)
- PEFT automatically manages trainable parameters
- Properly handles train/eval modes for LoRA dropout
- Provides methods for saving/loading LoRA weights only
Configuration Options
# LoRA Configuration in YAML
use_lora: True # Enable LoRA
lora_rank: 16 # Low-rank dimension (typical: 8-64)
lora_alpha: 32 # Scaling factor (typical: 2x rank)
lora_dropout: 0.05 # Dropout for regularization
lora_target_modules: ["q_proj", "v_proj"] # Which layers to adapt
lora_lr_multiplier: 1.0 # LR multiplier for LoRA params
Target Module Options
Minimal (Recommended Start):
lora_target_modules: ["q_proj", "v_proj"]- Adapts Query and Value projections only
- ~0.1% trainable parameters
- Good for initial experiments
Extended Attention:
lora_target_modules: ["q_proj", "v_proj", "k_proj", "o_proj"]- All attention projection layers
- ~0.2% trainable parameters
- Better capacity for complex adaptations
Full Model:
lora_target_modules: ["q_proj", "v_proj", "k_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]- Attention + Feed-forward layers
- ~0.5% trainable parameters
- Maximum adaptation capacity
Training Commands
Basic Training
python train_network_unified.py \
--config config/OCID-VLG/legrconv_llava_r50_lora.yaml
Experiment with Different Ranks
# Small rank (r=8)
python train_network_unified.py \
--config config/OCID-VLG/legrconv_llava_r50_lora.yaml \
--opts lora_rank 8 lora_alpha 16
# Large rank (r=32)
python train_network_unified.py \
--config config/OCID-VLG/legrconv_llava_r50_lora.yaml \
--opts lora_rank 32 lora_alpha 64
Recommended Training Strategy
- Start Small: Begin with rank=8 or 16 and minimal modules
- Monitor Performance: Track validation metrics and training efficiency
- Scale Up If Needed: Increase rank or add modules if performance plateaus
- Learning Rate: LoRA often benefits from slightly higher LR than full fine-tuning
Memory and Performance
| Configuration | Trainable Params | GPU Memory | Training Speed |
|---|---|---|---|
| Frozen (v2) | ~10M (heads only) | ~16GB | Fastest |
| LoRA r=8 minimal | ~20M | ~18GB | Fast |
| LoRA r=16 minimal | ~30M | ~20GB | Fast |
| LoRA r=16 extended | ~50M | ~22GB | Moderate |
| LoRA r=32 full | ~150M | ~28GB | Moderate |
Saving and Loading
Save LoRA Weights Only
# In your training script
model.save_lora_weights("path/to/lora_checkpoint")
This saves only the LoRA adapter weights (~10-100MB).
Load LoRA Weights
# Load base model + LoRA
model = build_net(args) # This creates the PEFT model
model.load_lora_weights("path/to/lora_checkpoint") # Uses load_adapter internally
Merge and Export
# Merge LoRA into base model for deployment
model.merge_and_unload()
torch.save(model.state_dict(), "merged_model.pth")
Troubleshooting
Out of Memory
- Reduce batch size
- Use smaller LoRA rank
- Use gradient accumulation
- Reduce number of target modules
Poor Performance
- Increase LoRA rank
- Add more target modules
- Increase learning rate for LoRA
- Train for more epochs
Unstable Training
- Reduce learning rate
- Increase LoRA dropout
- Use warmup scheduler
- Check gradient clipping
Best Practices
- Always start with frozen baseline to establish performance floor
- Use validation set to select optimal rank and modules
- Save LoRA weights separately for easy experimentation
- Monitor trainable parameters - PEFT will print this at initialization
- Use AdamW optimizer with weight decay for better regularization