XTuner学习
一、XTuner简单介绍
XTuner:大模型微调的高效实战工具
一、核心定位与技术亮点
1. 产品定位
XTuner是由上海人工智能实验室(Shanghai AI Lab)开发的一款开源大模型微调工具库,专注于降低大语言模型(LLM)和多模态模型(VLM)微调的门槛。其设计目标是让开发者在有限硬件资源(如单卡8GB显存)下,也能高效完成模型优化,支持从训练到部署的全流程。
2. 技术优势
- 硬件适配性强:
- 单卡8GB显存即可微调70亿参数(7B)模型,支持多节点扩展至700亿参数以上模型。
- 兼容NVIDIA 20系列及以上显卡,优化显存利用。
- 高性能优化:
- 集成Flash Attention(并行化注意力计算)、Triton内核(高性能算子)和DeepSpeed ZeRO(显存优化策略),提升训练吞吐量。
- 算法支持全面:
- 提供QLoRA(量化LoRA,显存占用更低)、LoRA(低秩适配)和全参数微调三种模式,适配不同需求。
- 支持增量预训练(学习新知识)、指令微调(对话模板构建)和座席微调(角色认知强化)。
- 数据处理灵活:
- 支持JSON、CSV等多格式数据集,通过多样本拼接优化GPU利用率,提升变长序列处理效率。
二、核心功能与应用场景
1. 主要功能
- 一键式配置:内置多种预训练模型(如InternLM、Llama 2、ChatGLM)的配置模板,用户可通过命令行快速启动微调任务。
- 全流程支持:涵盖数据预处理、模型训练、评估与部署,支持与部署工具(如LMDeploy)无缝集成。
- 多模态支持:适配LLaVA等视觉-语言模型,支持图文理解与生成任务。
2. 典型应用场景
- 个性化助手开发:通过指令微调构建垂直领域对话机器人(如医疗问诊、法律咨询服务)。
- 行业模型定制:结合增量预训练提升模型在特定领域(如金融、医疗)的专业性。
- 低成本长文本处理:利用显存优化技术处理超长文本(如百万级token序列)。
三、用户评价与市场对比
1. 用户反馈
- 优势:被赞为“单卡低成本微调神器”,尤其适合初创团队或学术研究。社区认可其文档完善性(提供详细教程)和模型兼容性(支持主流开源模型)。
- 局限性:部分用户反馈与特定模型(如部分闭源模型)的模板兼容性需进一步优化。
2. 竞品对比
工具 | XTuner | Unsloth | LLaMA-Factory |
---|---|---|---|
硬件适配 | 单卡8GB显存支持7B模型,扩展性强 | 显存优化更激进,短序列速度更快 | 支持QLoRA,硬件门槛较低 |
长序列支持 | 支持百万级token训练,集成ZeRO策略 | 短序列优势显著,长序列扩展性较弱 | 依赖配置文件,长序列支持有限 |
算法多样性 | QLoRA/LoRA/全参数微调 | 聚焦速度优化,算法选择较少 | 以QLoRA为主,功能较单一 |
社区生态 | 开源活跃,教程丰富,团队响应快 | 开源但社区活跃度较低 | 功能迭代快,但文档支持较弱 |
---------------------------------------- 以下为Linux环境ubuntu22.04,windows环境不行---------------------------
二、创建环境
步骤 0. 使用 conda 先构建一个 Python-3.10 的虚拟环境
conda create --name xtuner python=3.10 -y
conda activate xtuner
#####
cd /mnt/workspace/Anaconda3/etc
sudo vi /etc/profile
export PATH=$PATH:/mnt/workspace/Anaconda3/bin
source ./profile.d/conda.sh
conda --version
二、安装 XTuner
步骤 1. 安装 XTuner
方案a: 通过 pip 直接安装
pip install -U 'xtuner[deepspeed]'
方案b: 从源码安装
git clone https://github.com/InternLM/xtuner.git
cd xtuner
pip install -e '.[deepspeed]'
xtuner) root@dsw-986081-844988d967-76t98:/mnt/workspace/demo06/xtuner# pip install -e '.[deepspeed]'
pip install -e '.[deepspeed]'之前需要修改为如下版本,不然会报错。
三、下载模型
- 使用modelscope下载预训练模型(以
Qwen1.5-0.5B-Chatt
为例):
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen1.5-0.5B-Chat',cache_dir='/root/llm/Qwen1.5-0.5B-Chat')
四、 微调配置
- 复制配置文件:
将xtuner\xtuner\configs\qwen\qwen1_5\qwen1_5_0_5b_chat\qwen1_5_0_5b_chat_qlora_alpaca_e3.py
复制到根目录。 - 修改关键配置:
# 预训练模型路径
pretrained_model_name_or_path = '/root/llm/Qwen1.5-0.5B-Chat'
# 微调数据文件路径
data_files = '/root/public/data/target_data.json'
# 最大文本长度
max_length = 512
# 批大小
batch_size = 2
# 最大训练轮数
max_epochs = 3
# 验证数据示例
evaluation_inputs = [
'只剩一个心脏了还能活吗?', '爸爸再婚,我是不是就有了个新娘?',
'樟脑丸是我吃过最难吃的硬糖有奇怪的味道怎么还有人买',
'马上要上游泳课了,昨天洗的泳裤还没干,怎么办',
'我只出生了一次,为什么每年都要庆生'
]
# 数据集加载配置
dataset = dict(type=load_dataset, path="json", data_files=data_files)
dataset_map_fn = None
绝对路径
如果是需要批量训练
# dataset.json可按照LLama Factory的dataset_info.json配置
alpaca_en_path = r"D:\data\dataset.json"
dataset=dict(type=load_dataset, path=alpaca_en_path)
dataset_map_fn=alpaca_map_fn
五、微调训练
- 启动微调脚本:
绝对路径 不然找不到
xtuner train xtuner\xtuner\configs\qwen\qwen1_5\qwen1_5_0_5b_chat\qwen1_5_0_5b_chat_qlora_alpaca_e3.py
比如说:
(xtuner) root@dsw-986081-844988d967-76t98:/mnt/workspace/demo06# xtuner train /mnt/workspace/demo06/qwen1_5_0_5b_chat_qlora_alpaca_e3.py
如下为训练正常启动
六、 模型转换
- 将PTH模型转换为HuggingFace格式:
xtuner convert pth_to_hf ${FINETUNE_CFG} ${PTH_PATH} ${SAVE_PATH}
# 示例:
xtuner convert pth_to_hf qwen1_5_0_5b_chat_qlora_alpaca_e3.py ./iter_2000.pth /mnt/workspace/llm
七、 模型合并(可选)
- 合并LoRA/QLoRA适配器与原LLM参数:
xtuner convert merge ${LLM} ${LLM_ADAPTER} ${SAVE_PATH}
八、附:资源链接
- X-Tuner中文文档:https://xtuner.readthedocs.io/zh-cn/latest/index.html
中途中断训练
修改下面的值
load_from = None
比如说你在iter_2000.pth中断了,那么可以继续从这里开始训练
load_from=\qwen1_5_0_5b_chat_qlora_alpaca_e3\iter_2000.pth