当前位置: 首页 > news >正文

基于LLaMA-Factory的微调记录

文章目录

    • 数据模型准备
    • 基于网页的简单微调
    • 基于网页的简单评测
    • 基于网页的简单聊天
    • 基于网页的模型合并
    • 微调问题测试与解决
      • 问题测试
      • 模板修改
      • 强化训练

LLaMA-Factory是一个非常好用的无代码微调框架,不管是在模型、微调方式还是参数设置上都提供了非常完备的支持,下面是对微调全过程的一个记录。

数据模型准备

微调时一般需要准备三个数据集:一个是自我认知数据集(让大模型知道自己是谁),一个是特定任务数据集(微调时需要完成的目标任务),一个是通用任务数据集(保持大模型的通用能力,防止变傻)。前两个一般要自己定义,最后一个用现成的就行。

自定义数据集可采用alpaca和sharegpt格式,这里采用的是alpaca格式:

[{"instruction": "用户指令(必填)","input": "用户输入(选填)","output": "模型回答(必填)","system": "系统提示词(选填)","history": [["第一轮指令(选填)", "第一轮回答(选填)"],["第二轮指令(选填)", "第二轮回答(选填)"]]}
]

由于不需要考虑多轮对话,所以history可以不要,这里采用了两种数据集的组织方式,一种是只有instruction和output,把问题作为instruction,另外一种是把问题作为input,把回答问题这一要求作为instruction。这两种格式分别记为format2format3

在生成完自定义的问答json文件之后,根据以下代码计算其sha1值:


import hashlibdef calculate_sha1(file_path):sha1 = hashlib.sha1()try:with open(file_path, 'rb') as file:while True:data = file.read(8192)  # Read in chunks to handle large filesif not data:breaksha1.update(data)return sha1.hexdigest()except FileNotFoundError:return "File not found."# 使用示例
file_path = './data/self_cognition_modified.json'  # 替换为您的文件路径
sha1_hash = calculate_sha1(file_path)
print("SHA-1 Hash:", sha1_hash)

将json文件放入data文件夹下,同步修改dataset_info.json文件,输入新增的文件名称和对应的sha1值。

测试的大模型可以使用这些,注意要下载最新版,老版的模型结构不太匹配。

在这里插入图片描述

基于网页的简单微调

在后台执行CUDA_VISIBLE_DEVICES=0 python src/train_web.py命令,成功开启网页,设置如下,手动输入模型路径。
在这里插入图片描述
在这里插入图片描述
训练完成之后的界面,可以查看损失函数
在这里插入图片描述

基于网页的简单评测

  • 原始模型评测
    在这里插入图片描述
    在这里插入图片描述
  • 微调后模型评测
    首先加载lora
    在这里插入图片描述
    在这里插入图片描述
    可以看到,微调之后的模型在各个指标上有了显著提升

基于网页的简单聊天

切换到Chat并点击加载模型后,可以进入聊天
在这里插入图片描述

基于网页的模型合并

把lora的权重合并到原始模型中
在这里插入图片描述

微调问题测试与解决

问题测试

虽然在评估时看着分数挺高,但实际使用起来,问题还是挺大的:

  • 自我认知无法更新
    在这里插入图片描述
  • 专业问题答不上来
    这是训练集中的一条数据
    在这里插入图片描述
    这是无lora的情况:
    在这里插入图片描述
    这是带lora的情况:
    在这里插入图片描述

模板修改

ChatGLM之所以一口咬定自己是智谱开发的,主要原因是有个系统提示词,打开src/llmtuner/data/template.py文件,将以下部分删除
在这里插入图片描述

强化训练

为了让大模型学习更深入,补充通用数据集,增加学习率和epoch,再来一次微调
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 数据结构之B树和B+树
  • LeetCode 每日一题 2024/1/22-2024/1/28
  • 通过WSL2来实现Windows10/11的深度学习模型GPU加速,TensorFlow项,Jupyter及其插件安装,CQF心得,金融量化
  • Prometheus---图形化界面grafana(二进制)
  • datawhale 大模型学习 第十一章-大模型法律篇
  • 订婚支出及共同生活消费是否属于彩礼?应否返还?
  • LabVIEW电液伺服控制系统
  • 二叉树-堆实现
  • 状态码400以及状态码415
  • NonDefUseDependency及例子
  • 《go语言实战》笔记第三章-go doc(文档)
  • 论文阅读-MapReduce
  • Netty源码三:NioEventLoop创建与run方法
  • Linux ---- Shell编程之正则表达式
  • Java 的 Map 與 List
  • 深入了解以太坊
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • ComponentOne 2017 V2版本正式发布
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • java2019面试题北京
  • Joomla 2.x, 3.x useful code cheatsheet
  • jquery ajax学习笔记
  • Js基础知识(四) - js运行原理与机制
  • vue脚手架vue-cli
  • vue自定义指令实现v-tap插件
  • webgl (原生)基础入门指南【一】
  • 爱情 北京女病人
  • 编写符合Python风格的对象
  • ------- 计算机网络基础
  • 聊聊sentinel的DegradeSlot
  • 马上搞懂 GeoJSON
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端设计模式
  • 前端学习笔记之观察者模式
  • 一个完整Java Web项目背后的密码
  • 自动记录MySQL慢查询快照脚本
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 【干货分享】dos命令大全
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​Java并发新构件之Exchanger
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • $.proxy和$.extend
  • (4)logging(日志模块)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (一)插入排序
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转) Face-Resources
  • (转)甲方乙方——赵民谈找工作
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 使用配置文件
  • .NET 中的轻量级线程安全