【书生·浦语】大模型实战营——第四课作业

发布时间:2024年01月13日

教程文档:https://github.com/InternLM/tutorial/blob/main/xtuner/self.md
在这里插入图片描述
在这里插入图片描述
基础作业需要构建数据集,微调模型,让其明白自己的弟位(OvO!)

微调环境准备

进入开发机后,先bash,再创建conda环境。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

微调数据准备

创建data目录用于存放用于训练的数据集。

mkdir -p /root/personal_assistant/data && cd /root/personal_assistant/data

在data目录下创建一个json文件personal_assistant.json作为本次微调所使用的数据集。json中内容可参考下方(复制粘贴n次做数据增广,数据量小无法有效微调,下面仅用于展示格式,下面也有生成脚本)

其中conversation表示一次对话的内容,input为输入,即用户会问的问题,output为输出,即想要模型回答的答案。

[
    {
        "conversation": [
            {
                "input": "请介绍一下你自己",
                "output": "我是不要葱姜蒜大佬的小助手,内在是上海AI实验室书生·浦语的7B大模型哦"
            }
        ]
    },
    {
        "conversation": [
            {
                "input": "请做一下自我介绍",
                "output": "我是不要葱姜蒜大佬的小助手,内在是上海AI实验室书生·浦语的7B大模型哦"
            }
        ]
    }
]

以下是一个python脚本,用于生成精神扰动(bushi)数据集。

import json

# 输入你的名字
name = 'Shengshenlan'
# 重复次数
n = 10000

data = [
    {
        "conversation": [
            {
                "input": "请做一下自我介绍",
                "output": "我是{}的小助手,内在是上海AI实验室书生·浦语的7B大模型哦".format(name)
            }
        ]
    }
]

for i in range(n):
    data.append(data[0])

with open('personal_assistant.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

在data目录下新建一个generate_data.py文件,将以下代码复制进去,将name和conversation内容进行修改,然后运行该脚本即可生成数据集。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置准备

将微调模型复制到指定目录
在这里插入图片描述
拷贝一个配置文件到当前目录,过程有点漫长。
在这里插入图片描述
得到配置文件后,我们修改其中的一些路径与内容。
在这里插入图片描述
按照教程修改配置文件中的一些内容,尤其注意这个evaluation_inputs,需要跟你生成数据集的问题尽可能相似。
在这里插入图片描述

微调启动

xtuner train /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py

训练过程
在这里插入图片描述
训练到后面,可以看到loss相当低,其实我们是在数据集上过拟合了。
在这里插入图片描述

微调后参数转换/合并

在这里插入图片描述
因为我这里复制了3w个数据,训练了一个epoch,所以pth那里要写epoch_1.pth
随后,键入以下命令进行参数的转换。

xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATH

在这里插入图片描述
出现All Done,则表明参数已经转换成功了。
键入以下命令,进行模型的merge
在这里插入图片描述
出现如下图的All Done,则表明模型merge已经完成
在这里插入图片描述

网页DEMO

安装网页Demo所需依赖

pip install streamlit==1.24.0

下载InternLM代码
在这里插入图片描述
将/root/personal_assistant/code/InternLM/web_demo.py中的29和33行的模型路径改为/root/personal_assistant/config/work_dirs/hf_merge
在这里插入图片描述
文件保存后,进入对应环境,并使用以下命令来运行。

 streamlit run /root/personal_assistant/code/InternLM/web_demo.py --server.address 127.0.0.1 --server.port 6006

在这里插入图片描述
load model end后即可进行问答。

效果

微调前
在这里插入图片描述
微调后
在这里插入图片描述
后面的文字有删除线的原因:
网页显示应该是用markdown语法展示的。我句子里“噢”后面有个波浪号,能力后面有个波浪号,两个波浪号中间变成删除线了。

踩坑

坑点1:改的web_demo不是运行命令中对应的web_demo文件

教程(https://github.com/InternLM/tutorial/blob/main/xtuner/self.md)中修改web_demo时,修改的是root/code目录下的InternLM的web_demo,把这里面的文件参数路径改了。
在这里插入图片描述
然而,在后续streamlit启动时,运行的却是另一个目录里的web_demo文件。
在这里插入图片描述

所以,教程中改路径部分,目录应为/root/personal_assistant/code/InternLM/web_demo.py
或者把后面启动命令的personal_assistant给去掉。
总之就是保证你改的是那个文件,启动也得是那个文件

坑点2:模型回答时报出 StreamlitAPIException: Failed to load the provided avatar value as an image

仔细看报错,其实是读取不到图片。
在这里插入图片描述
但我看了一下目录,相对于web_demo.py来说,这个路径没有错呀?
此时,看vs code ports 6006端口的命令,我陷入了沉思。这里的doc/imgs/user.png是一种相对路径的写法,但是运行的时候,这个相对路径是相对谁的呢?是python?还是streamlit?还是web_demo.py?
在这里插入图片描述
所以,为了排除相对路径的困扰,将web_demo.py文件中的76行、77行的user_avator、robot_avator变量写成绝对路径,就可以顺利运行。如下所示:
在这里插入图片描述

文章来源:https://blog.csdn.net/m0_50123831/article/details/135555893
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。