【自然语言处理与大模型】使用Xtuner进行QLoRA微调实操
本文首先对Xtuner这一微调框架进行简单的介绍。手把手演示如何使用Xtuner对模型进行微调训练,包括数据准备、训练命令执行及训练过程中的监控技巧。最后,在完成微调之后,本文还将介绍如何对微调结果进行简单对话测试。
一、Xtuner微调框架
XTuner 是一个功能强大、易于使用的大模型微调工具,其特点在于低成本、高效率和硬件友好性。通过支持分布式训练,支持LoRA与QLoRA和众多开源模型,XTuner 为开发者提供了灵活的微调解决方案,适用于广泛的实际应用场景。说明文档链接放在下面啦:
欢迎来到 XTuner 的中文文档https://xtuner.readthedocs.io/zh-cn/latest/【注】关于它和llamafactory的对比我认为没必要只用一个框架,如果这个解决不了就用另一个。
二、QLoRA微调实操
(1)快速安装
方法一:通过pip安装
# 先创建一个专属的conda虚拟环境
conda create -n xtuner python=3.10
# 激活进入
conda activate xtuner
# 安装xtuner库
pip install xtuner
【注】 如果activate进入不了,就先执行conda init然后关掉终端,重新打开就行了。
方法二(推荐):从源码可编辑模式安装
# 先创建一个专属的conda虚拟环境
conda create -n xtuner python=3.10
# 激活进入
conda activate xtuner
# 再去github上面下载源码
git clone https://github.com/InternLM/xtuner.git
# 必须进入源码路径
cd xtuner
# 再执行安装命令
pip install -e .
【注】使用源码可编辑模式来安装的好处就在于,后续微调修改配置文件我们可以很方便的找到源码。
测试是否安装成功:xtuner list-cfg
xtuner list-cfg
(2)准备大模型
这里我们使用书生浦语2.5的1.8b模型,魔塔社区的链接给大家放在这里了:书生·浦语2.5-1.8B-对话
我们使用魔塔的SDK来下载模型,代码如下:
from modelscope import snapshot_download# 我一般会创建一个本地模型文件夹来存
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm2_5-1_8b-chat', cache_dir='./local_models')
如果报错找不到库,No module named 'modelscope'就去pip一下,很简单:
pip install modelscope
(3)准备数据集
在成功安装 XTuner 和下载好大模型后,便可以开始进行模型的微调。演示如何使用 XTuner,应用 QLoRA 算法在 Colorist 数据集上微调 internlm2_5-1_8b-chat。魔塔上的数据集链接我放在这里了:该数据集为,颜色建议-16进制,颜色数据集
使用git来下载数据集,命令如下:
git clone https://www.modelscope.cn/datasets/fanqiNO1/colors.git
(4)修改微调配置文件
XTuner 提供了多个开箱即用的配置文件,可以通过xtuner list-cfg查看,其实我建议可编辑模式安装就可以直接在文件夹里面看到这些配置文件了。
微调配置文件比较繁琐,我将我认为最基础且重要的修改部分列一个表:
修改项 | 说明 |
pretrained_model_name_or_path | 待修改的预训练模型存放路径 |
data_path | 微调数据集 |
max_length | 最大截断长度 |
prompt_template | 对话模版(要和推理的时所用一致) |
batch_size | 批次大小 |
max_epochs | 最大训练轮次(建议给大点) |
dataset_map_fn | 设置数据集格式函数 |
load_in_8bit / load_in_4bit | 选择qlora的量化等级(建议8位) |
【注】如果你想了解更多的配置参数是什么意思,你可以直接参考官方文档:修改训练配置
不要修改源码中的内容,建议是每次微调的时候复制一份原始配置文件,我的做法是用一个文件夹来单独存放我自己微调的配置文件,如下图。
我们要对配置文件修改诸多地方,具体看下面的截图逐一介绍:
① PART 1 Settings
关于预设对话模版和系统提示词见下图:
② PART 2 Model & Tokenizer
③ PART 3 Dataset & Dataloader
【纠正】图中115行,改成下面的代码才能执行:
dataset=dict(type=load_dataset, path='json', data_files=data_path),
xtuner自带的map_fn在 xtuner/xtuner/dataset/map_fns/dataset_map_fns 路径下,如果你拿到的原始微调数据集格式和框架要求不符合,建议是用脚本修改成alpaca,然后使用alpaca_map_fn
(5)启动微调训练
① 单机单卡(默认)
# train 命令后面加上配置文件的绝对路径
xtuner train /root/autodl-tmp/xtuner/my_qlora_sft/internlm2_chat_1_8b_qlora_alpaca_e3.py
② 单机多卡
# 使用NPROC_PER_NODE环境变量设定多卡推理的GPU数量
NPROC_PER_NODE=${GPU_NUM} xtuner train /root/autodl-tmp/xtuner/my_qlora_sft/internlm2_chat_1_8b_qlora_alpaca_e3.py
三、用Xtuner自带的推理功能测试模型对话
在这里我演示的是不进行权重合并,而是直接 LLM + LoRA Adapter 进行对话:
xtuner chat \<预训练模型的绝对路径> \--adapter <lora适配器的绝对路径> \--prompt-template <对话模版> \
相关文章:

