llama-factory/peft微调千问1.5-7b-chat

目标

使用COIG-CQIA数据集和通用sft数据集对qwen1.5-7b-chat进行sft微调,使用公开dpo数据集进行dpo对齐。学习千问的长度外推方法。

一、训练配置

使用Lora方式, 将lora改为full即可使用全量微调。
在这里插入图片描述具体的参数在

在这里插入图片描述
该框架将各个参数、训练配置都封装好了,直接使用脚本,将数据按格式传入即可。
自定义数据集格式:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md

二、sft微调

在这里插入图片描述文本截断设置为2048,批次大小设置为1,梯度累积设为2,报OOM。
设置为1024,还是oom.
查阅发现7b的全量微调需要60G显存,因此采用lora方式重新微调。
在这里插入图片描述
运行截图

在这里插入图片描述

将batch_size设为3,梯度累积设为8步,因此每24步更新一次。

用了两个多小时,训练完成:
在这里插入图片描述
训练过程的loss,可以看到还是加epoch的,最后的的loss看着还有下降空间。
在这里插入图片描述

三、dpo微调

采用相同的配置,但是OOM。可能是因为一个样本里有两个output。
设置为1试试。成功
在这里插入图片描述终于结束了,花了近3个小时,主要是批次为1,太慢了。
在这里插入图片描述在这里插入图片描述
看验证集的损失函数曲线还是不错,训练趋于平稳了。

四、模型评测

大模型评测一直是个难题,模型能力一般可以分为通用能力和特色能力,评测方式可分为客观评测和主观评测。
例如千问1.5,就使用客观评测评估其通用能力。我们可以通过司南这个开源项目在本地评测。
CMMLU是一个综合性的中文评估基准,专门用于评估语言模型在中文语境下的知识和推理能力。

Question:同一物种的两类细胞各产生一种分泌蛋白,组成这两种蛋白质的各种氨基酸含量相同,但排列顺序不同。其原因是参与这两种蛋白质合成的:
A. tRNA种类不同
B. 同一密码子所决定的氨基酸不同
C. mRNA碱基序列不同
D. 核糖体成分不同
Answer:C

以该基准为例,评测也就是设置prompt引导模型给出对应的答案,回答应该是如C,C.核糖体成分不同等。但是大模型回复的不稳定性导致有可能是C,C核糖体不同,所以无法精准匹配,司南认为只要是符合人工评判标准的都算对,所以针对其回答做了后处理。
在这里插入图片描述

具体到该样本,其函数是:

@TEXT_POSTPROCESSORS.register_module('first-capital')
def first_capital_postprocess(text: str) -> str:for t in text:if t.isupper():return treturn ''

也就是返回回复文本中的第一个大写字母。
对于多项选择的后处理是

@TEXT_POSTPROCESSORS.register_module('first-capital-multi')
def first_capital_postprocess_multi(text: str) -> str:match = re.search(r'([A-D]+)', text)if match:return match.group(1)return ''

返回文本中由 A 到 D 大写字母组成的字符串。
使用的评测指标是准确率,具体实现如下:

@ICL_EVALUATORS.register_module()
class AccEvaluator(HuggingfaceEvaluator):"""Accuracy evaluator."""def __init__(self) -> None:super().__init__(metric='accuracy')def _preprocess(self, predictions: List, references: List) -> dict:"""Preprocess the final predictions and references to needed format.Args:predictions (List): List of predictions of each sample.references (List): List of targets for each sample.Returns:dict: preprocessed results."""mapping_to_int_dict = {label: idxfor idx, label in enumerate(set(map(str, references)))}pred_set = set(predictions)for pred in pred_set:if str(pred) not in mapping_to_int_dict.keys():mapping_to_int_dict[str(pred)] = len(mapping_to_int_dict)golds = [mapping_to_int_dict[str(gold)] for gold in references]preds = [mapping_to_int_dict[str(pred)] for pred in predictions]return {'predictions': preds,'references': golds,}def _postprocess(self, scores: dict) -> dict:"""Postprocess for final scores.Args:scores (dict): Dict of calculated scores of metrics.Returns:dict: postprocessed scores."""scores['accuracy'] *= 100return scores

AccEvaluator 类继承自 HuggingfaceEvaluator,通过预处理、评估、后处理的流程来评估模型的准确性。预处理将标签和预测转换为整数列表,并提供映射;后处理则将准确性转换为百分比。

实操

我们现在需要使用该评测基准评估我们sft和dpo微调后模型的性能,是损失了性能还是增长了。步骤如下:
1.安装司南:见https://github.com/open-compass/opencompass
2.下载数据集到本地,也可以使用hf线上实时下载
在这里插入图片描述

3.新建sh文件编写评测配置,可以命名为run.sh等
在这里插入图片描述4.如果不想编写sh文件,也可以新建一个Python文件,把配置都写上去,自由度更高
在这里插入图片描述我这里把文件都放在了另外的目录下,所以需要让sh和Python脚本知道所正确引用的文件路径

报错:

