一文跑通XTuner:环境搭建、QLoRA_微调、VLLM
我们用 LLaMA-Factory 完成了多卡训练。还有另一个非常流行的微调框架——XTuner上海 AI Lab 出品走的是配置驱动路线适合需要精细控制训练流程的场景。本篇带你从零搭建 XTuner 环境完成 Qwen/Qwen2.5-1.5B-Instruct 的 QLoRA单卡微调覆盖主线环境搭建 → 配置 → 单卡训练 → 监控/续训 → 转换 → 合并 → 推理 → vLLMXTuner 介绍XTuner是上海 AI Lab 出品的 LLM 微调工具箱通过xtuner train、xtuner list-cfg、xtuner convert等命令完成全流程特色如下特色说明一键安装一键装好 PyTorch、Transformers、DeepSpeed、bitsandbytes 等依赖配置驱动所有训练参数写在 Python 配置文件中代码即配置多机多卡开箱即用torchrun / slurm 双模式与上篇 DeepSpeed 知识完全衔接QLoRA 友好内置 4-bit 量化 LoRA单卡可微调 7B 模型完整转换链PTH → HF → Merge 工具齐全版本说明本篇使用0.1.23——最后一个自带xtuner命令行工具的版本。后续上海 AI Lab 推出了架构不同的新一代训练引擎将在后面章单独讲解。与 LLaMA-Factory 的差异维度LLaMA-FactoryXTuner配置方式WebUI / YAML / CLIPython 配置文件学习曲线上手快需读懂 mmengine 配置自定义空间中等极高可直接改模型结构、训练循环多卡启动自动NPROC_PER_NODEN显式指定适合人群业务应用方算法工程师、研究者想深入研究训练过程选 XTuner。环境准备确保显卡驱动正确安装即可例如在 NVIDIA GPU 设备上nvidia-smi 的 Driver Version 需要大于 550.127.08XTuner 推荐使用conda隔离环境避免依赖冲突。# 创建独立环境python 3.10 兼容性最好conda create --name xtuner-legacy python3.10 -yconda activate xtuner-legacy安装 XTuner3.1 安装依赖pip install xtuner[all]0.1.23这一步会安装 XTuner 及其所有依赖PyTorch、Transformers、DeepSpeed、bitsandbytes 等耗时较长耐心等待。3.2 依赖冲突时的版本修正可选0.1.23会一并安装配套依赖。若训练或导入时报版本不兼容可手动锁定到稳定组合pip install transformers4.36.0,!4.38.0,!4.38.1,!4.38.2,5.0.0 peft0.4.0,0.14.03.3 验证安装xtuner version正常输出版本号0.1.23说明安装成功(xtuner-legacy) rootautodl-container:~/autodl-tmp# xtuner version07/12 20:59:53 - mmengine - INFO - 0.1.23 plaintext xtuner list-cfg能列出内置配置文件说明 CLI 可用下载模型XTuner 支持 HuggingFace / ModelScope / OpenXLab 多个模型源本篇用ModelScope。from modelscope import snapshot_download# 下载 Qwen/Qwen2.5-1.5B-Instructmodel_dir snapshot_download( Qwen/Qwen2.5-1.5B-Instruct, cache_dir/root/autodl-tmp/model/)print(f模型已下载到{model_dir})下载完成后模型路径/root/autodl-tmp/model/Qwen/Qwen2.5-1.5B-Instruct后续配置文件中pretrained_model_name_or_path填这个路径。准备微调数据XTuner 默认支持Alpaca 格式与 LLaMA-Factory 一致[ { conversation: [ { input: 马上要上游泳课了昨天洗的泳裤还没干怎么办, output: 游泳时泳裤本来就会湿不用晾干。 } ] }]把文件命名为target_data.json放在自己的数据目录下(完整数据集可以问我要)mkdir -p /root/dataset/xtuner# 上传或拷贝 target_data.json 到此目录ls /root/dataset/xtuner/target_data.json微调配置文件核心XTuner 的核心是一份 Python 配置文件——所有训练参数都写在这里。6.1 复制官方模板# 查看所有内置配置xtuner list-cfg# 复制一个接近的 Qwen QLoRA 模板到当前目录cd /rootxtuner copy-cfg qwen1_5_1_8b_chat_qlora_alpaca_e3 .# 复制后会生成 *_copy.py改个更直观的名字mv qwen1_5_1_8b_chat_qlora_alpaca_e3_copy.py qwen2_5_1_5b_instruct_qlora_alpaca_e3.py官方提供了几十个预置模板覆盖 Qwen / InternLM / Llama 等主流模型 LoRA / QLoRA / 全参微调。用xtuner list-cfg | grep qwen可快速筛选 Qwen 相关配置。6.2 修改配置PART 1路径与超参数打开qwen2_5_1_5b_instruct_qlora_alpaca_e3.py只需要改 PART 1######################################################################## PART 1 Settings ######################################################################### Modelpretrained_model_name_or_path /root/autodl-tmp/model/Qwen/Qwen2.5-1.5B-Instruct# Datadata_files /root/dataset/xtuner/target_data.jsonprompt_template PROMPT_TEMPLATE.qwen_chatmax_length 512# parallelsequence_parallel_size 1# 序列并行大小1 不开# Scheduler Optimizerbatch_size 2# per_deviceaccumulative_counts 8max_epochs 10000optim_type AdamWlr 2e-4betas (0.9, 0.999)weight_decay 0max_norm 1# grad clipwarmup_ratio 0.03# Savesave_steps 100save_total_limit 2# 最多保留几个 checkpoint# Evaluate the generation performance during the trainingevaluation_freq 100SYSTEM SYSTEM_TEMPLATE.alpacaevaluation_inputs [ 只剩一个心脏了还能活吗, 爸爸再婚我是不是就有了个新娘, 我只出生了一次为什么每年都要庆生,]关键参数说明参数含义推荐值pretrained_model_name_or_path基座模型绝对路径上一节下载的路径data_files训练数据路径自己的 JSONmax_length文本最大长度512 / 1024 / 2048batch_size每卡 batch size显存够就调大2~8accumulative_counts梯度累积8~16等效放大 batchmax_epochs训练轮数3~10lr学习率LoRA 用 1e-4 ~ 2e-4sequence_parallel_size序列并行大小单机多卡保持 16.3 修改配置PART 3数据集######################################################################## PART 3 Dataset Dataloader ########################################################################train_dataset dict( typeprocess_hf_dataset, datasetdict(typeload_dataset, pathjson, data_filesdata_files), tokenizertokenizer, max_lengthmax_length, dataset_map_fnNone, # 数据已是 conversation 格式无需额外转换 template_map_fndict(typetemplate_map_fn_factory, templateprompt_template), remove_unused_columnsTrue, shuffle_before_packTrue, pack_to_max_lengthpack_to_max_length, use_varlen_attnuse_varlen_attn,)dataset_map_fnNone表示用默认的 Alpaca 格式解析与 LLaMA-Factory 一致。6.4 LoRA 与量化配置PART 2已内置模板里已经写好了 QLoRA 配置4-bit 量化 LoRA通常不需要改# PART 2 中已经预置的 QLoRA 配置model dict( typeSupervisedFinetune, llmdict( typeAutoModelForCausalLM.from_pretrained, quantization_configdict( typeBitsAndBytesConfig, load_in_4bitTrue, # ← 4-bit 量化 bnb_4bit_quant_typenf4, # ← NF4 量化类型 ), ), loradict( typeLoraConfig, r32, # LoRA rank lora_alpha64, # 缩放系数 lora_dropout0.1, biasnone, task_typeCAUSAL_LM, ),)如果想跑全量 LoRA不用 4-bit 量化把quantization_config整段删掉即可。单卡微调与监控配置改好后用单卡启动训练export OMP_NUM_THREADS1xtuner train /root/qwen2_5_1_5b_instruct_qlora_alpaca_e3.py训练过程中关注三件事evaluation_freq间隔打印生成样例**观察是否学到位、loss 平稳下降、**checkpoint 按时落盘。XTuner 训练日志单卡 checkpoint 为单个.pth文件保存在work_dirs/config_name/在/root下执行即为/root/work_dirs/...work_dirs/qwen2_5_1_5b_instruct_qlora_alpaca_e3/├── iter_100.pth├── iter_200.pth├── iter_300.pth└── ...后续转换直接使用.pth路径即可训练中断续训见下一节。中断继续训练训练中途断了可以改配置文件从 checkpoint 恢复# qwen2_5_1_5b_instruct_qlora_alpaca_e3.py# load from which checkpointload_from /root/work_dirs/qwen2_5_1_5b_instruct_qlora_alpaca_e3/iter_100.pth# whether to resume training from the loaded checkpointresume True # ← 关键设为 True 才真正续训resumeTrue会同时恢复 optimizer 状态、随机种子、step 计数等resumeFalse只加载模型权重不推荐用于中断续训。改完后重新执行xtuner train命令即可续训。模型转换PTH → HuggingFaceXTuner 训练产物是PTH 格式PyTorch 原生不能直接用 transformers 加载。需要转换为HuggingFace 格式xtuner convert pth_to_hf \ /root/qwen2_5_1_5b_instruct_qlora_alpaca_e3.py \ /root/work_dirs/qwen2_5_1_5b_instruct_qlora_alpaca_e3/iter_300.pth \ /root/xtuner/work_dirs/hf参数说明参数含义第 1 个配置文件必须与训练时一致第 2 个训练产物的.pth路径第 3 个HF 格式输出目录转换hf转换完成后/root/xtuner/work_dirs/hf/目录下得到一份 HuggingFace 格式的LoRA adapter不是完整模型。模型合并LoRA Adapter → 完整模型HF 格式的产物只包含 LoRA adapter 权重几十 MB需要合并回基座模型才能得到完整权重xtuner convert merge \ /root/autodl-tmp/model/Qwen/Qwen2.5-1.5B-Instruct \ /root/xtuner/work_dirs/hf \ /root/xtuner/work_dirs/merged参数说明参数含义第 1 个LLM基座模型路径 不是 adapter第 2 个LLM_ADAPTER上一节转换的 HF adapter 目录第 3 个SAVE_PATH合并后完整模型的输出路径合并完成后/root/xtuner/work_dirs/merged/是一份可直接部署的完整模型。合并阶段不需要 GPU 分布式——用单卡甚至 CPU 都能跑速度慢些。合并后模型的使用合并后的模型可以像普通 HuggingFace 模型一样用transformers加载并做对话推理——加载路径指向 §10 合并输出目录/root/xtuner/work_dirs/merged问题列表可与配置里evaluation_inputs保持一致便于对比训练过程中的生成效果。到这里单卡微调的主线已经走通训练 → 转换 → 合并 → 本地推理。下面部署到 vLLM方便对外提供 API 服务。部署到 vLLM合并后的模型可用 vLLM 对外提供 OpenAI 兼容 API。XTuner 训练时使用PROMPT_TEMPLATE.qwen_chat部署时必须指定同一套对话模板否则容易出现「微调正常、上线答非所问」。# 查出与训练一致的 chat template 路径python -c import xtuner, pathlib; print(pathlib.Path(xtuner.__file__).parent / chat_templates / qwen_chat.json)vllm serve /root/xtuner/work_dirs/merged \ --chat-template 上一步输出的路径说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”我先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇这绝非空谈。数据说话2025年的最后一个月脉脉高聘发布了《2025年度人才迁徙报告》披露了2025年前10个月的招聘市场现状。AI领域的人才需求呈现出极为迫切的“井喷”态势2025年前10个月新发AI岗位量同比增长543%9月单月同比增幅超11倍。同时在薪资方面AI领域也显著领先。其中月薪排名前20的高薪岗位平均月薪均超过6万元而这些席位大部分被AI研发岗占据。与此相对应市场为AI人才支付了显著的溢价算法工程师中专攻AIGC方向的岗位平均薪资较普通算法工程师高出近18%产品经理岗位中AI方向的产品经理薪资也领先约20%。当你意识到“技术AI”是个人突围的最佳路径时整个就业市场的数据也印证了同一个事实AI大模型正成为高薪机会的最大源头。最后我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包【允许白嫖】✅从入门到精通的全套视频教程✅AI大模型学习路线图0基础到项目实战仅需90天✅大模型书籍与技术文档PDF✅各大厂大模型面试题目详解✅640套AI大模型报告合集✅大模型入门实战训练这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】①从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图0基础到项目实战仅需90天全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤640套AI大模型报告合集⑥大模型入门实战训练获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】