Axolotl大模型微调框架

微调大型语言模型似乎一直是只有研究实验室或大公司才能做到的事情。

依赖项众多、配置文件混乱、GPU 问题以及难以解读的 CUDA 错误。

然后我偶然发现了 Axolotl,一个可以处理大部分繁重工作的开源框架。

它免费、灵活,而且通常不会让您感到紧张。

我会用我希望有人向我解释的方式向您解释它。

1、Axolotl 究竟是什么?

它本质上是一个用于教授 LLM 新技巧的工具箱。你可以将它用于 LLaMA、Mistral、Mixtral、GPT-OSS、Pythia 等模型——任何你能想到的模型。

它甚至支持多模态内容,例如图像和音频(而不仅仅是文本)。

它还支持 LoRA、QLoRA、偏好调整、RLHF 等现代训练技术。

但最棒的是?你无需费力地处理五个不同的脚本和自定义代码。你可以用一个 YAML 文件管理整个流程——训练、预处理、评估和推理。

没错,只需一个配置。在这里修改一行,在那里调整一个适配器,你就可以运行不同类型的训练。

2、安装

如果你像我一样,你至少遇到过一次 Python 安装失败的情况。Axolotl 旨在让安装过程变得轻松无痛。

两种安装方式:

选项 1:Pip

pip3 install -U packaging==23.2 setuptools==75.8.0 wheel ninja
pip3 install --no-build-isolation axolotl[flash-attn,deepspeed]

# grab some example configs
axolotl fetch examples
axolotl fetch deepspeed_configs

选项 2:Docker

docker run --gpus '"all"' --rm -it axolotlai/axolotl:main-latest

如果你是新手,请使用 Docker。说真的,它可以为您节省大量时间。

3、我的首次测试运行

我想了解它到底有多简单,所以我在一个小型模型(10 亿个参数——足够小,可以在大多数现代 GPU 上运行)上尝试了 LoRA 微调。

命令如下:

axolotl fetch examples
axolotl train examples/llama-3/lora-1b.yml

然后……就成功了。模型加载完毕,数据集准备好,训练循环开始,我无需再费心设置 CUDA 路径或环境变量。

就在那时,我意识到这个工具真的有用。

4、深入了解配置

这是一个简短的 YAML 配置,它控制着一切:

base_model: NousResearch/Llama-3.2-1B

load_in_8bit: true
adapter: lora
datasets:
  - path: teknium/GPT4-LLM-Cleaned
    type: alpaca
output_dir: ./outputs/lora-out

神奇的部分:

  • load_in_8bit: true + adapter: lora → LoRA 微调。
  • 删除这些行 → 完全微调。
  • 切换到 load_in_4bit: true + adapter: qlora → QLoRA 训练。

一个文件,不同的结果。很简单。

5、使用我自己的数据进行训练

测试运行后,我想尝试一些真实的东西,所以我创建了一个包含正面和负面电影评论的小型数据集。它看起来像这样:

{"instruction": "Classify this text", "input": "I love this!", "output": "positive"}
{"instruction": "Classify this text", "input": "Not good at all", "output": "negative"}

然后我调整了配置:

base_model: NousResearch/Nous-Hermes-llama-1b-v1

load_in_8bit: true
adapter: lora
micro_batch_size: 2
num_epochs: 3
learning_rate: 0.0003
datasets:
  - path: my_data.jsonl
    type: alpaca

然后开始训练:

axolotl train my_training.yml

大约十分钟后,模型就自信地对我的测试句子进行了分类。这感觉太疯狂了——就像我刚刚从头开始构建了自己的小型情感模型一样。

6、玩转模型

你可能想知道:“很酷,但该如何使用它?”

两个快捷方式:

1、命令行:

axolotl inference my_training.yml --lora-model-dir="./outputs/lora-out"

2、Gradio 用户界面:

axolotl inference my_training.yml --lora-model-dir="./outputs/lora-out" --gradio

Gradio 界面提供了一个简洁的小聊天窗口。我随意输入了一些句子,经过微调的模型就像天生就是分类器一样给出了答案。

7、实用技巧

我尝试过的一些其他技巧:

首先预处理一个大数据集:

axolotl preprocess my_training.yml

将 LoRA 权重合并回基础模型:

axolotl merge-lora my_training.yml --lora-model-dir="./outputs/lora-out"

如果您想要一个独立的模型,而不是将 LoRA 适配器分开,那么第二个技巧非常有用。

8、结束语

微调曾经被认为是只有拥有 A100 集群访问权限的博士才能做到的事情。

Axolotl 彻底颠覆了这一点。

如果你拥有一个好的 GPU 和一个数据集,你实际上可以训练自己的专用 LLM,而不会迷失在样板代码中。

我从一个玩具数据集开始,但相同的工作流程可以扩展到更大的模型、多个 GPU,甚至云训练。配置保持不变——你只需增加资源即可。

微调的门槛已经大大降低了。这真是令人兴奋。


原文链接:Axolotl: Fine-Tune Large Language Models in Minutes (Free & Open Source)

汇智网翻译整理,转载请标明出处