SkillAgentSearch skills...

XtunerGUI

Xtuner Factory

Install / Use

/learn @scchy/XtunerGUI
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<div align="center"> <img src="https://github.com/scchy/XtunerGUI/assets/108343727/93376dab-fae8-46f8-8956-58465cbbcb98" width="1000"/> <br /><br />

GitHub Repo stars

<div align="left">

1. 项目背景

XTuner是由InternLM团队开发的一个高效、灵活且全能的轻量化大模型微调工具库。其主要用于多种大型语言模型的高效微调,包括大语言模型InternLM和多模态图文模型LLaVa。XTuner不仅提供了丰富的模型、数据集、数据管道和算法支持,还配备了现成的配置文件和快速入门指南,使得用户能够便捷地进行模型微调和部署。总体来看,XTuner为大型语言模型的微调提供了一个高效、全面且用户友好的解决方案,适用于追求性能优化和定制化的开发者和研究者。

虽然XTuner已经简化了大量微调中的步骤,但由于对于0基础的小白而言,还是具有一定的技术门槛。因此,借由InternLM官方推出的大模型实战训练营的机会,我们小组成员有幸与XTuner官方技术团队合作,在参考了 LLaMA-Factory 的基础上,根据XTuner的特性进行修改完善,从而完成了基于Gradio的XTuner可视化的界面设计。 此项目旨在为基础知识较弱的初学者提供便捷的微调解决方案,使他们能够通过简单的点击来尝试对模型进行微调。该界面能够实时展示训练信息和训练结果,并支持用户对微调后的模型与原始模型进行对比测试。此外,除了支持官方提供的模型和数据集之外,高级用户还可以上传自己的模型和数据集进行微调。这种自定义模型的功能不仅有助于初学者在已经微调过的模型基础上进行进一步的学习和探索,也大大增强了该界面的实用性和灵活性。

2. 项目成员介绍

XTuner GUI项目得到了XTuner官方的支持,因此除了浦语实战训练营里的四位成员外,还包括了两名XTuner专业的开发人员cwh及pppppM。下面是对各个成员的贡献进行介绍,感谢大家一个多月以来的辛勤付出!也感谢书生.浦语官方为我们所提供课程以及算力支持!相信AI Lab将持续做大做强,成为中国数一数二的开源社区! image

2.1 Xtuner GUI团队成员包括

  • Jianfeng777 – 负责整体前端开发、任务策划及文案撰写
  • Scchy – 负责整体后端开发及规划
  • L241025097 – 负责模型训练终端可视化
  • Semple030228 – 负责模型转换及整合部分

2.2 XTuner开发人员

  • HIT-cwh - 负责mmengine相关内容设置及配置文件生成,模型和数据集检查等开发工作
  • pppppM - 提供XTuner方面专业的指导意见

3. 快速启动(仅支持Linux系统)

首先我们需要创建一个新的虚拟环境,并将GitHub的内容克隆到本地。

conda create -n XtunerGUI python=3.10 -y
conda activate XtunerGUI
git clone https://github.com/scchy/XtunerGUI.git

然后我们需要进入仓库的内部并安装运行XTunerGUI所需要的包(假如安装速度过慢请使用清华源镜像)。

cd XtunerGUI
pip install -r requirements.txt

经过一段时间的安装后,我们就可以启动app.py文件进入我们创建的界面。

python app.py

4. UI界面介绍

本页面共分为六部分,内容涵盖了大语言模型中所有基础的步骤(具体可看下图),下面我将一步步带领大家了解页面的布局以及具体的使用方式。此外,我们可以在OpenXLab里查看完整的页面细节(链接)。

4.1 本地路径设置

image

第一步,我们先要输入两个本地的路径。一个是整体文件保存的位置,另外一个是模型和数据集下载保存的位置。对于文件保存路径(customer_path)而言,在该路径下将保存配置文件、所有的训练过程文件(权重文件、训练日志等)及模型转换后的内容。那对于模型数据集文件路径(download_cache)而言,该路径下将保存在UI界面中下载的模型和数据集文件。在对路径进行修改后切记要点击确认路径按钮哦!

4.2 微调方法、模型、数据集设置

image

第二步,在这里我们需要选择微调的方法,目前已支持QLoRA、LoRA和全量微调(full)三种方法,大家可以根据自己的硬件情况和实际任务需求进行选择。另外我们也支持大量的官方数据集和模型,通过点击下方下载按钮即可自动从Modelscope、Huggingface和OpenXLab三个平台进行下载。假如发现下载错模型或者数据集也可点击取消下载工作,下载任务取消后将删除已下载的内容,从而减少内存的占用。 image

