Axolotl 通用微调

在 Clore.ai 使用 Axolotl 进行基于 YAML 的 LLM 微调——支持 LoRA、QLoRA、DPO 与 多 GPU

Axolotl 将 HuggingFace Transformers、PEFT、TRL 和 DeepSpeed 封装到一个由 YAML 驱动的单一接口中。您可在一个配置文件中定义模型、数据集、训练方法和超参数 —— 然后通过单个命令启动。标准工作流程无需 Python 脚本。

circle-check

主要特性

  • 仅 YAML 配置 — 在一个文件中定义所有内容,无需 Python

  • 所有训练方法 — LoRA、QLoRA、完整微调、DPO、ORPO、KTO、RLHF

  • 开箱即用的多 GPU — 通过一个标志启用 DeepSpeed ZeRO 1/2/3 和 FSDP

  • 样本打包 — 将短示例串联以填满序列长度,吞吐量提升 3–5×

  • Flash Attention 2 — 在支持的硬件上自动节省显存

  • 广泛的模型支持 — Llama 3.x、Mistral、Qwen 2.5、Gemma 2、Phi-4、DeepSeek、Falcon

  • 内置数据集格式 — alpaca、sharegpt、chat_template、completion 以及自定义

要求

组件
最低
推荐

GPU

RTX 3060 12 GB

RTX 4090 24 GB(×2 及以上)

显存

12 GB

24+ GB

内存

16 GB

64 GB

磁盘

50 GB

100 GB

CUDA

11.8

12.1+

Python

3.10

3.11

Clore.ai 价格: RTX 4090 约 $0.5–2/天 · RTX 3090 约 $0.3–1/天 · RTX 3060 约 $0.15–0.3/天

快速开始

1. 安装 Axolotl

或使用 Docker 镜像(推荐用于可重复性):

2. 创建配置文件

将此保存为 config.yml:

3. 启动训练

训练进度日志输出到 stdout,并可选择发送到 Weights & Biases。

配置深度解析

数据集格式

Axolotl 原生支持多种输入格式:

使用 DeepSpeed 的多 GPU

创建 deepspeed_zero2.json:

添加到您的配置:

然后启动:

DPO / ORPO 对齐

完整微调(无 LoRA)

使用示例

训练后推理

将 LoRA 合并到基础模型

预处理数据集(在训练前验证)

这会对数据集进行分词和验证。对于在长时间训练前捕获格式错误很有用。

显存使用参考

A100
方法
GPU 数量
每 GPU 显存
配置

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

完整

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

完整

4

~40 GB

DeepSpeed ZeRO-3+offload

提示

  • 始终启用 sample_packing: true — 单次最大的吞吐量提升(在短数据集上 3–5×)

  • 使用 flash_attention: true 在 Ampere 及更高架构 GPU 上可节省 20–40% 显存

  • 从 QLoRA 开始 用于实验,只有当 LoRA 质量趋于平台期时再切换到完整微调

  • 设置 val_set_size: 0.02 以在训练期间监控过拟合

  • 先预处理 — 运行 axolotl.cli.preprocess 以在开始长时间运行前验证数据格式

  • 使用 Docker 镜像 以获得可重复的环境 — 避免依赖冲突

  • lora_target_linear: true 将 LoRA 应用于所有线性层,通常比仅针对注意力层更好

# 使用固定种子以获得一致结果

问题
解决方案

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

损失未降低

将学习率降低到 1e-4,增加预热步骤,检查数据集质量

WandB 连接错误

运行 wandb login 或设置 wandb_project: 为空字符串

资源

最后更新于

这有帮助吗?