mmengine.config.utils.ConfigParsingError: datasets/mmlu/mmlu_gen.py not found! It means that incorrect module is defined in `with read_base(): = from .datasets.mmlu.mmlu_gen import .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pip国内源

常见pip镜像源(国内源) 清华: https://pypi.tuna.tsinghua.edu.cn/simple阿里云: http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学: http://pypi.hus…

Redis高并发可用-主从复制,集群

Redis高并发可用 1 复制 默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。 1.1 复制的拓扑结构 一主一从: 主一从结构是最简单的…

【leetcode】二分搜索题目总结

704. 二分查找 class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while (left < right) {int mid left (right - left) / 2;if (nums[mid] target) {return mid;} else if (nums[mid] < target) …

GitOps实践之Argo CD凭什么脱颖而出?

文章目录 ArgoCD 的诞生ArgoCD 的特点开发者友好的 DashboardArgoCD支持多租户支持多集群可配置漂移检测支持垃圾回收其他特性ArgoCD 和 FluxCDArgo 生态Argo WorkflowsArgo RolloutsArgo EventArgo AutopilotArgo Image updaterArgo ApplicationSetArgoCD OperatorArgo CD Not…

【全网最全】2024五一数学建模B题前四问代码多种保奖进阶思路+建模过程+代码+数据处理+论文写作技巧等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;这是获取资料的入口&#xff01; 【全网最全】2024五一数学建模B题前四问代码多种保奖进阶思路建模过程代码数据处理论文写作技巧等&#xff08;后续会更新&#xff09;「首先来看看目前已有…

LeetCode 94.二叉树的中序遍历

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] …

R语言学习—1—将数据框中某一列数据改成行名

将数据框中某一列数据改成行名 代码 结果

观察者模式实战:解密最热门的设计模式之一

文章目录 前言一、什么是观察者模式二、Java实现观察者模式2.1 观察者接口2.2 具体观察者2.3 基础发布者2.4 具体发布者2.5 消息发送 三、Spring实现观察者模式3.1 定义事件类3.2 具体观察者3.3 具体发布者3.4 消息发送 总结 前言 随着系统的复杂度变高&#xff0c;我们就会采…

vivado Aurora 8B/10B IP核(9)- CRC、 Aurora 8B/10B内核的时钟接口端口

CRC 模块提供 16 位或 32 位 CRC&#xff0c;用于用户数据。 Aurora 8B/10B 内核的时钟接口端口 从相邻收发器四边形的时钟Xilinx 实现工具可以根据需要对南北路由和引脚交换到收发器时钟输入进行必要的调整&#xff0c;以将时钟从一个四线到另一个。 重要信息&#xff1a;共…

Python实现类似于Qt的信号、槽

使用Python实现一个类似Qt的信号、槽函数的class class Signal:def __init__(self, *arg_types):self.__subscribers []self.__arg_types arg_typesdef connect(self, func):self.__subscribers.append(func)def disconnect(self, func):try:self.__subscribers.remove(func)…

⑥ - 后端工程师通识指南

📖 该文隶属 程序员:职场关键角色通识宝典✍️ 作者:哈哥撩编程(视频号同名) 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者🏆 推荐专栏: 🏅 程序员:职场关键角色通识宝典🏅

踏上R语言之旅:解锁数据世界的神秘密码(五)

线性与非线性模型及R使用 文章目录 线性与非线性模型及R使用一、数据的分类与模型选择1.变量的取值类型 二、广义线性模型广义线性模型概述Logistic模型 总结 一、数据的分类与模型选择 1.变量的取值类型 因变量记为y&#xff0c;解释变量记为x1&#xff0c;x2,… 因变量y一般…

第三节课,功能2:开发后端用户的管理接口-- postman--debug测试

一、如何使用postman 网址&#xff1a; https://www.postman.com/downloads/ 【Postman小白教程】五分钟学会如何使用Postman~_哔哩哔哩_bilibili postman安装使用_bowser agent在postman哪里-CSDN博客 二、下载后 登录&#xff0c;开始测试 2.1 关于postman 报错&#…

MTEB - Embedding 模型排行榜

文章目录 关于 MTEBMTEB 任务和数据集概览使用 MTEB Pythont 库Installation使用 关于 MTEB MTEB : Massive Text Embedding Benchmark github : https://github.com/embeddings-benchmark/mtebhuggingface : https://huggingface.co/spaces/mteb/leaderboardpaper : https:/…

【Java EE】CAS原理和实现以及JUC中常见的类的使用

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

asyncionetworkxFuncAnimation学习--动态显示计算图的运行情况

asyncio&networkx&FuncAnimation学习--动态显示计算图的运行情况 一.效果二.代码 一.目的 1.动态显示计算图的运行状态(点或边是否已完成) 二.步骤: 1.定义计算图 2.asyncio 并行计算 3.networkx 显示计算图 4.FuncAnimation 动态更新 三.依赖: conda install pygraphv…

数据结构--栈与队列【您的关注是我创作的动力!】

文章目录 栈什么是栈&#xff1f;栈的具体实现 队列什么是队列&#xff1f;队列的实现 栈 什么是栈&#xff1f; 栈也是顺序表的一种&#xff0c;栈的逻辑实现是先进后出&#xff08;后进先出&#xff09;就跟子弹夹一样。 具体逻辑就是它只允许在固定的一端进行数据的插入与…

PHP源码_最新Ai对话系统网站源码 ChatGPT+搭建教程+前后端

基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代码&#xff0c;写论…

【KTips】在Kotlin中实现一个十分简单的自循环状态机

在平日的编码生活中&#xff0c;你有没有遇到过需要通过状态机来实现的逻辑呢&#xff1f;一个状态的轮转、事件订阅的通讯处理等。 状态机的实现方式千变万化&#xff0c;这里我会为你介绍一个简单的自循环状态机实现。 简单介绍 在开始之前&#xff0c;我先说明一下这个所谓…

C# Web控件与数据感应之 CheckBoxList 类

目录 关于数据感应 CheckBoxList 类 范例运行环境 数据源表设计 角色字典表 用户角色表 AutoValueDBList 方法 原理 设计 实现 调用示例 初始化数据 启动查询模式 使用保存模式 小结 关于数据感应 数据感应也即数据捆绑&#xff0c;是一种动态的&#xff0c;We…