XTuner微调个人小助手认知

XTuner微调个人小助手认知

1.配置环境等(老生常谈)

# 创建虚拟环境
conda create -n xtuner python=3.10 -y

# 激活虚拟环境(注意:后续的所有操作都需要在这个虚拟环境中进行)
conda activate xtuner0121

# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
pip install transformers==4.39.3
pip install streamlit==1.36.0

安装 XTuner
虚拟环境创建完成后,就可以安装 XTuner 了。首先,从 Github 上下载源码。

# 创建一个目录,用来存放源代码
mkdir -p /root/InternLM/code

cd /root/InternLM/code

git clone -b v0.1.21  https://github.com/InternLM/XTuner /root/InternLM/code/XTuner

其次,进入源码目录,执行安装。

# 进入到源码目录
cd /root/InternLM/code/XTuner
conda activate xtuner0121

# 执行安装
pip install -e '.[deepspeed]'

tips:安装deepspeed时间有点久,pip install -e '.[deepspeed]' -i https://mirrors.aliyun.com/pypi/simple/,换成这个,时间也有点久。

安装好后xtuner version:
在这里插入图片描述

模型准备
因为是在 InternStudio 上运行的,所以不用通过 HuggingFace、OpenXLab 或者 Modelscope 进行模型的下载,在开发机中已经存在了公共的模型本地文件,直接使用就行。

# 创建一个目录,用来存放微调的所有资料,后续的所有操作都在该路径中进行
mkdir -p /root/InternLM/XTuner

cd /root/InternLM/XTuner

mkdir -p Shanghai_AI_Laboratory

ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b Shanghai_AI_Laboratory/internlm2-chat-1_8b

执行上述操作后,Shanghai_AI_Laboratory/internlm2-chat-1_8b 将直接成为一个符号链接,这个链接指向 /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b 的位置。

这意味着,当我们访问 Shanghai_AI_Laboratory/internlm2-chat-1_8b 时,实际上就是在访问 /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b 目录下的内容。通过这种方式,无需复制任何数据,就可以直接利用现有的模型文件进行后续的微调操作,从而节省存储空间并简化文件管理。

tree -l看一下目录结构
在这里插入图片描述

2.正式开始

2.1 微调前的模型对话

conda activate xtuner

streamlit run /root/InternLM/Tutorial/tools/xtuner_streamlit_demo.py

端口映射直接在vscode里添加6006.

在这里插入图片描述

2.2 指令跟随微调

准备数据文件
为了让模型能够认清自己的身份,在询问自己是谁的时候按照我们预期的结果进行回复,我们就需要通过在微调数据集中大量加入这样的数据。我们准备一个数据集文件datas/assistant.json,文件内容为对话数据。

import json

# 设置用户的名字
name = ' '
# 设置需要重复添加的数据次数
n =  3750

# 初始化数据
data = [
    {"conversation": [{"input": "请介绍一下你自己", "output": "我是{}的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦".format(name)}]},
    {"conversation": [{"input": "你在实战营做什么", "output": "我在这里帮助{}完成XTuner微调个人小助手的任务".format(name)}]}
]

# 通过循环,将初始化的对话数据重复添加到data列表中
for i in range(n):
    data.append(data[0])
    data.append(data[1])

# 将data列表中的数据写入到'datas/assistant.json'文件中
with open('datas/assistant.json', 'w', encoding='utf-8') as f:
    # 使用json.dump方法将数据以JSON格式写入文件
    # ensure_ascii=False 确保中文字符正常显示
    # indent=4 使得文件内容格式化,便于阅读
    json.dump(data, f, ensure_ascii=False, indent=4)

启动微调

xtuner train ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py

在这里插入图片描述
模型格式转换

# 先获取最后保存的一个pth文件
pth_file=`ls -t ./work_dirs/internlm2_chat_1_8b_qlora_alpaca_e3_copy/*.pth | head -n 1`
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py ${pth_file} ./hf

模型合并
对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(Adapter),训练完的这个层最终还是要与原模型进行合并才能被正常的使用。

export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert merge /root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b ./hf ./merged --max-shard-size 2GB

微调后的模型对话
微调完成后,可以再次运行xtuner_streamlit_demo.py脚本来观察微调后的对话效果,不过在运行之前,需要将脚本中的模型路径修改为微调后的模型的路径。

# 直接修改脚本文件第18行
- model_name_or_path = "/root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b"
+ model_name_or_path = "/root/InternLM/XTuner/merged"
streamlit run /root/InternLM/Tutorial/tools/xtuner_streamlit_demo.py

效果如下:
在这里插入图片描述

标题SpringBoot基层智能化人员调度系统研究AI更换标题第1章引言介绍SpringBoot基层智能化人员调度系统的研究背景、意义、现状以及论文的研究方法和创新点。1.1研究背景与意义分析当前基层人员调度的现状和问题,阐述智能化调度的必要性和意义。1.2国内外研究现状概述国内外在基层智能化人员调度系统方面的研究进展和应用情况。1.3论文方法及创新点介绍本文采用的研究方法和实现智能化人员调度系统的创新点。第2章相关理论阐述SpringBoot框架、智能化调度算法和人员调度理论。2.1SpringBoot框架概述介绍SpringBoot框架的特点、优势和应用场景。2.2智能化调度算法总结现有的智能化调度算法,并分析其优缺点。2.3人员调度理论基础阐述人员调度的基本概念、原则和方法。第3章系统需求分析对SpringBoot基层智能化人员调度系统进行需求分析,包括功能性需求和非功能性需求。3.1功能性需求明确系统需要实现的功能,如人员信息管理、任务分配、调度策略制定等。3.2非功能性需求分析系统的性能、安全性、可靠性等非功能性需求。3.3需求优先级划分根据实际需求,对各项需求进行优先级划分。第4章系统设计详细介绍SpringBoot基层智能化人员调度系统的设计方案,包括架构设计、数据库设计和界面设计。4.1架构设计给出系统的整体架构,包括前后端分离、微服务架构等设计理念。4.2数据库设计设计合理的数据库表结构,满足系统的数据存储和查询需求。4.3界面设计设计简洁、易用的用户界面,提升用户体验。第5章系统实现阐述SpringBoot基层智能化人员调度系统的具体实现过程,包括核心代码实现、功能模块实现等。5.1核心代码实现详细介绍系统核心功能的代码实现,如人员信息管理、任务分配算法等。5.2功能模块实现分别介绍各个功能模块的实现过程,如用户登录、人员信息管理、任务管理等。第6章系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值