Fine-tuning con LoRA

Fine-tuning de un LLM de pesos abiertos con LoRA o QLoRA mediante la CLI de Hugging Face TRL en una GPU Node Lodge y copie el adaptador fuera de la máquina.

Fine-tuning supervisado con adaptadores LoRA, mediante la línea de comandos trl. Sin script de entrenamiento que escribir.

GPU: 24 GB para la prueba rápida con 0.5B y para QLoRA con 7B, 48 GB para LoRA con 7B. Consulte Fine-tuning para el dimensionamiento.

1. Instale

curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install torch --torch-backend=auto
uv pip install "trl[peft]" bitsandbytes

Verifique el entorno:

trl env

2. Prueba rápida

Una ejecución corta con un modelo pequeño verifica la memoria y el rendimiento:

trl sft \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/Capybara \
  --use_peft \
  --max_steps 50 \
  --output_dir runs/smoke

3. Entrene

Ejecute el trabajo real dentro de tmux:

tmux new -s train
source .venv/bin/activate
trl sft \
  --model_name_or_path Qwen/Qwen2.5-7B \
  --dataset_name trl-lib/Capybara \
  --use_peft \
  --lora_r 16 \
  --lora_alpha 32 \
  --lora_target_modules q_proj k_proj v_proj o_proj gate_proj up_proj down_proj \
  --learning_rate 2.0e-4 \
  --num_train_epochs 1 \
  --per_device_train_batch_size 2 \
  --gradient_accumulation_steps 8 \
  --save_steps 200 \
  --output_dir runs/qwen7b-lora

Separe la sesión de tmux con Ctrl+b d. Vuelva a ella con tmux attach -t train.

Con 24 GB, cargue el modelo base en 4 bits (QLoRA): añada --load_in_4bit.

Sus propios datos: un archivo JSONL con una columna messages (formato de chat) o una columna text.

rsync -avz ./train.jsonl ubuntu@203.0.113.42:~/data/

Indique el archivo a trl con un archivo de configuración en lugar de --dataset_name:

# sft.yaml
model_name_or_path: Qwen/Qwen2.5-7B
datasets:
  - path: json
    data_files: /home/ubuntu/data/train.jsonl
use_peft: true
output_dir: runs/qwen7b-lora
trl sft --config sft.yaml

Las flags de la línea de comandos prevalecen sobre los valores del archivo. Un dataset privado del Hub también funciona: pase su nombre a --dataset_name.

Los modelos base con acceso restringido (Llama, Gemma) necesitan export HF_TOKEN=hf_... antes del entrenamiento.

4. Multi-GPU

En las ofertas multi-GPU, indique el número de procesos:

trl sft ... --num_processes 2

5. Copie el adaptador

El adaptador se guarda en el directorio de salida:

rsync -avz ubuntu@203.0.113.42:~/runs/qwen7b-lora/ ./qwen7b-lora/

Luego seleccione End session. Los checkpoints, las cachés y el modelo base se eliminan con la máquina.

Referencia: CLI de TRL, integración con PEFT.

Forma parte de un caso de uso: Fine-tuning, con lo que garantiza una sesión.

Los resultados aparecen mientras escribe. Las flechas permiten recorrerlos.