Axolotl 微调教程 2026

📘 教程 2026-08-13 · 更新于 2026-11-03 约 10 分钟阅读

训练脚本越写越长,最后变成五百行样板代码,还不可复现。Axolotl 的思路是把所有训练决策收进一个 YAML:数据、量化、LoRA 秩、打包、并行策略,全是配置项。这篇给一份能跑的最小配置和运行命令。

📜 目录

Axolotl 微调教程 2026:配置文件驱动的 LLM 训练实战

训练脚本写着写着就变成五百行样板代码:数据加载、模板拼接、量化、梯度累积、checkpoint、日志,每换一个模型重抄一遍,还不敢保证上次跑的和这次一样。

Axolotl 的解法是把所有训练决策收进一个 YAML。想要 LoRA?配置里写。想要 4-bit?两行。序列打包、梯度检查点、对话模板、DeepSpeed 策略,全是配置项。好处不只是短:整套训练可以进 Git,能 diff、能回滚、能在代码评审里被同事看懂。

一、这套东西适合谁

如果你只是单卡训一次 LoRA、要最快出结果,Unsloth 更省事。Axolotl 赢在可控和可复现。

二、一份真能跑的 QLoRA 配置

存成 config.yml:

base_model: Qwen/Qwen2.5-7B-Instruct
load_in_4bit: true

adapter: lora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_linear: true

datasets:
  - path: data/train.jsonl
    type: alpaca
val_set_size: 0.05
dataset_prepared_path: last_run_prepared

sequence_len: 2048
sample_packing: true
pad_to_sequence_len: true

micro_batch_size: 2
gradient_accumulation_steps: 4
num_epochs: 1
optimizer: adamw_torch
lr_scheduler: cosine
learning_rate: 2e-4
warmup_ratio: 0.05

gradient_checkpointing: true
flash_attention: true

output_dir: ./out

逐项说清关键几个:

配置项 作用 常用值
load_in_4bit 基座模型 4-bit 加载(QLoRA) true;显存充足可关掉做 16bit LoRA
lora_r / lora_alpha 适配器容量与缩放 16/32;难题升到 32/64
lora_target_linear 给所有线性层挂适配器 true,比只挂 q/v 效果好得多
sequence_len 训练序列长度 2048 起,显存吃紧降到 1024
sample_packing 把多条短样本压进一条序列 true,吞吐提升明显
micro_batch_size × gradient_accumulation_steps 等效 batch 乘起来 8-16
learning_rate 学习率 LoRA 用 2e-4,全参用 2e-5
gradient_checkpointing 用时间换显存 true,长序列必开
flash_attention 注意力加速与省显存 硬件支持就开

sample_packing 是最容易被忽略的性能项。指令数据大多只有一两百 token,不打包的话一条序列 2048 的位置大半是 padding,GPU 在算空。打包把多条样本拼进一条,吞吐能明显上去。副作用是每个 step 的样本数不再固定,loss 曲线的解读方式要跟着变。

三、安装和运行

git clone https://github.com/axolotl-ai-cloud/axolotl
cd axolotl
pip install -e .
pip install -U flash-attn --no-build-isolation

# 先预处理数据,把 tokenize 结果缓存下来
axolotl preprocess config.yml

# 开始训练
accelerate launch -m axolotl.cli.train config.yml

单卡直接 accelerate launch 就行;多卡在同一命令前加 accelerate config 走一遍配置,或在 YAML 里指定 deepspeed: deepspeed_configs/zero3.json。

训练完合并适配器:

axolotl merge-lora config.yml
# 旧版本命令:python -m axolotl.cli.merge_lora config.yml

合并出来的是完整权重,之后转 GGUF 给 Ollama,或转 AWQ 给 vLLM。

四、数据格式:type 决定解析方式

datasets 里的 type 不是随便填的,它决定字段怎么被读:

type 需要的字段 用在哪
alpaca instruction / input / output 最常见的指令数据
sharegpt conversations(含 from/value) 多轮对话
chat_template messages(role/content) 直接用模型自带模板,推荐
completion text 纯文本继续预训练

多轮对话优先用 chat_template,框架会调模型自己的模板拼序列,省掉手写特殊标记的错。配 train_on_inputs: false 只对回答部分算 loss,避免模型学着复述问题。

数据质量的门槛比格式更硬:500-5000 条自洽的样本,胜过几万条风格不一致的。先标 100 条、跑一个 epoch、看输出,再决定要不要标全集——这个顺序能省掉大量返工。

五、判断训练是否有效

不要只看 loss。按这个顺序验:

  1. 训练前留出 50-100 条不参与训练的样本,同一批提示词在基座和微调后模型上各跑一遍,人工比对。
  2. 看 loss 是否在合理区间下降。跌到 0.1 以下通常意味着背答案。
  3. 抽 20 条训练集内的样本重跑,看是否变成逐字复读。
  4. 混几条完全无关的问题,看通用能力有没有明显退化。

这四步做下来,能区分"真的学会了"和"记住了训练集"。

六、什么时候选 Axolotl,什么时候不选

场景 建议
团队协作、配置要进 Git Axolotl
多卡/多机、FSDP、DeepSpeed Axolotl
单卡快速试一次 LoRA Unsloth 更快
要写自定义训练循环 直接用 TRL/PyTorch

常见问题

Q:配置项总报未知字段怎么办? A:Axolotl 的配置结构在小版本间改过(比如 adapter 相关字段的命名)。报错时对照仓库里 examples/ 下同任务的最新 YAML,比翻旧博客快。

Q:显存不够怎么调? A:顺序是:降 sequence_len → 降 micro_batch_size 并提高 gradient_accumulation_steps → 确认 load_in_4bit: true → 关 flash_attention(反而可能更省)。不要一上来降 lora_r,那是牺牲效果。

Q:训练中断了能续吗? A:可以,accelerate launch -m axolotl.cli.train config.yml --resume_from_checkpoint ./out/checkpoint-500。中断续训依赖 checkpoint 目录完整,别手动删里面的文件。

Q:怎么知道用了多少 token、多少步? A:启动日志会打印样本数、打包后的步数和有效 batch,先看这三项对不对,再看 loss。

Q:能微调多模态模型吗? A:支持部分视觉语言模型,配置项和纯文本不同,以官方 examples 里的多模态配置为准。

注:Axolotl 配置字段随版本演进,本文示例对应 2026 年的常见结构,实际运行请以仓库 examples 与官方文档为准;显存与吞吐数字随硬件、序列长度变化。

相关文章

延伸阅读 · 含推广链接

API 账单分散在几家平台时,续费和管理都费神。合到一个账号下,成本和额度一眼看得清。

合并到一个账号 →

相关文章
2026-07-19
本地知识库AI问答:用Ollama打造私密知识助手
2026-08-01
Perplexity AI搜索API教程
2026-08-14
统一 LLM API 网关 2026:LiteLLM、one-api、new-api 对比
2026-07-26
自托管AI入门套件
2026-08-11
Ollama vs llama.cpp 2026:本地大模型运行时到底选哪个
2026-08-28
联盟营销是怎么赚钱的?优惠券站背后的商业模式

本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。

💬 评论 (0)

暂无评论,来说两句吧~

登录后评论