当前位置: 首页 > web >正文

【自然语言处理与大模型】使用Xtuner进行模型合并与导出

        在上一篇文章中我为大家介绍了Xtuner框架如何进行QLoRA微调,这个框架在微调过后会得到适配器权重文件,它的后缀是.pth。但原模型都是huggingface模型,其后缀是safetensors。所以呢我们在使用这个框架导出模型之前要合并,合并之前要做数据转换。

(1)数据转换

        Xtuner使用 PyTorch 训练出来的模型权重文件保存为 pth 格式(例如 iter_2000.pth;如果使用了 DeepSpeed,则会保存为一个文件夹)。为了便于后续使用,我们需要将其转换为 HuggingFace 模型格式,可以使用命令 xtuner convert pth_to_hf 来完成转换。具体命令如下:

xtuner convert pth_to_hf ${FINETUNE_CFG} ${PTH_PATH} ${SAVE_PATH}
# 例如:xtuner convert pth_to_hf internlm2_chat_7b_qlora_custom_sft_e1_copy.py ./iter_2000.pth ./iter_2000_hf

 这里涉及的三个参数分别是:

  • ${FINETUNE_CFG}:这是微调配置文件的路径。这个配置文件包含了关于如何加载原始模型、adapter层以及如何进行转换的相关信息。它通常是 Python 脚本的形式,例如 internlm2_chat_7b_qlora_custom_sft_e1_copy.py

  • ${PTH_PATH}:这是要转换的 PyTorch 模型权重文件的路径。这通常是在训练过程中保存下来的检查点文件(checkpoint),例如 ./iter_2000.pth,表示经过 2000 步迭代后保存的模型权重。

  • ${SAVE_PATH}:这是转换后的 Hugging Face 格式的模型将要保存的位置。您可以指定一个目录,转换后的模型文件将会被存储在这个目录下。例如 ./iter_2000_hf 表示在当前目录下创建一个名为 iter_2000_hf 的文件夹,并将转换后的模型存放在里面。

(2)模型合并导出

        若使用了 LoRA 或 QLoRA 进行微调,模型转换后将仅包含 adapter 参数,而不包含原始的 LLM 参数。如果你希望获得合并后的模型权重(例如用于后续评测)可以使用 xtuner convert merge 命令来完成这一操作:

# xtuner convert merge ${LLM} ${LLM_ADAPTER} ${SAVE_PATH}
xtuner convert merge /root/InternLM/models/Qwen3-0.6B /root/InternLM/models/Qwen3-0.6B_adapter /root/InternLM/models/merged_Qwen3-0.6B

其中参数为:

  • ${LLM}:原始 Qwen3-0.6B 模型位于 /root/InternLM/models/Qwen3-0.6B
  • ${LLM_ADAPTER}:微调后得到的 adapter 层(即训练好的额外层)位于 /root/InternLM/models/Qwen3-0.6B_adapter
  • ${SAVE_PATH}:我们希望将合并后的模型保存到 /root/InternLM/models/merged_Qwen3-0.6B
http://www.xdnf.cn/news/3713.html

相关文章:

  • NHANES指标推荐:triglyceride levels
  • MySQL安装完全指南:从零开始到配置优化(附避坑指南)
  • java_Lambda表达式
  • C++函数详解:从基础到高级应用
  • 二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE
  • 生成式 AI 的阐释
  • 解决Maven项目中报错“java不支持版本6即更高的版本 7”
  • 使用python加edge-tts实现文字转语音
  • AI 采用金字塔(Sohn‘s AI Adoption Pyramid)
  • 《TensorFlow 与 TensorFlow Lite:协同驱动 AI 应用全景》
  • string的两种实现
  • 华为云Astro轻应用自定义连接器对接OBS云对象存储操作指南
  • No qualifying bean of type ‘XXX‘ available
  • AVInputFormat 再分析
  • 青少年ctf练习平台--做题wp(1)
  • 第九章:反击的序曲(续)
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 19)
  • IP伪装、代理池与分布式爬虫
  • 探索内容智能化的关键解决方案
  • java学习之数据结构:二、链表
  • 模拟SIP终端向Freeswitch注册用户
  • ES6入门---第二单元 模块二:关于数组新增
  • 工业传动核心部件深度剖析:丝杆升降机与气缸的技术特性及选型指南
  • MCP多智能体消息传递机制(Message Passing Between Agents)
  • c#数据结构 线性表篇 非常用线性集合总结
  • springboot基于推荐算法的景点推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 20:深度学习-多层感知器原理
  • Android 端如何监控 ANR、Crash、OOM 等严重问题
  • 深度学习系统学习系列【2】之人工神经网络(ANN)
  • Javase 基础入门 —— 07 接口