另外我们还支持大家上传自定义的模型或者数据集。

  • 对于自定义的模型,我们可以通过上传本地的路径,并且点击按钮即可检查模型是否可用及对模型提示词模版的匹配(在UI界面点击下载按钮下载的官方模型会自动进行提示词模版匹配),不同的模型会有其独特的提示词模版,更多详细信息可以进入UI界面中查看。
  • 对于自定义的数据集,我们目前仅支持OpenAI的数据集格式(最通用的数据集格式)。在UI界面中也展示了OpenAI数据集的格式,大家可以通过各类的大语言模型(比如说ChatGPT)对自己的数据集进行格式的更改。在将数据集格式转为OpenAI格式后,我们可以通过输入本地数据集路径或者将文件在gradio的文件框上上传。在完成数据集文件上传后,还可点击按钮检查数据集是否符合规定。

4.3 微调参数设置

第三步,在微调参数设置处,我们将所有的参数分为了基础参数和进阶参数两部分。我们根据微调方法的不同设置了几套默认的参数模版,一般情况下大家可以直接使用该参数进行微调即可。 image

在基础参数部分是我们比较常用的参数,包括学习率、预热比、数据集最大长度、GPU数量、设备样本个数以及评估问题等等。值得一提的是我们可以自己设置多个评估问题,默认的评估问题是"请给我介绍五个上海景点"的中英文版,但是我们可以将其修改为我们所需要的问题,并且通过选择问题的数量可以增加在评估时候的问题(最多十个问题)。 image

对于进阶参数而言,就是一些比较不常使用也不怎么需要修改的参数,比如说优化器的类型、权重衰减、梯度剪裁等。这些虽然会影响模型的效果,但是修改优化的难度比较大,大家在使用过程中除非有明确的修改目的,否则不建议大家进行更改。 在完成了参数的设置后,接下来就需要点击按钮生成配置文件了。配置文件的生成的模型训练的灵魂,模型的训练过程和方向都是基于配置文件里的内容进行。在这里配置文件的创建就是基于上面我们设置的内容。这里需要注意的是,假如大家同时在自定义数据集/模型以及在GUI界面下载了模型/数据集,这里默认以自定义的数据集/模型作为配置文件的模型/数据集的路径,因此大家在使用的过程中需要注意这一点。

4.4 微调模型训练

image

在完成配置文件后,我们就可以点击按钮启动模型训练工作。当然我们也可以点击按钮暂时中断我们的训练过程。当我们需要对中断的模型继续训练的时候,我们可以选择之前保存的权重并点击按钮继续训练。中断后续训是不会影响最终模型训练的效果的。 另外,在我们点击训练后,我们可以打开下面的终端界面查看训练的过程以及内容,这样我们就能够更好的监控整体的训练过程。假如训练效果过差,我们也能够及时进行模型训练的中断,以免浪费无谓的时间。

4.5 微调结果展示

image

在模型微调进程结束后,我们可以点击下方按钮生成一些关键内容的展示。包括说损失函数的的变化图、学习率在训练过程中的变化图以及不同权重文件下测试问题。这样我们就既能够看到模型训练过程的变化,也能够通过测试问题的对比来看到模型是否过拟合,从而找到最优的权重文件进行模型测试及部署。

4.6 微调模型转化及测试

image

在我们通过微调结果展示找到效果最好的模型权重文件后,我们还需要将我们的模型转化为常见的HuggingFace格式。对于LoRA或者QLoRA方式微调出来的模型还需要与原模型进行整合。在这里我们合并了这两部分,我们会基于大家第二步选择的微调方法进行调整。具体的操作就是我们需要在下拉列表中找到对应的权重文件后,点击模型转换按钮即可。 image

在模型转换后,我们就可以进行对话的测试。在左边可以展示原来底座模型的效果,而右边展示的是微调后模型的效果。我们只需要选择合适的模型推理参数,点击模型启动即可进行对话。我们可以通过原模型和微调后模型的对比查看微调的实际效果。

以下是我们录制的一个简短使用视频(B站),大家可以通过视频来作更进一步的了解。

以上就是页面的一个基本的介绍,假如大家想单纯的使用的话就可以马上开始上手啦!但是假如大家希望对我们设计的思路以及原理有更深刻的认识的话,那就继续往下看吧! 下面的部分我们将谈谈XTuner GUI背后的XTuner的运作原理,从而能够更深一层次的了解XTuner GUI的实现原理。正所谓知其然还需要知其所以然,假如我们能够真正的通过XTuner整体的结构设计以及指令,那我们就能更好的理解XTuner GUI项目的运行机理。