【自然语言处理与大模型】使用Xtuner进行QLoRA微调实操
本文首先对Xtuner这一微调框架进行简单的介绍。手把手演示如何使用Xtuner对模型进行微调训练,包括数据准备、训练命令执行及训练过程中的监控技巧。最后,在完成微调之后,本文还将介绍如何对微调结果进行简单对话测试。 一、Xtuner微调框架 X…...

扣子创建一个应用
什么是扣子应用 扣子应用可以让你相对轻松的搭建一个具备AI功能的应用,它区别智能体,在于智能体的ui和交互相对固定,主要是以对话框聊天的方式进行交互,而扣子应用则可以让ui交互表现更加丰富。 实践一个生成图片的应用 这里我…...

SpringBoot教程(vuepress版)
Spring Boot 教程 项目介绍 这是一个系统化的 Spring Boot 学习教程,采用循序渐进的方式,帮助开发者从零开始掌握 Spring Boot 开发。 教程特点 系统化的知识结构实用的代码示例完整的实战案例丰富的练习作业 目录结构 基础入门 Spring Boot 简介…...

FiLo++的框架图介绍
FiLo框架图模块详解 1. 文本生成模块 Normal Texts 功能:生成正常样本的文本描述。输入:固定模板(如 A [domain] photo of [state][cls])和可学习模板(如 [v1][v2]...[vm][state][cls])。输出:融…...

C++--入门基础
C入门基础 1. C的第一个程序 C继承C语言许多大多数的语法,所以以C语言实现的hello world也可以运行,C中需要把文件定义为.cpp,vs编译器看是.cpp就会调用C编译器编译,linux下要用g编译,不再是gcc。 // test.cpp #inc…...

准确---Typora配置Gitee图床并实现自动图片上传
下载地址:https://github.com/Molunerfinn/picgo/releases 安装就直接下一步,下一步就行 安装完以后然后回到Typora上偏好设置指定一下路径 默认是 C:\Program Files\PicGo\PicGo.exe 并且还需要选择规则 接下来就需要去PicGo上面配置了 配置之前需要去…...

Day111 | 灵神 | 二叉树 | 验证二叉搜索树
Day111 | 灵神 | 二叉树 | 验证二叉搜索树 98.验证二叉搜索树 98. 验证二叉搜索树 - 力扣(LeetCode) 方法一:前序遍历 递归函数传入合法的左右边界,只有当前结点是合法的边界,才是二叉搜索树,否则就返回…...

