简单来说,XTuner 是一个轻量级、易于使用的、为大语言模型(LLM)设计的微调工具库。
它由上海人工智能实验室(OpenMMLab)开发,是其强大AI工具生态(MMCV, MMEngine等)的一部分。它的核心设计理念是“用一个配置文件搞定一切”,让开发者和研究人员可以极大地简化微调流程。
轻量且用户友好:
xtuner train ...
就能完成。丰富的算法和模型支持:
高性能:
生态联动:
支持自定义:
这是理解XTuner的钥匙。一个典型的XTuner配置文件(以 .py
结尾)包含了微调所需的所有信息,它像一份“配方单”。
一个配置文件通常包含以下几个部分:
model
: 定义你要微调的基础模型和微调方法(如LoRA)。dataset
: 定义你要使用的数据集、数据格式和预处理方式。optimizer
和 param_scheduler
: 定义优化器(如AdamW)和学习率策略。train_dataloader
, val_dataloader
: 定义数据加载的方式。runner
: 运行时的设置,如训练轮次(epochs)、日志记录、模型保存等。XTuner最棒的一点是,它内置了大量预设好的配置文件,覆盖了“不同模型 + 不同算法 + 不同数据集”的各种组合。你几乎总能找到一个与你需求相近的配置作为起点。
这个例子将带你用最少的资源(一张消费级显卡,如RTX 3060 12GB即可)微调一个模型,并与它对话。
确保你有Python环境(推荐3.10+)和支持CUDA的PyTorch。
# 确保PyTorch已安装,且与你的CUDA版本匹配
# 访问 PyTorch官网 获取正确的安装命令: https://pytorch.org/
# 安装基础版XTuner
pip install -U xtuner
# 为了使用QLoRA和FlashAttention等高级功能,安装所有依赖
# 如果遇到网络问题,可以去掉 -i ... 部分
pip install -U 'xtuner[all]' -i https://pypi.tuna.tsinghua.edu.cn/simple
XTuner会自动从HuggingFace Hub下载所需的模型和数据集,你无需手动下载。这个例子我们将使用 internlm/internlm2-chat-1_8b
模型和 oasst1
数据集。
查看所有可用的配置文件:
XTuner提供了一个方便的命令来列出所有内置的配置。
xtuner list-cfg
你会看到一个很长的列表,比如 internlm2_chat_1_8b_qlora_oasst1_e3
,这个名字的含义是:
internlm2_chat_1_8b
: 基础模型是 InternLM2-Chat-1.8Bqlora
: 微调算法是 QLoRAoasst1
: 数据集是 oasst1e3
: 训练3个epoch复制一份配置文件到当前目录:
这是一个好习惯,不要直接修改库里的文件。我们选择 internlm2_chat_1_8b_qlora_oasst1_e3
这个配置。
xtuner copy-cfg internlm2_chat_1_8b_qlora_oasst1_e3 .
执行后,当前目录下会多出一个 internlm2_chat_1_8b_qlora_oasst1_e3_copy.py
文件。你可以打开它看看里面的内容,但对于快速上手,我们暂时不需要修改它。
现在,最激动人心的一步来了!用一行命令启动微调。
# --work-dir 指定了训练日志和模型权重保存的目录
xtuner train ./internlm2_chat_1_8b_qlora_oasst1_e3_copy.py --work-dir ./my_finetuned_model
XTuner会自动开始下载模型和数据集,然后你会看到训练进度条和日志信息。根据你的显卡性能,这个过程可能需要几十分钟到几个小时。
训练完成后,./my_finetuned_model
目录下会生成一个 .pth
文件,这就是我们微调得到的**适配器(Adapter)**权重。
注意:QLoRA等方法并不会生成一个完整的模型,而是生成一个轻量的“补丁”(适配器)。我们需要将它与原模型合并才能使用。
将微调后的适配器权重合并到原始的基础模型中,生成一个完整的、可以直接使用的模型。
# 定义变量,方便复用
export MNT_DIR=${YOUR_MNT_DIR:-/path/to/your/data} # 你想存放HF模型缓存的地方
export SRC_MODEL_PATH=${MNT_DIR}/internlm/internlm2-chat-1_8b # 原始模型路径
export FT_MODEL_PATH=./my_finetuned_model # 微调输出路径
export DST_MODEL_PATH=${FT_MODEL_PATH}/merged_model # 合并后模型的存放路径
# 1. 将 .pth 格式的适配器转换为HuggingFace格式
xtuner convert pth_to_hf ${FT_MODEL_PATH}/iter_555.pth ${FT_MODEL_PATH}/hf_adapter
# 2. 将HuggingFace格式的适配器与原始模型合并
xtuner convert merge ${SRC_MODEL_PATH} ${FT_MODEL_PATH}/hf_adapter ${DST_MODEL_PATH}
执行完毕后,./my_finetuned_model/merged_model
目录里就是一个全新的、经过微调的完整模型了!
现在,来检验一下我们的微调成果吧!
# --prompt-template 指定对话模板,这对于聊天模型很重要
xtuner chat ./my_finetuned_model/merged_model --prompt-template internlm2_chat
启动后,你就可以在终端里输入问题,和自己微调过的模型进行对话了!
user: 你好,介绍一下你自己
assistant: 你好!我是一个由上海人工智能实验室训练的语言模型,InternLM2。我...(模型会给出它的回答)
user: 给我讲一个关于太空旅行的笑话
assistant: ...
输入 exit
即可退出对话。
使用你自己的数据集:
dataset
部分,将 data_files
指向你的数据文件路径。xtuner train
命令。尝试不同的微调方法:
xtuner list-cfg
中寻找其他配置,比如全量参数微调的配置(文件名里通常没有 qlora
或 lora
)。部署与评测:
XTuner通过**“配置文件驱动”和“命令行工具”**,将复杂的大模型微调流程变得标准化和简单化。你只需要:
xtuner list-cfg
, xtuner copy-cfg
)xtuner train
)xtuner convert
)xtuner chat
)希望这份指南能帮助你顺利迈出大模型微调的第一步!
官方资源: