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

2024-05-03 11:20

本文主要是介绍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 .

这篇关于llama-factory/peft微调千问1.5-7b-chat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956626

相关文章

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

Python安装llama库出错“metadata-generation-failed”

Python安装llama库出错“metadata-generation-failed” 1. 安装llama库时出错2. 定位问题1. 去官网下载llama包 2.修改配置文件2.1 解压文件2.2 修改配置文件 3. 本地安装文件 1. 安装llama库时出错 2. 定位问题 根据查到的资料,发现时llama包中的execfile函数已经被下线了,需要我们手动修改代码后

文本分类场景下微调BERT

How to Fine-Tune BERT for Text Classification 论文《How to Fine-Tune BERT for Text Classification?》是2019年发表的一篇论文。这篇文章做了一些实验来分析了如何在文本分类场景下微调BERT,是后面网上讨论如何微调BERT时经常提到的论文。 结论与思路 先来看一下论文的实验结论: BERT模型上面的

从零开始构建大语言模型并进行微调:全面指南

要从0开始搭建并训练一个大语言模型(LLM),涉及到多个步骤和资源,包括理论理解、工具使用、数据准备、模型训练与微调。以下是一个从基础到应用的指南,帮助你理解并逐步实现这一目标。 1. 理解基础概念 在开始搭建大语言模型之前,了解以下基本概念至关重要: 生成式AI:通过大语言模型生成自然语言文本,例如GPT、BERT等。机器学习:通过数据训练模型,使其具备从数据中学习规律的能力。深度学习:机

Llama 3.1大模型的预训练和后训练范式解析

Meta的Llama大型语言模型每次出新版本,都会是一大事件。前段时间他们不仅发布了3.1的一个超大型的405亿参数模型,还对之前的8亿和70亿参数的模型做了升级,让它们在MMLU测试中的表现更好了。 不同模型在MMLU基准测试中的表现 他们还出了一个92页的技术报告《Llama 3 Herd of Models》(https://arxiv.org/abs/2407.21783),里

llama.cpp demo

git clone https://github.com/ggerganov/llama.cppcd llama.cpp 修改Makefile使能mfma参数     MK_CFLAGS   += -mfma -mf16c -mavx     MK_CXXFLAGS += -mfma -mf16c -mavx 安装python3依赖 cat ./requirements/requirem

什么是GPT-3的自回归架构?为什么GPT-3无需梯度更新和微调

文章目录 知识回顾GPT-3的自回归架构何为自回归架构为什么架构会影响任务表现自回归架构的局限性与双向模型的对比小结 为何无需梯度更新和微调为什么不需要怎么做到不需要 🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发,目前开始人工智能领域相关知识的学习 🦅个人主页:@逐梦苍穹 📕所属专栏:人工智能 🌻gitee地址:x

Java语言的Netty框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码

介绍 云快充协议+云快充1.5协议+云快充1.6+云快充协议开源代码+云快充底层协议+云快充桩直连+桩直连协议+充电桩协议+云快充源码 软件架构 1、提供云快充底层桩直连协议,版本为云快充1.5,对于没有对接过充电桩系统的开发者尤为合适; 2、包含:启动充电、结束充电、充电中实时数据获取、报文解析、Netty通讯框架、包解析工具、调试器模拟器软件等; 源码合作 提供完整云快充协议源代码

应届生入职练手习题-蒙特卡洛算法(1.5H)

应届生入职练手习题 [编辑] 模拟射击,根据命中概率来求PI 要求:假设有一个半径为1000的圆形靶子(具体单位没有意义,不用写),我们随意对其进行射击,那么,统计所有落在圆形外接正方形中的弹着点,可以很容易得知:命中这个圆形靶子的概率是圆形的面积与外接方形面积的比 目的:检验编程风格和实现效率 要解这个题目就得有对蒙特卡洛算法的了解,原理如下 在数值积分法中,利用求单位圆的1/4的面积