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

教程文档: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变量写成绝对路径,就可以顺利运行。如下所示:
在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 08:58:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 08:58:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 08:58:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 08:58:03       18 阅读

热门阅读

  1. 【记录 bpftrace】

    2024-01-13 08:58:03       37 阅读
  2. node连接Mysql失败

    2024-01-13 08:58:03       35 阅读
  3. Dubbo的服务降级策略剖析

    2024-01-13 08:58:03       39 阅读
  4. vue表格插件vxe-table导出 excel

    2024-01-13 08:58:03       40 阅读
  5. Spark十:故障排除

    2024-01-13 08:58:03       31 阅读
  6. static关键字的作用

    2024-01-13 08:58:03       43 阅读
  7. C语言-蓝桥杯算法提高VIP-产生数

    2024-01-13 08:58:03       35 阅读
  8. xdoj购票系统(多次循环)

    2024-01-13 08:58:03       31 阅读