> 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-ru/obuchenie/axolotl-training.md).

# Универсальное дообучение Axolotl

YAML-управляемое дообучение LLM с Axolotl на Clore.ai — LoRA, QLoRA, DPO, multi-GPU

Axolotl объединяет HuggingFace Transformers, PEFT, TRL и DeepSpeed в единый интерфейс на основе YAML. Вы задаёте модель, датасет, метод обучения и гиперпараметры в одном конфигурационном файле — затем запускаете всё одной командой. Для стандартных рабочих процессов скрипты на Python не требуются.

{% hint style="success" %}
Все примеры работают на GPU-серверах, арендованных через [маркетплейс CLORE.AI](https://clore.ai/marketplace).
{% endhint %}

## Ключевые особенности

* **Только конфигурация YAML** — задайте всё в одном файле, Python не нужен
* **Все методы обучения** — LoRA, QLoRA, полная донастройка, DPO, ORPO, KTO, RLHF
* **Многогпу из коробки** — DeepSpeed ZeRO 1/2/3 и FSDP одним флагом
* **Пакетирование примеров** — объединяйте короткие примеры, чтобы заполнить длину последовательности, прирост пропускной способности в 3–5×
* **Flash Attention 2** — автоматическая экономия VRAM на поддерживаемом оборудовании
* **Широкая поддержка моделей** — Llama 3.x, Mistral, Qwen 2.5, Gemma 2, Phi-4, DeepSeek, Falcon
* **Встроенные форматы датасетов** — alpaca, sharegpt, chat\_template, completion и custom

## Требования

| Компонент | Минимум        | Рекомендуется        |
| --------- | -------------- | -------------------- |
| GPU       | RTX 3060 12 ГБ | RTX 4090 24 ГБ (×2+) |
| VRAM      | 12 ГБ          | 24+ ГБ               |
| ОЗУ       | 16 ГБ          | 64 ГБ                |
| Диск      | 50 ГБ          | 100 ГБ               |
| CUDA      | 12.8+          | 12.8+                |
| Python    | 3.10           | 3.11                 |

**Цены Clore.ai:** RTX 4090 ≈ $0.14–0.42/ч · RTX 3090 ≈ $0.07–0.21/ч · RTX 3060 ≈ $0.03–0.07/ч

## Быстрый старт

### 1. Установите Axolotl

```bash
# Клонируйте и установите
git clone https://github.com/OpenAccess-AI-Collective/axolotl.git
cd axolotl

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

Или используйте Docker-образ (рекомендуется для воспроизводимости):

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

### 2. Создайте конфигурационный файл

Сохраните это как `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. Запустите обучение

```bash
# Одна GPU
accelerate launch -m axolotl.cli.train config.yml

# Многогпу (все доступные GPU)
accelerate launch --multi_gpu -m axolotl.cli.train config.yml
```

Прогресс обучения выводится в stdout и при необходимости в Weights & Biases.

## Подробный разбор конфигурации

### Форматы датасетов

Axolotl нативно поддерживает несколько форматов входных данных:

```yaml
# В стиле Alpaca (instruction / input / output)
datasets:
  - path: yahma/alpaca-cleaned
    type: alpaca

# Многоходовый чат ShareGPT
datasets:
  - path: anon8231489123/ShareGPT_Vicuna_unfiltered
    type: sharegpt
    conversation: chatml

# Шаблон чата (автоопределение по tokenizer)
datasets:
  - path: HuggingFaceH4/ultrachat_200k
    type: chat_template
    field_messages: messages
    message_field_role: role
    message_field_content: content

# Локальный файл JSONL
datasets:
  - path: /workspace/data/my_dataset.jsonl
    type: alpaca
    ds_type: json
```

### Многогпу с DeepSpeed

Создайте `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
}
```

Добавьте в вашу конфигурацию:

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

Затем запустите:

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

### Согласование DPO / ORPO

```yaml
base_model: meta-llama/Meta-Llama-3.1-8B-Instruct
rl: dpo
# или: 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
```

### Полная донастройка (без LoRA)

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

# Без адаптера, без квантизации
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  # требуется для полной донастройки 8B+
```

## Примеры использования

### Инференс после обучения

```bash
# Запустить интерактивный инференс
accelerate launch -m axolotl.cli.inference config.yml \
  --lora_model_dir /workspace/axolotl-output
```

### Слить LoRA в базовую модель

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

### Предобработка датасета (проверка перед обучением)

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

Это токенизирует и проверяет датасет. Полезно для выявления ошибок формата до длительного запуска обучения.

## Справочник по использованию VRAM

| Модель        | Метод      | GPU | VRAM/GPU | Конфигурация             |
| ------------- | ---------- | --- | -------- | ------------------------ |
| Llama 3.1 8B  | QLoRA 4bit | 1   | \~12 ГБ  | r=32, seq\_len=2048      |
| Llama 3.1 8B  | LoRA 16bit | 1   | \~20 GB  | r=16, seq\_len=2048      |
| Llama 3.1 8B  | Полное     | 2   | \~22 ГБ  | DeepSpeed ZeRO-3         |
| Qwen 2.5 14B  | QLoRA 4bit | 1   | \~16 ГБ  | r=16, seq\_len=2048      |
| Llama 3.3 70B | QLoRA 4bit | 2   | \~22 ГБ  | r=16, seq\_len=2048      |
| Llama 3.3 70B | Полное     | 4   | \~40 ГБ  | DeepSpeed ZeRO-3+offload |

## Советы

* **Всегда включайте `sample_packing: true`** — самое большое улучшение пропускной способности (3–5× на коротких датасетах)
* **Используйте `flash_attention: true`** на GPU Ampere+ для экономии VRAM на 20–40%
* **Начните с QLoRA** для экспериментов переключайтесь на полную донастройку только тогда, когда качество LoRA выходит на плато
* **Установите `val_set_size: 0.02`** для мониторинга переобучения во время обучения
* **Сначала предобработайте** — запустите `axolotl.cli.preprocess` чтобы проверить формат данных перед запуском длительного обучения
* **Используйте Docker-образ** для воспроизводимых окружений — это позволяет избежать конфликтов зависимостей
* **`lora_target_linear: true`** применяет LoRA ко всем линейным слоям, обычно лучше, чем нацеливаться только на attention

## Устранение неполадок

| Проблема                                  | Решение                                                                  |
| ----------------------------------------- | ------------------------------------------------------------------------ |
| `OutOfMemoryError`                        | Уменьшите `micro_batch_size` до 1, включите `gradient_checkpointing`     |
| Ошибки формата датасета                   | Запускайте `python -m axolotl.cli.preprocess config.yml` для отладки     |
| `sample_packing` медленно на первой эпохе | Нормально — начальный расчёт пакетирования выполняется один раз          |
| Обучение на нескольких GPU зависает       | Проверьте NCCL: `export NCCL_DEBUG=INFO`, убедитесь, что видны все GPU   |
| `flash_attention` ошибка импорта          | Установите: `pip install flash-attn --no-build-isolation`                |
| Потеря не уменьшается                     | Уменьшите LR до 1e-4, увеличьте warmup, проверьте качество датасета      |
| Ошибка соединения WandB                   | Запускайте `wandb login` или установите `wandb_project:` в пустую строку |

## Ресурсы

* [GitHub Axolotl](https://github.com/OpenAccess-AI-Collective/axolotl)
* [Примеры конфигураций](https://github.com/OpenAccess-AI-Collective/axolotl/tree/main/examples)
* [маркетплейс 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-ru/obuchenie/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.
