> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-es/entrenamiento/axolotl-training.md).

# Ajuste fino universal Axolotl

Ajuste fino de LLMs impulsado por YAML con Axolotl en Clore.ai: LoRA, QLoRA, DPO, multi-GPU

Axolotl integra Hugging Face Transformers, PEFT, TRL y DeepSpeed en una única interfaz impulsada por YAML. Defines tu modelo, conjunto de datos, método de entrenamiento e hiperparámetros en un solo archivo de configuración — luego lo lanzas con un solo comando. No se requiere scripting en Python para los flujos de trabajo estándar.

{% hint style="success" %}
Todos los ejemplos se ejecutan en servidores GPU alquilados a través de [Marketplace de CLORE.AI](https://clore.ai/marketplace).
{% endhint %}

## Características clave

* **Configuración solo con YAML** — define todo en un solo archivo, no se necesita Python
* **Todos los métodos de entrenamiento** — LoRA, QLoRA, ajuste fino completo, DPO, ORPO, KTO, RLHF
* **Multi-GPU listo para usar** — DeepSpeed ZeRO 1/2/3 y FSDP con una sola bandera
* **Empaquetado de muestras** — concatena ejemplos cortos para completar la longitud de secuencia, mejora del rendimiento de 3–5×
* **Flash Attention 2** — ahorro automático de VRAM en hardware compatible
* **Amplio soporte de modelos** — Llama 3.x, Mistral, Qwen 2.5, Gemma 2, Phi-4, DeepSeek, Falcon
* **Formatos de conjuntos de datos integrados** — alpaca, sharegpt, chat\_template, completion y personalizado

## Requisitos

| Componente | Mínimo         | Recomendado          |
| ---------- | -------------- | -------------------- |
| GPU        | RTX 3060 12 GB | RTX 4090 24 GB (×2+) |
| VRAM       | 12 GB          | 24+ GB               |
| RAM        | 16 GB          | 64 GB                |
| Disco      | 50 GB          | 100 GB               |
| CUDA       | 12.8+          | 12.8+                |
| Python     | 3.10           | 3.11                 |

**Precios de Clore.ai:** RTX 4090 ≈ $0.14–0.42/h · RTX 3090 ≈ $0.07–0.21/h · RTX 3060 ≈ $0.03–0.07/h

## Inicio rápido

### 1. Instala Axolotl

```bash
# Clonar e instalar
git clone https://github.com/OpenAccess-AI-Collective/axolotl.git
cd axolotl

pip install packaging ninja
pip install -e '.[flash-attn,deepspeed]'
```

O usa la imagen de Docker (recomendado para la reproducibilidad):

```bash
docker run --gpus all -it --rm \
  -v /workspace:/workspace \
  winglian/axolotl:main-latest
```

### 2. Crea un archivo de configuración

Guárdalo como `config.yml`:

```yaml
base_model: meta-llama/Meta-Llama-3.1-8B-Instruct
model_type: LlamaForCausalLM
tokenizer_type: AutoTokenizer

load_in_4bit: true
adapter: qlora
lora_r: 32
lora_alpha: 16
lora_dropout: 0.05
lora_target_linear: true

datasets:
  - path: yahma/alpaca-cleaned
    type: alpaca

sequence_len: 2048
sample_packing: true
pad_to_sequence_len: true

wandb_project: axolotl-clore
wandb_name: llama3-qlora

output_dir: /workspace/axolotl-output

gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 1
learning_rate: 2e-4
optimizer: adamw_bnb_8bit
lr_scheduler: cosine
warmup_steps: 10

bf16: auto
flash_attention: true
gradient_checkpointing: true

logging_steps: 10
save_strategy: steps
save_steps: 500
eval_steps: 500

evals_per_epoch:
val_set_size: 0.02
```

### 3. Inicia el entrenamiento

```bash
# GPU única
accelerate launch -m axolotl.cli.train config.yml

# Multi-GPU (todas las GPU disponibles)
accelerate launch --multi_gpu -m axolotl.cli.train config.yml
```

Registra el progreso del entrenamiento en stdout y, opcionalmente, en Weights & Biases.

## Análisis en profundidad de la configuración

### Formatos de conjuntos de datos

Axolotl admite de forma nativa varios formatos de entrada:

```yaml
# Estilo Alpaca (instrucción / entrada / salida)
datasets:
  - path: yahma/alpaca-cleaned
    type: alpaca

# Chat multi-turno de ShareGPT
datasets:
  - path: anon8231489123/ShareGPT_Vicuna_unfiltered
    type: sharegpt
    conversation: chatml

# Plantilla de chat (detección automática desde el tokenizador)
datasets:
  - path: HuggingFaceH4/ultrachat_200k
    type: chat_template
    field_messages: messages
    message_field_role: role
    message_field_content: content

# Archivo JSONL local
datasets:
  - path: /workspace/data/my_dataset.jsonl
    type: alpaca
    ds_type: json
```

### Multi-GPU con DeepSpeed

Crear `deepspeed_zero2.json`:

```json
{
  "bf16": { "enabled": true },
  "zero_optimization": {
    "stage": 2,
    "offload_optimizer": { "device": "cpu" },
    "allgather_partitions": true,
    "allgather_bucket_size": 5e8,
    "reduce_scatter": true,
    "reduce_bucket_size": 5e8,
    "overlap_comm": true,
    "contiguous_gradients": true
  },
  "train_micro_batch_size_per_gpu": "auto",
  "gradient_accumulation_steps": "auto",
  "gradient_clipping": 1.0
}
```

Añade a tu configuración:

```yaml
deepspeed: deepspeed_zero2.json
```

Luego inicia:

```bash
accelerate launch --num_processes 4 -m axolotl.cli.train config.yml
```

### Alineación DPO / ORPO

```yaml
base_model: meta-llama/Meta-Llama-3.1-8B-Instruct
rl: dpo
# o: rl: orpo

datasets:
  - path: argilla/ultrafeedback-binarized-preferences
    type: chat_template.default
    field_messages: chosen
    field_chosen: chosen
    field_rejected: rejected

dpo_beta: 0.1
```

### Ajuste fino completo (sin LoRA)

```yaml
base_model: meta-llama/Meta-Llama-3.1-8B-Instruct

# Sin adaptador, sin cuantización
adapter:
load_in_4bit: false
load_in_8bit: false

learning_rate: 5e-6
micro_batch_size: 1
gradient_accumulation_steps: 8
gradient_checkpointing: true
flash_attention: true
bf16: auto

deepspeed: deepspeed_zero3.json  # requerido para ajuste fino completo de 8B+
```

## Ejemplos de uso

### Inferencia después del entrenamiento

```bash
# Inicia la inferencia interactiva
accelerate launch -m axolotl.cli.inference config.yml \
  --lora_model_dir /workspace/axolotl-output
```

### Combinar LoRA en el modelo base

```bash
accelerate launch -m axolotl.cli.merge_lora config.yml \
  --lora_model_dir /workspace/axolotl-output \
  --output_dir /workspace/merged-model
```

### Preprocesar el conjunto de datos (validar antes del entrenamiento)

```bash
python -m axolotl.cli.preprocess config.yml
```

Esto tokeniza y valida el conjunto de datos. Útil para detectar errores de formato antes de una ejecución de entrenamiento larga.

## Referencia de uso de VRAM

| Modelo        | Método     | GPUs | VRAM/GPU | Configuración            |
| ------------- | ---------- | ---- | -------- | ------------------------ |
| Llama 3.1 8B  | QLoRA 4bit | 1    | \~12 GB  | r=32, seq\_len=2048      |
| Llama 3.1 8B  | LoRA 16bit | 1    | \~20 GB  | r=16, seq\_len=2048      |
| Llama 3.1 8B  | Completo   | 2    | \~22 GB  | DeepSpeed ZeRO-3         |
| Qwen 2.5 14B  | QLoRA 4bit | 1    | \~16 GB  | r=16, seq\_len=2048      |
| Llama 3.3 70B | QLoRA 4bit | 2    | \~22 GB  | r=16, seq\_len=2048      |
| Llama 3.3 70B | Completo   | 4    | \~40 GB  | DeepSpeed ZeRO-3+offload |

## Consejos

* **Actívalo siempre `sample_packing: true`** — la mayor mejora de rendimiento (3–5× en conjuntos de datos cortos)
* **Usa `flash_attention: true`** en GPU Ampere+ para ahorrar 20–40% de VRAM
* **Empieza con QLoRA** para experimentos, cambia a ajuste fino completo solo cuando la calidad de LoRA se estanque
* **Establece `val_set_size: 0.02`** para monitorear el sobreajuste durante el entrenamiento
* **Preprocesa primero** — ejecuta `axolotl.cli.preprocess` para validar el formato de los datos antes de comprometerte con una ejecución larga
* **Usa la imagen de Docker** para entornos reproducibles — evita conflictos de dependencias
* **`lora_target_linear: true`** aplica LoRA a todas las capas lineales, generalmente mejor que apuntar solo a la atención

## Solución de problemas

| Problema                                   | Solución                                                                                                   |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| `OutOfMemoryError`                         | Reduce `micro_batch_size` a 1, habilita `gradient_checkpointing`                                           |
| Errores de formato del conjunto de datos   | Ejecuta `python -m axolotl.cli.preprocess config.yml` para depurar                                         |
| `sample_packing` lento en la primera época | Normal — el cálculo inicial del empaquetado es único                                                       |
| El entrenamiento en varias GPUs se cuelga  | Comprueba NCCL: `export NCCL_DEBUG=INFO`, asegúrate de que todas las GPU sean visibles                     |
| `flash_attention` error de importación     | Instala: `pip install flash-attn --no-build-isolation`                                                     |
| La pérdida no disminuye                    | Reduce la tasa de aprendizaje a 1e-4, aumenta el calentamiento, comprueba la calidad del conjunto de datos |
| Error de conexión de WandB                 | Ejecuta `wandb login` o establece `wandb_project:` a una cadena vacía                                      |

## Recursos

* [GitHub de Axolotl](https://github.com/OpenAccess-AI-Collective/axolotl)
* [Configuraciones de ejemplo](https://github.com/OpenAccess-AI-Collective/axolotl/tree/main/examples)
* [Marketplace de CLORE.AI](https://clore.ai/marketplace)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-es/entrenamiento/axolotl-training.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
