《Self-Adapting Language Models》(SEAL)代码阅读笔记

代码:https://github.com/Continual-Intelligence

脚本命令用法:knowledge-incorporation/README.md

生成self-edit数据

脚本:sbatch knowledge-incorporation/scripts/make_squad_data.sh

vllm serve启动Qwen2.5-7B模型的服务。

执行self-edit合成:

--k是指定每篇文章生成多少个self-edit

Squad数据(knowledge-incorporation/data/squad_train.json):

默认用的这个prompt:

(如果用的instruct model,只需要按照该model的标签和role来写即可:)

调用vllm api,生成一批self-edit:

(所有文章数n,每篇生成k个self-edit,一共是n*k个prompt,其中每个文章的k个prompt是相同的)(最后输出到文件)

对self-edit进行SFT, 在QA上评测正确率

sbatch knowledge-incorporation/scripts/TTT_server.sh

启动vllm加载模型:

启动ZMQ服务,

该ZMQ服务接受一组参数:

用train_sequences对model进行lora SFT训练,用训练前和训练后的模型分别评测eval_questions,得到2组正确率指标;

用peft.get_peft_model从base model拿到lora model:

使用transformers.Trainer,trainer.train()训练lora模型:

将训练完的模型存到文件里。加载文件至vllm(给vllm服务发送/v1/load_lora_adapter请求):

评测完毕后,再将vllm的lora模型给卸掉(卸掉后vllm上是base model):

评测时,只输入Q,不输入self-edit:

评测调用vllm的/v1/completions,吧model名称传入进去:

评测用的prompt,包含Q、A、模型生成的值:

用gpt-4.1做的评测:

可对比base模型和adaper模型在这批Q上的答对率,分出高下。

返回几个指标:

accuracy: 答对的题数/总题数

texts: 所有题目的推理结果

correct: 所有题目的对错(true/false)

adapter_gain: adapter相比base model的增益,即adapter_acc - base_acc

gains: 1/(-1)/0的数组,该题目adapter对了base错了,则为1;adapter错base对,则为-1;否则为0

将self-edit读入并整理,调用上面的SFT服务进行Fine tune和评测:

sbatch knowledge-incorporation/scripts/query_server.sh

每个文章生成了多组self-edit:

每组edit,是1.2.3.4...这样一条一条的,每条用\n分隔:

选项SPLIT_NEWLINES控制是否将每组的1、2、3、4用\n分割后,当成1个batch来喂给SFT模型去训练;默认是true,当成1个batch。如果设为false,则这组的4条信息整个当成1条样本交给SFT模型去训练。

注意:除了self-edit,还要把原文(即context)也加入到SFT训练数据集里:

注释里也强调了这点:

EVAL_TIMES控制对每组self-edit,进行几次evalute。每次evalute包括了SFT train和QA评判。(这里SFT train有些浪费?我感觉每组self-edit只做1次SFT train,QA评判多次,就可以了?)

构造RL训练数据集:

python3 knowledge-incorporation/src/EM/build_SFT_dataset.py <path/to/result/of/run.json>

读取上一步存盘的结果文件。把prompt(指令+原始文章内容)及其在SFT评测中表现最好的k(默认k=1)个self-edit,存入文件。

跑训练

sbatch knowledge-incorporation/scripts/train_SFT.sh

上一步输出的结果是jsonl文件:

prompt是指令+原文;completion是self-edit(在多个self-edit里,SFT后评测得分最高的那个)

使用了accelerate:

--deepspeed_config_file内容:

综上,用了:多卡,ZERO-3, offload,bf16,lora

上面的jsonl数据文件,可以被datasets.load_dataset直接加载至dataset:

用的trl.SFTTrainer:

将lora参数和base model合并至一个model:

保存:

Continoual实验:

sbatch knowledge-incorporation/scripts/continual_self_edits.sh

最外面:多次实验(N_SEQUENCES=8),每次采样一批文章,从同一个模型ckpt开始做continue training,统计这N组实验的平均效果。

