XTuner从入门到放弃
XTuner是由上海人工智能实验室开发的一款高效、灵活的轻量化大语言模型微调工具,支持在仅8GB显存的消费级GPU上对7B及以上参数模型(如InternLM、Llama2、Qwen等)进行低成本微调,兼容QLoRA、DeepSpeed等优化技术,并提供多样化的数据集适配与多模态训练能力。XTuner虽然没有如 LLama Factory 那样清晰明了的界面,但是 XTuner 支持在微调的时候对模
目录
今天来介绍一下大模型的另一款微调框架——XTuner
简介
XTuner是由上海人工智能实验室开发的一款高效、灵活的轻量化大语言模型微调工具,支持在仅8GB显存的消费级GPU上对7B及以上参数模型(如InternLM、Llama2、Qwen等)进行低成本微调,兼容QLoRA、DeepSpeed等优化技术,并提供多样化的数据集适配与多模态训练能力。
XTuner虽然没有如 LLama Factory 那样清晰明了的界面,但是 XTuner 支持在微调的时候对模型进行主观评价。
安装
方案一,不推荐,因为拿不到源码
conda create -n xtuner python=3.10 -y
conda activate xtuner
pip install -U 'xtuner[deepspeed]'
方案二,推荐
conda create -n xtuner python==3.10 -y
conda activate xtuner
git clone https://github.com/InternLM/xtuner.git
将代码拉取下来之后,我这个版本是有一些 bug 的,需要手动进行调整。找到 /xtuner/requirements/runtime.txt 文件,将其中的的环境修改为 torch==2.5.1 torchvision==0.20.1,否则训练时会报错:ModuleNotFoundError: No module named 'triton.ops'。
当然,你也可以暂时不修改,等后续报错了再重新安装一遍环境。修改好之后,继续以下操作:
cd xtuner
pip install -e '.[deepspeed]'
数据格式
XTuner 所支持的微调数据集格式近似于 OpenAI SFT,具体样例如下:
[
{
"conversation": [
{
"input": "",
"output": ""
}
]
},
{
"conversation": [
{
"input": "",
"output": ""
}
]
}
]
使用
本文以 Qwen1.5-1.8B-Chat 为测试模型,数据集为 modelscope 上的 ruozhiba 数据集。
step1:找到文件 /xtuner/xtuner/configs/qwen/qwen1_5/qwen1_5_1_8b_chat/qwen1_5_1_8b_chat_qlora_alpaca_e3.py,复制一份至 /xtuner 下,打开。(这里不建议直接修改源文件,当然,你愿意直接修改源文件也没什么问题)
需要修改的内容如下:
1.pretrained_model_name_or_path 预训练模型的存放绝对路径
2.将 alpaca_en_path 改为 data_files 微调数据存放的绝对路径(可在 /xtuner 下新增一个 data 文件夹存放数据文件)
3.max_length 训练中文本的最大长度
4.batch_size 每一轮训练样本的大小
5.max_epochs 最大训练轮数(建议设置一个较大的值,通过主观评估来判断是否可以停止训练)
6.evaluation_inputs 需要主观验证的问题(参数接受一个字符串数组,里面可以存放多个问题)
7.将 dataset=dict(type=load_dataset, path=alpaca_en_path) 改为 dataset=dict(type=load_dataset, path="json", data_files=data_files)
8.dataset_map_fn 改为 None
step2:从modelscope 上下载 ruozhiba 数据集,并将其转换为上述格式
step3:使用 xtuner train qwen1_5_0_5b_chat_qlora_alpaca_e3.py 开始训练
如果是多卡训练,则使用:NPROC_PER_NODE=2 xtuner train qwen1_5_0_5b_chat_qlora_alpaca_e3.py --deepspeed deepspeed_zero2
如果出现错误:ModuleNotFoundError: No module named 'triton.ops',那么需要将 /xtuner/requirements/runtime.txt 中的环境修改为 torch==2.5.1 torchvision==0.20.1 并重新安装 xtuner 环境

模型在训练若干个 step 后(取决于你的 save_steps 设置多少),会根据你设置的 evaluation_inputs 参数进行回答,当你认为模型的回答符合你的要求时,确认模型保存完毕参数之后(在/xtuner/work_dirs下),便可以使用 ctrl+c 停止训练。(如果自己玩的话,建议用一个小一点的模型,越大的模型越难训练)

训练了三个多小时,算是有点样子了,ctrl+c 停止训练。
step4:将 pth 格式的模型转为 hf
训练之后得到的中间文件存放在 /xtuner-/work_dirs/qwen1_5_1_8b_chat_qlora_alpaca_e3下。这些文件存储了 QLoRA 算法训练过程所更新的参数,而不是模型的全部参数。因此我们需要将这些 .pth 文件转换为 HuggingFace 格式,并合并入原始的语言模型权重中。
转换命令为:xtuner convert pth_to_hf 训练时的脚本 ${pth文件的路径} ${要保存的路径}
xtuner convert pth_to_hf qwen1_5_1_8b_chat_qlora_alpaca_e3.py \
/root/autodl-tmp/tools/xtuner-main/work_dirs/qwen1_5_1_8b_chat_qlora_alpaca_e3/iter_38000.pth \
/root/autodl-tmp/models/Qwen1.5-1.8B-Chat-hf
step5:合并 qlora 与原模型
由于我们使用的是 qlora 微调,因此需要再对模型进行合并。合并命令为:xtuner convert merge LLM ${LLM_ADAPTER} ${SAVE_PATH}
xtuner convert merge /root/autodl-tmp/models/Qwen1.5-1.8B-Chat \
/root/autodl-tmp/models/Qwen1.5-1.8B-Chat-hf \
/root/autodl-tmp/models/Qwen1.5-1.8B-Chat-merged
以上,就得到了一个使用 XTuner 训练的模型。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)