Axolotl 大模型微调实战教程:4条命令跑通首次训练
【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl
Axolotl 是一个开源 LLM 微调框架,用一份 YAML 配置文件即可控制数据加载、LoRA 训练、量化与评估的完整流程。本文从安装到产出首个微调结果,带你完整跑通一遍,并讲透三个关键配置项。
先看效果:3分钟跑通演示
先拿到结果:4 条命令,就能对 Llama-3.2-1B 模型完成一次 LoRA 微调(LoRA 是一种低秩适配方法,只训练少量新增参数,不改动原始模型权重)。
axolotl fetch examples # 拉取官方示例配置 axolotl train examples/llama-3/lora-1b.yml # 直接训练训练启动后,终端会滚动输出 loss 与步数,结束时在./outputs/lora-out目录生成 LoRA 权重。多卡环境下,每个节点的 GPU 占用可以这样观察:
跑通后想深入理解每一步在做什么,可以从 docs/getting-started.qmd 开始读。
它到底解决了什么问题
Axolotl 的价值,在于把"自己写训练代码"压缩成"写一份配置"。
一份 YAML 管全程
不做框架的话,微调需要自己处理数据 collator、优化器、检查点保存、混合精度这些环节,且每换一个模型往往要改代码。Axolotl 把这些统一收敛到一个 YAML 里:同一份配置可以直接贯穿数据预处理、训练、量化、推理全流程,换模型通常只需改base_model和个别适配项。
单卡也能训起来
全量微调一个 8B 模型需要多卡集群,而 LoRA 只训练适配器层,QLoRA(在 4 位量化基座上再做 LoRA)进一步压低了显存下限。官方 Quick Start 用的就是 1B 模型加 LoRA 的组合,单张消费级显卡(Ampere 架构及以上)即可运行。
环境搭建:一条命令起步
安装只需三步:建虚拟环境、装包、拉示例配置。官方推荐 uv 管理环境,要求 Python 3.11 及以上(推荐 3.12)、PyTorch 2.11 及以上、NVIDIA Ampere 或更新的 GPU(也支持 AMD 卡)。
uv venv --python 3.12 source .venv/bin/activate uv pip install --no-build-isolation axolotl[deepspeed] # 含 DeepSpeed 多卡支持如果不想维护本地环境,也可以直接跑官方镜像:docker run --gpus '"all"' --ipc=host --rm -it axolotlai/axolotl:main-latest。
核心配置拆解
YAML 里配置项很多,新手先抓下面三项就够启动,对照表来自官方示例 examples/llama-3/lora-1b.yml。
| 配置项 | 作用 | 推荐值 | 改错会怎样 |
|---|---|---|---|
adapter | 指定训练方式:lora/qlora只训适配器层,不写则全量微调 | lora(1B~8B 模型) | 漏写会按全量微调走,显存需求翻几倍 |
sequence_len | 单条样本参与训练的最大 token 长度 | 1024~2048 | 设太大显存线性上涨容易 OOM;太小则长样本被截断 |
sample_packing | 把多条短样本拼进同一条序列,减少 padding 浪费 | true | 关闭后短文本数据大量时间浪费在计算填充 token 上,速度明显下降 |
另外,显存吃紧时打开gradient_checkpointing: true(梯度检查点:用重算换显存,通常多花约两三成时间换大幅下降的显存占用),1B 模型就能塞进更小的卡。
打包为什么需要防串扰
sample_packing把多条样本拼成一条长序列后,如果不加限制,前面的样本会"看到"后面的样本。pretrain_multipack_attn: true会把注意力掩码按样本边界重置,右图就是重置后的效果:
真实场景演练
场景:继续预训练——不写一行预处理代码,从 Hugging Face 流式拉取大规模语料,训练小模型。对应配置在 examples/streaming/ 目录,以pretrain.yaml为例:
base_model: HuggingFaceTB/SmolLM2-135M pretraining_dataset: - path: HuggingFaceFW/fineweb-edu name: sample-10BT type: pretrain text_column: text split: train streaming_multipack_buffer_size: 10000 # 打包缓冲区,越大越省内存越多 sequence_len: 1024 sample_packing: true pretrain_multipack_attn: true # 防止打包样本间交叉注意力 max_steps: 1000 output_dir: ./outputs/smollm2-135m-pretrain-streamingaxolotl train examples/streaming/pretrain.yaml与常规流程的差别一目了然:
| 环节 | 常规流程 | 流式流程 |
|---|---|---|
| 数据预处理 | 先axolotl preprocess落盘 | 不需要,边加载边训 |
| 磁盘占用 | 完整 tokenized 数据集 | 仅缓冲区大小 |
| 适用语料 | GB 级 | TB 级(如 fineweb-edu) |
训练按save_steps(示例为 250 步)保存检查点,结束后在output_dir得到最终权重,之后可直接用于推理或继续微调。
翻车急救包 🩹
首次运行最容易碰到的四种情况:
| 现象 | 常见原因 | 修法 |
|---|---|---|
| 启动即报 CUDA out of memory | 批次过大或未开梯度检查点 | micro_batch_size降到 1,打开gradient_checkpointing: true,必要时load_in_4bit: true |
| 数据预处理反复报错 | 缓存与配置不同步 | 删除dataset_prepared_path指向的目录(默认last_run_prepared);数据太大可加shards: 20只取一部分 |
| loss 剧烈波动或出现 NaN | 学习率偏高 | 调低learning_rate,把warmup_ratio提到 0.1 左右 |
| Flash Attention 报错不可用 | GPU 早于 Ampere 架构 | 把attn_implementation改为sdpa |
结语
第一次跑通之后,下一步是替换成自己的数据:各模型现成的配置模板在 examples/ 目录,数据集格式说明在 docs/dataset-formats/,多节点与并行进阶可查 docs/multi-node.qmd。遇到更细的报错时,仓库里的 docs/debugging.qmd 给出了单卡、小数据、清缓存的最小化排查方法。完整的代码与发布情况以 Axolotl 官方仓库为准。
【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考