5. XTuner流程介绍

对于XTuner的基本操作,我们可以通过以下这张图,简单的了解一下。高清图片链接请点击此位置

image

可以看到,整个工作流程分为以下四个步骤(具体各个步骤的调用代码可参考下图): image

5.1 数据采集及格式转换

image

  • 首先,根据任务的不同,我们需要明确微调目标,进行数据采集,并将数据转换为 XTuner 所支持的格式类型。这部分需要大家自行完成,当然我们假如只是体验的话仅需要使用官方支持的数据集即可。
  • 然后我们还需要根据自己的硬件条件选择合适的微调方法和合适的基座模型。不同的基座模型对显存的需求都不太一样,模型参数越大,微调所需要显存就越多。而在微调方法中,对显存需求最小的就是QLoRA(最少8GB即可运行),而显存需求最大的则是全量微调。

5.2 配置文件的创建

image

  • 首先,我们可以通过执行 xtuner list-cfg 命令列出所有配置文件。
  • 通过上面选择的微调方法和基座模型找到合适的配置文件,并使用 xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH} 命令复制到本地端。
  • 复制完成后还需要根据自己的需求修改配置文件以更新模型路径和数据集路径。
  • 特定时候还需要调整模型参数和配置,更改 load_dataset 函数和 dataset_map_fn 函数。并根据模型选择合适的 prompt_template。

5.3 模型训练

image

  • 修改配置文件后,我就可以使用 xtuner train 命令启动训练。
  • 除此之外我们还可以设置特定参数优化训练,如启用 deepspeed,以及设置训练文件的保存路径。
  • 假如意外的中断了训练,还可以通过加上--resume {checkpoint_path}的方式进行模型续训。具体可看下面的指令详解。

5.4 模型转换、测试及部署

image

  • 在完成训练后,找到对应的训练文件并执行 xtuner convert pth_to_hf 命令,就可以将转换模型格式为 huggingface 格式。
  • 对于LoRA类的模型而言,则需要执行 xtuner convert merge 命令将 adapter 层与原模型进行合并。
  • 转换完成后,我们就可以以转换后的文件路径并使用 xtuner chat 命令启动模型进行性能测试。
  • 除此之外,我们还可以在安装 LMDeploy 后通过 python -m lmdeploy.pytorch.chat 命令进行模型部署,即使用TurboMind进行推理。

以上就是关于XTuner项目的一些基础功能及指令的展示,下面我将通过XTuner GUI整体的逻辑图来深入的剖析我们在设计原型过程中的思路和对现有流程的优化点。

6. XTuner GUI设计思路介绍

那对于XTuner GUI而言,我们将其分为了六个部分路径设置、模型数据集微调方法设置、相关参数设置、模型训练、训练结果展示、模型转换及测试部分。之所以这样进行设计,主要目的还是希望作为一个小白可以先抛开一系列的专业知识,能够真真正正的先将模型跑起来看到效果后,再一步步的进行研究到底每一步的原理是什么。想当年我学习OpenMMLab相关的算法库,例如MMDetection和MMSegementation,我最开始的时候也就是去找到一些数据集然后跑起来,然后再慢慢研究怎么优化,整体运行逻辑。同样的,虽然XTuner的门槛已经非常低了,但是我希望能够把这个门槛能够降得更低,能够让更多人能够无痛上手。

那真正让用户无痛上手,那就必须要砍掉让他们思考的部分。比如说在原生的XTuner里面,我们还需要自己下载模型数据集,还需要找到合适的配置文件,还需要我们自己找到对应的文件夹进行转换等等,这些通通都不再需要,我们只需要通过点击按钮、选择下拉框的内容或者说调整一下参数就可以将模型跑起来了,并且最后也将整体的对话测试也是直接输入文本即可同时与原模型进行对话,这些都是我们希望能够最小化大家跑起模型的难度,能够真正打开大模型微调的大门。

除了对0基础的小白进行支持以外,我们对拥有一定使用经验的人也作出了考量。首先就是增加了自定义模型和自定义数据集两部分,那对于想要对自己的数据集或者模型微调的人就能够节省真正进入文件修改的时间。其次是提供了大量可修改的参数让大家进行选择。这些对于一个拥有一定经验的“炼丹师”而言,无疑是非常有意义的。