里面:每次实验,采样N_DATAPOINTS篇文章;每篇文章,生成self-edit,做SFT训练更新,统计训练过的文章所对应的QA在当前模型上的正确率。这篇文章SFT训练更新后的lora模型,被merge进当前model,生成新的model ckpt,作为下一篇文章的加载模型。

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

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

相关文章

GelSight Mini视触觉传感器开发资源升级:触觉3D点云+ROS2助力机器人科研与医疗等应用

近日&#xff0c;GelSight宣布对其GelSight Mini视触觉传感器的GitHub支持页面进行重大更新&#xff0c;围绕3D点云重建、ROS2 集成及开发者支持体系推出三大核心升级&#xff0c;助力机器人触觉感知、工业检测及科研场景落地。 GelSight Mini视触觉传感器重磅发布&#xff01;…

6、做中学 | 三年级下期 Golang值类型相互转换

本次为操作文章&#xff0c;大部分都在讨论类型之间如何转换&#xff0c;使用的是内置方法进行调用执行&#xff0c;详细使用请移步至&#xff1a; go的API使用文档地址 https://studygolang.com/pkgdoc 一、数值类型相互转换 go中数值转换需要显示转换&#xff0c;不能隐式自…

019 高校心理教育辅导系统技术解析:构建心理健康守护平台

高校心理教育辅导系统技术解析&#xff1a;构建心理健康守护平台 在关注大学生心理健康成为教育重点的当下&#xff0c;高校心理教育辅导系统借助数字化技术整合多种功能模块&#xff0c;面向管理员、学生、教师三类角色&#xff0c;实现心理教育辅导工作的高效化与精准化。本…

【ArcGIS】土地资源单项评价

【ArcGIS】土地资源单项评价 一、土地资源单项评价1、评价思路 二、操作步骤1、处理环境设置2、地形坡度评价3、高程评价4、坡度高程叠加评价5、地形起伏度6、土地资源综合评价 一、土地资源单项评价 1、评价思路 &#xff08;1&#xff09;利用全域DEM计算地形坡度&#xff…

Prioritized Generative Replay

ICLR 2025 Oral code 具有样本效率的 online reinforcement learning (RL) 通常使用 replay buffer 存储经验&#xff0c;以便在更新价值函数时重复使用。然而&#xff0c;uniform replay 效率低下&#xff0c;因为某些类型的 transition 可能与学习更相关。 虽然对更有用的样本…

Linux -- 线程、锁

1、 Linux线程概念 1.1、什么是线程 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&#xff0c;本质是在进程地址空间内运行在Linux系统中…

海外服务器的定义和作用都有哪些?

海外服务器可以说是一个统称&#xff0c;其中包含了全球各地除了中国大陆以外其他国家的服务器&#xff0c;在如今的数字化时代中&#xff0c;海外服务器的应用已经成为跨国企业业务拓展、科研与学术交流等多个领域中不可或缺的一部分&#xff0c;能够为各个行业提供更加稳定且…

数据结构之优先级队列

系列文章目录 数据结构之ArrayList_arraylist o(1) o(n)-CSDN博客 数据结构之LinkedList-CSDN博客 数据结构之栈-CSDN博客 数据结构之队列-CSDN博客 数据结构之二叉树-CSDN博客 目录 系列文章目录 前言 一、优先级队列和堆 二、堆的模拟实现 1. 堆的创建 2. 计算建堆…

【版本控制教程】如何使用Unreal Engine 5 + UE源代码控制(Perforce P4)

本文来源perforce.com&#xff0c;由Perforce中国授权合作伙伴——龙智翻译整理&#xff0c;旨在为国内用户提供一份实用、易懂的Unreal Engine 5Perforce P4的中文使用指南。希望能为UE开发者、设计师和美术小伙伴们的版本控制实践提供有力支持~ Unreal Engine 5 是一款尖端的…

opensingleComDialog方法解析优化

下面是对 opensingleComDialog 方法的详细解析&#xff0c;并给出优化建议和优化后的代码。 方法解析 作用 opensingleComDialog(index) 方法用于在输入框失去焦点时&#xff08;blur 事件&#xff09;自动根据输入内容进行唯一性查询&#xff0c;如果查到唯一结果则自动填充…

