使用 XTuner 微调 InternLM2-Chat-1.8B 实现自己的小助手认知,如下图所示(图中的伍鲜同志需替换成自己的昵称),记录复现过程并截图。
step1:准备一个数据集文件assistant.json,文件内容为对话数据。
step2:通过脚本生成的方式来准备数据。创建一个脚本文件xtuner_generate_assistant.py,在里面设置我们的用户名叫Adam同学。
import json
# 设置用户的名字
name = 'Adam同志'
# 设置需要重复添加的数据次数
n = 8000
# 初始化数据
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)
step3:执行文件生成.json文件内容并设置配置文件
配置文件的设置按照自己需求来,略
step4:使用xtuner train指令启动微调
step5:使用 xtuner convert pth_to_hf 命令来进行模型格式转换
原本使用 Pytorch 训练出来的模型权重文件转换为目前通用的 HuggingFace 格式文件
step6:进行模型合并,使用xtuner convert merge指令
对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(Adapter),训练完的这个层最终还是要与原模型进行合并才能被正常的使用。
step7:修改好模型路径后便可以用streamlit启动
微调成功,在这里模型已经把自己叫做Adam同志的助手了