摘要:它本质上是一个用于教授 LLM 新技巧的工具箱。你可以将它用于 LLaMA、Mistral、Mixtral、GPT-OSS、Pythia 等模型——任何你能想到的模型。
微调大型语言模型似乎一直是只有研究实验室或大公司才能做到的事情。
依赖项众多、配置文件混乱、GPU 问题以及难以解读的 CUDA 错误。
然后我偶然发现了 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 ninjapip3 install --no-build-isolation axolotl[flash-attn,deepspeed]# grab some example configsaxolotl fetch examplesaxolotl fetch deepspeed_configsdocker run --gpus '"all"' --rm -it axolotlai/axolotl:main-latest如果你是新手,请使用 Docker。说真的,它可以为您节省大量时间。
我想了解它到底有多简单,所以我在一个小型模型(10 亿个参数——足够小,可以在大多数现代 GPU 上运行)上尝试了 LoRA 微调。
命令如下:
axolotl fetch examplesaxolotl train examples/llama-3/lora-1b.yml然后……就成功了。模型加载完毕,数据集准备好,训练循环开始,我无需再费心设置 CUDA 路径或环境变量。
就在那时,我意识到这个工具真的有用。
这是一个简短的 YAML 配置,它控制着一切:
base_model: NousResearch/Llama-3.2-1Bload_in_8bit: trueadapter: loradatasets: - path: teknium/GPT4-LLM-Cleaned type: alpacaoutput_dir: ./outputs/lora-out神奇的部分:
load_in_8bit: true + adapter: lora → LoRA 微调。删除这些行 → 完全微调。切换到 load_in_4bit: true + adapter: qlora → QLoRA 训练。一个文件,不同的结果。很简单。
测试运行后,我想尝试一些真实的东西,所以我创建了一个包含正面和负面电影评论的小型数据集。它看起来像这样:
{"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-v1load_in_8bit: trueadapter: loramicro_batch_size: 2num_epochs: 3learning_rate: 0.0003datasets: - path: my_data.jsonl type: alpaca然后开始训练:
axolotl train my_training.yml大约十分钟后,模型就自信地对我的测试句子进行了分类。这感觉太疯狂了——就像我刚刚从头开始构建了自己的小型情感模型一样。
你可能想知道:“很酷,但该如何使用它?”
两个快捷方式:
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" --gradioGradio 界面提供了一个简洁的小聊天窗口。我随意输入了一些句子,经过微调的模型就像天生就是分类器一样给出了答案。
我尝试过的一些其他技巧:
首先预处理一个大数据集:
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,甚至云训练。配置保持不变——你只需增加资源即可。
微调的门槛已经大大降低了。这真是令人兴奋。
来源:新缸中之脑一点号