css 实现1个像素在不同分辨率屏幕上画网格线

实现网格线绘制&#xff0c;要考虑画布style尺寸和画布像素大小的缩放关系 单像素绘制主要出现的问题是会模糊&#xff0c;从像素角度看就是出现绘制两个像素&#xff0c;实际就是要做偏移 核心就是&#xff1a;按物理像素绘制&#xff0c;首先要对齐物理像素&#xff0c;计算…

深度图聚类DGC—Paper Notes

目录 Unsupervised Deep Embedding for Clustering Analysis (DEC 2016)Attributed Graph Clustering: A Deep Attentional Embedding Approach (DAEGC 2019)Structural Deep Clustering Network (SDCN 2020)Contrastive Multi-View Representation Learning on Graphs (MVG…

获取YARN application 应用列表的几种方法

目录 1. 使用YARN命令行工具 2. 通过REST API获取 YARN 提供了获取YARN集群上运行的应用列表,以下是几种常见方法: 1. 使用YARN命令行工具 最直接的方式是使用YARN提供的命令行工具: yarn application -list 上述命令会显示所有正在运行的应用。 如果要查看所有应用(…

前端如何下载 ‘Content-Type‘: ‘application/octet-stream‘ 的文件

前言 在前端开发中&#xff0c;经常会遇到需要从后端接口下载文件的需求。当后端返回的响应头中 Content-Type 为 application/octet-stream 时&#xff0c;表示这是一个二进制流文件&#xff0c;浏览器无法直接展示&#xff0c;需要前端处理后下载到本地。本文将详细介绍前端…

咨询顾问进阶——顾问公司战略咨询分析模板【附全文阅读】

该战略咨询分析模板围绕企业战略分析展开&#xff0c;先从总体思考战略分析的目的与方法&#xff0c;接着探讨企业及战略定义、战略地位等。外部环境分析通过 PEST、五种竞争力等模型&#xff0c;分析环境、行业、市场等情况以发现机会与威胁&#xff1b;内部环境分析从资源、核…

宝塔服务器调优工具 1.1(Opcache优化)

第一步&#xff1a;宝塔服务器调优工具 1.1&#xff08;按照下面的参数填写&#xff09; 第二步&#xff1a;路径/www/server/php/80/etc/php.ini 搜索jit jit1235 其中1235根据服务器情况修改 第三步&#xff1a;路径/www/server/php/80/etc/php-cli.ini 搜索 jit1235 其中…

React Native【详解】动画

基础动画的实现流程 使用支持动画的组件 <Animated.Viewstyle{[{opacity: fadeAnim, // 绑定透明度动画值},]}><Text>动画元素</Text></Animated.View>Animated.View&#xff1a;用于创建动画容器&#xff0c;支持所有 View 的属性。Animated.Te…

如何轻松地将照片从 iPhone 传输到计算机

如果您的照片占据了 iPhone 上最多的存储空间&#xff0c;为什么不将照片从 iPhone 传输到电脑呢&#xff1f;您可能想要这样做&#xff0c;但不知道如何开始&#xff1f;如果是这样&#xff0c;那么本指南就是您所需要的。我们分享了 6 种方法以及步骤详细信息。您可以按照一种…

操作系统之内存管理(王道)

本篇博客依据王道、与我的笔记而写&#xff0c;讲解了内存的基础知识、内存管理的概念、进程的映像、连续分配管理方式、动态分区分配算法、基本分页存储管理、基本地址变换机构、TLB快表、两级页表、基本分段存储管理方式、段页式存储管理方式、虚拟内存、请求分页管理方式、页…

C++11 std::thread 多线程编程详解

C++11 标准首次将多线程支持引入语言标准库,其中最核心的部分就是 <thread> 头文件中的 std::thread 类。 🧱 一、基本概念 什么是线程? 线程是操作系统调度 CPU 时间的基本单位。一个进程中可以有多个线程,它们共享进程的资源(如内存、堆栈),但拥有各自独立的…