Redis 8.0 正式版发布,新特性很强!
就在前两天,Redis 8.0 正式版 (GA) 来了!这并不是一次简单的更新,Redis 8.0 不仅带来了性能上的进一步提升,还带来一些实用的新特性与功能增强。并且,最重要的是拥抱 AGPLv3 重归开源! 下面,简单…...
Prompt Engineering 提示词工程学习
一、Prompt Engineering 简介 Prompt Engineering 是设计和优化输入提示(Prompt)以获得预期输出的过程。在与大型语言模型(如 GPT-4)交互时,如何构造提示会显著影响模型的回答质量。 二、Prompt 的重要性 提高生成准确性:通过正确的 Prompt 引导,模型能够更好地理解用…...

以太坊智能合约开发框架:Hardhat v2 核心功能从入门到基础教程
一、设置项目 Hardhat 项目是安装了 hardhat 包并包含 hardhat.config.js 文件的 Node.js 项目。 操作步骤: ①初始化 npm npm init -y②安装 Hardhat npm install --save-dev hardhat③创建 Hardhat 项目 npx hardhat init如果选择 Create an empty hardhat.…...

了解Dockerfile
定制docker 镜像的方式: 手动修改容器内容,导出新的镜像基于dockerfile 自行编写指令,基于指令流程创建镜像 镜像和容器的层级实现 docker拉取镜像到docker engine 之后,共享系统内核。 在内核层上有镜像层(本质上只…...
7. HTML 表格基础
表格是网页开发中最基础也最实用的元素之一,尽管现代前端开发中表格布局已被 CSS 布局方案取代,但在展示结构化数据时,表格依然发挥着不可替代的作用。本文将基于提供的代码素材,系统讲解 HTML 表格的核心概念与实用技巧。 一、表格的基本结构 一个完整的 HTML 表格由以下…...
Spring普通配置类 vs 自动配置类-笔记
1.简要版 Configuration和Bean,既可以用于普通配置类,也可以用于自动配置类。二者的区别和联系是什么呢? 区别: Configuration和Bean是Spring框架本身的注解,用于定义配置类和生成Bean。而自动配置通常是Spring Boo…...

强化学习--2.数学
强化学习--数学 1、概率统计知识1.1 随机变量与观测值1.2 概率密度函数(PDF)1.3 期望1.4 随机抽样 2、数据期望E3、正态分布4、条件概率1. **与多个条件相关**(依赖所有前置条件)2. **仅与上一个条件相关**(马尔可夫性…...

边缘计算:开启智能新时代的“秘密武器”
大家好,我是沛哥儿,我们又见面了。今天我们来简单说下什么是边缘计算,它怎么工作的,有哪些优势。有哪些具体的应用场景。 文章目录 1、边缘计算是什么?2、边缘计算如何工作?3、边缘计算有哪些优势ÿ…...

# 如何使用 PyQt5 创建一个简单的警报器控制界面
如何使用 PyQt5 创建一个简单的警报器控制界面 引言 在现代自动化和监控系统中,警报器扮演着至关重要的角色。它们可以提醒我们注意潜在的危险或紧急情况。在这篇文章中,我将向您展示如何使用Python的PyQt5库创建一个简单的警报器控制界面。这个界面将…...

MySQL报错解决过程
我在调试datagrip的时候,显示拒绝连接,开始的时候,我以为只是服务没有开启,结果到后来在网上搜索各种解决办法无果后,就选择卸载,卸载之后安装新的MySQL 以下就是我的解决过程。 如果只是在使用外置软件&…...

【AI入门】CherryStudio入门5:创建知识库,对接Obsidian 笔记
前言 来吧,继续CherryStudio的实践,前边给Cherry Studio添加知识库,对接思源笔记,但美中不足,思源笔记得导出再导入知识库,本文看一下obsidian笔记,笔记内容直接被知识库使用,免去导…...

Redis 8.0正式发布,再次开源为哪般?
Redis 8.0 已经于 2025 年 5 月 1 日正式发布,除了一些新功能和性能改进之外,一个非常重要的改变就是新增了开源的 AGPLv3 协议支持,再次回归开源社区。 为什么说再次呢?这个需要从 2024 年 3 月份 Redis 7.4 说起,因为…...

【Redis】Redis常用命令
4.Redis常见命令 4.1 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样: 命令太多,不需要死记,学会查询就好了~ Redis为了方便我们学习,将操作不同数据类型…...
负载均衡算法解析(一)NGINX
文章目录 1. 核心数据结构:算法的基石1.1 负载均衡节点结构:定义服务器实体1.2 关键概念阐述:权重 (Weight) 2. NGINX加权轮询算法旨在解决的具体问题深度分析2.1 应对后端服务器间的负载不均衡问题2.2 后端服务健康状态的动态感知与自适应调…...
计算机网络——HTTP/IP 协议通俗入门详解
HTTP/IP 协议通俗入门详解 一、什么是 HTTP 协议?1. 基本定义2. HTTP 是怎么工作的? 二、HTTP 协议的特点三、HTTPS 是什么?它和 HTTP 有啥区别?1. HTTPS 概述2. HTTP vs HTTPS 四、HTTP 的通信过程步骤详解: 五、常见…...
ChromeDriverManager的具体用法
ChromeDriverManager 是 webdriver_manager 库的一部分,它用于自动管理 ChromeDriver 的下载和更新。使用 ChromeDriverManager 可以避免手动下载 ChromeDriver 并匹配系统中安装的 Chrome 浏览器版本。以下是 ChromeDriverManager 的基本用法: 步骤 1…...
DeepSeek Copilot idea插件推荐
🌌 DeepSeek Copilot for IntelliJ IDEA 让 AI 成为你的编程副驾驶,极速生成单元测试 & 代码注释驱动开发! 🚀 简介 DeepSeek Copilot 是一款为 IntelliJ IDEA 打造的 AI 编程助手插件,它能够智能分析你的代码逻辑…...

贪心算法应用:最小反馈顶点集问题详解
贪心算法应用:最小反馈顶点集问题详解 1. 问题定义与背景 1.1 反馈顶点集定义 反馈顶点集(Feedback Vertex Set, FVS)是指在一个有向图中,删除该集合中的所有顶点后,图中将不再存在任何有向环。换句话说,反馈顶点集是破坏图中所…...

游戏引擎学习第259天:OpenGL和软件渲染器清理
回顾并为今天的内容做好铺垫 今天,我们将对游戏的分析器进行升级。在之前的修复中,我们解决了分析器的一些敏感问题,例如它无法跨代码重新加载进行分析,以及一些复杂的小问题。现在,我们的分析器看起来已经很稳定了。…...
一篇文章看懂时间同步服务
Linux 系统时间与时区管理 一、时间与时钟类型 时钟类型说明管理工具系统时钟由 Linux 内核维护的软件时钟,基于时区配置显示时间timedatectl硬件时钟 (RTC)主板上的物理时钟,通常以 UTC 或本地时间存储,用于系统启动时初始化时间hwclock …...

12.模方ModelFun工具-立面修整
摘要:本文主要介绍模方ModelFun修模工具——立面修整的操作方法。 点击工具栏即可找到立面修整工具,点击可打开并使用该工具,如下图: 图 工具菜单栏 (1)截面绘制: 快速绘制竖直矩形࿱…...
git命令常见用法【持续更新中……】
一、已有本地代码,在gitee创建了空仓库后想将代码与该仓库相连 在本地项目目录下初始化Git # 1. 初始化本地仓库 git init# 2. 添加所有文件到暂存区 git add .# 3. 提交第一个版本 git commit -m "Initial commit: 项目初始化"将本地仓库关联到Gitee 根…...

Docker 渡渡鸟镜像同步站 使用教程
Docker 渡渡鸟镜像同步站 使用教程 🚀 介绍 Docker.aityp.com(渡渡鸟镜像同步站)是一个专注于为国内开发者提供 Docker 镜像加速和同步服务的平台。它通过同步官方镜像源(如 Docker Hub、GCR、GHCR 等),为…...