那对于大师而言,尤其是需要训练多模态模型的人,这里其实我们就没有做过多的特定支持。主要原因是这部分人群的代码能力和调试能力非常强,无论是使用原生的XTuner或者其他的微调工具都会得心应手,不需要过多在这些细节上进行可视化的展示。总的来说,我们所针对的人群其实更多是哪些0基础的小白以及有一定经验的炼丹师,通过使用这样一个工具能够更好的完成他们的工作。 那对于XTuner GUI而言,我同样也是制作了一个逻辑图来展示整体的运行思路(高清图片链接请点击此位置)。

下面将一步步的解释整体的架构,并说明相比于原生的XTuner,我们作出了哪些的调整以及设计时的思路:

6.1 路径设置

<p align="center"> <img src="https://github.com/scchy/XtunerGUI/assets/108343727/3dde057d-b0cb-4d06-8cda-3047cdfef7c2" alt="image" style="width: 48%;"> <img src="https://github.com/scchy/XtunerGUI/assets/108343727/74e028d9-c34b-4b5c-95a8-00ee9c8a0f18" alt="image" style="width: 48%;"> </p>

首先我们可以看到我们需要传入的是文件保存路径及模型数据集文件保存路径。对于文件保存路径(customer_path)而言,在该路径下将保存配置文件、所有的训练过程文件(权重文件、训练日志等)及模型转换后的内容。那对于模型数据集文件路径(download_cache)而言,该路径下将保存在UI界面中下载的模型和数据集文件。 其实在初版的设计当中,这一部分其实是没有被添加进去的,但是后面我们发现下载的模型和数据集文件都可能会相对比较大,再加上后面微调后的文件可能会撑爆内存,因此我们决定将两者分开,用户可以自行选择合适的路径进行保存,这样就可以降低内存的压力。当然对于那些内存充足的人而言,仅需要按照默认的路径即可。

6.2 模型、数据集及微调方法设置

image

对于所有微调任务而言,第一步我们要考虑的都是说,我要微调什么模型,我要用什么数据集去微调这个模型,具体使用的微调方法是什么。这三个基本的步骤其实就拦住了很多的人,因为他们不知道去哪里找这些东西。即便是使用原生XTuner的时候,即便我们真的根据仓库中给出的快速开始将模型跑起来,但是我们还是可能不太理解这一切是怎么执行的。并且,在XTuner仓库里已有的config文件其实并不包含所有的模型、数据集和微调方法的组合,因此对于那些想直接用但是找不到对应config文件的人们来说,可能就真的是从入门到放弃了,毕竟对于他们而言,修改一个类似的config然后调整里面对应的东西难度都太高了吗,真的能做下来也不是0基础的小白了。 基于以上的思考,我们所做的就是简化这一系列的流程。首先我们设置了下拉框来直接根据需求选择模型微调的方法。其次是对于在Huggingface、Modelscope和OpenXLab上已有的数据集和模型,我们提供下拉框让他们直接进行选择并能够点击按钮进行下载。下载完的模型也将自动保存在上面设置的模型数据集文件保存路径(download_cache)上。这样用户是真的知道自己要训练的是一个什么模型,用的是一个什么数据集,具体的微调方法是什么,而不是仅仅给他们一个config文件一个文件名去自己领悟。 其次对于进阶用户的自定义模型和数据集,那用户可以选择上传自己的模型然后使用官方的数据集,也可以使用官方的模型然后使用自己的数据集进行微调,这些都是可行的。并且无论是数据集还是模型,我们都增加了一个检查的机制,来帮助用户了解自己的模型和数据集是否存在问题,是否能够正常使用,那就避免了后续出现bug无法解决的问题。 那对于模型而言,还有一个很重要的步骤就是有一个与之相匹配的提示词模版。一般来说,用户上传自己的模型也不会说提供一套自己的提示词模版,真的能够训练出一个自己提示词模版的模型那也不是小白了。一般而言,这些用户自己上传的模型都是微调别的官方大模型实现的。基于这一层的思考,我们就决定了对于用户自定义上传的模型,我们不仅检查其是否可用,还找到其对应的提示词模版,这样用户也不需要再找到原模型的提示词模版然后放进去了,这就节省了他们不少的时间和精力。

6.3 相关参数设置

![image](https://github.com/scchy/XtunerGUI/assets/108343727/38181c

View on GitHub
GitHub Stars35
CategoryDevelopment
Updated4mo ago
Forks6

Languages

Python

Security Score

82/100

Audited on Nov 11, 2025

No findings