LexAI — Plan de Fine-Tuning con TRL

Pipeline SFT → DPO → Reward Model · Modelo juridico espanol B2B

CULTIVA IA · MLOps
Parametros del proyecto
Modelo base
Qwen2.5-7B
Instruct · Apache-2.0
Dataset juridico propio
4 200
pares instruccion-respuesta
Hardware
2× A100
80 GB · AWS spot · 2xZeRO-2
Precision objetivo @1
≥ 78 %
benchmark interno LexAI
Presupuesto GPU
< 500 €
por ciclo completo
Contexto max
2 048
tokens · vLLM + GPTQ 4-bit
Pipeline de entrenamiento
Fase 1
SFT + LoRA
Supervised Fine-Tuning sobre dataset juridico propio. LoRA r=64 para ajustar solo 1-2% de parametros.
trl sft --use_peft lora_r=64
Fase 2
DPO
Direct Preference Optimization con pares elegido/rechazado anotados por abogados senior del cliente.
trl dpo beta=0.1 1 000 pasos
Fase 3
Reward Model
Modelo de recompensa para scoring automatico de respuestas en produccion y monitoreo continuo.
trl reward SEQ_CLS LoRA
Configuraciones YAML reproducibles

sft_lexai.yaml — Fase 1

# SFT con LoRA — LexAI juridico model_name_or_path: Qwen/Qwen2.5-7B-Instruct dataset_name: lexai/derecho-mercantil-sft learning_rate: 2.0e-4 num_train_epochs: 3 per_device_train_batch_size: 4 gradient_accumulation_steps: 4 max_seq_length: 2048 packing: true use_peft: true lora_r: 64 lora_alpha: 32 lora_target_modules: [q_proj, v_proj, k_proj, o_proj] bf16: true gradient_checkpointing: true eval_strategy: steps eval_steps: 100 save_steps: 200 output_dir: ./lexai-qwen-sft report_to: wandb run_name: lexai-sft-v1

dpo_lexai.yaml — Fase 2

# DPO — alineacion por preferencias model_name_or_path: ./lexai-qwen-sft dataset_name: lexai/preferencias-abogados learning_rate: 5.0e-7 beta: 0.1 num_train_epochs: 1 per_device_train_batch_size: 2 gradient_accumulation_steps: 8 max_length: 2048 max_steps: 1000 use_peft: true lora_r: 32 lora_alpha: 16 bf16: true eval_strategy: steps eval_steps: 50 no_remove_unused_columns: true output_dir: ./lexai-qwen-dpo report_to: wandb run_name: lexai-dpo-v1
Comandos de ejecucion (multi-GPU · ZeRO-2)

Paso 1 — SFT con LoRA

$ trl sft \
  --config sft_lexai.yaml \
  --accelerate_config zero2 \
  --num_processes 2

Paso 2 — DPO

$ trl dpo \
  --config dpo_lexai.yaml \
  --accelerate_config zero2 \
  --num_processes 2

Paso 3 — Reward Model

$ trl reward \
  --model_name_or_path ./lexai-qwen-dpo \
  --dataset_name lexai/preferencias-abogados \
  --output_dir ./lexai-reward-model \
  --per_device_train_batch_size 4 \
  --num_train_epochs 2 \
  --learning_rate 1.0e-5 \
  --max_length 2048 \
  --use_peft \
  --lora_task_type SEQ_CLS \
  --lora_r 32 \
  --lora_alpha 16 \
  --bf16
Metricas estimadas por fase
Fase Tecnica Duracion est. Memoria GPU Coste AWS spot KPI esperado Estado
Fase 1 SFT + LoRA ~3 h ~48 GB (2×24) ~85 € Loss < 1.2 Planificado
Fase 2 DPO ~2 h ~56 GB (2×28) ~60 € Win-rate > 65 % Planificado
Fase 3 Reward Model ~1.5 h ~36 GB (2×18) ~45 € AUC > 0.84 Planificado
Eval final Benchmark LexAI ~30 min ~20 GB (1 GPU) ~12 € Precision@1 ≥ 78 % Pendiente
Estimacion de coste total
Fase 1 — SFT (2× A100 · 3 h · 3.2 $/h) 85 €
Fase 2 — DPO (2× A100 · 2 h · 3.2 $/h) 60 €
Fase 3 — Reward (2× A100 · 1.5 h · 3.2 $/h) 45 €
Eval + almacenamiento S3 + transferencia 25 €
TOTAL ciclo completo
Dentro del presupuesto cliente (< 500 €)
215 € ✓ -57%
Resolucion de problemas anticipados
CUDA Out of Memory
Reducir --per_device_train_batch_size a 2 y aumentar --gradient_accumulation_steps a 8. Activar --gradient_checkpointing. Cambiar a ZeRO-3 si persiste.
Dataset juridico — formato
El dataset debe tener columnas prompt y completion para SFT, y columnas prompt, chosen, rejected para DPO/Reward.
Entrenamiento lento
Activar --packing true para secuencias cortas. Usar --bf16 en A100. Verificar que --accelerate_config zero2 esta activo para distribucin optima.
Inferencia 4-bit (produccion)
Tras el entrenamiento, cuantizar con bitsandbytes GPTQ o AutoGPTQ. Servir con vLLM --quantization gptq. Merging LoRA antes de exportar.