《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
英文地址,請注明出處:http://en.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 時間的基本單位。一個進程中可以有多個線程,它們共享進程的資源(如內存、堆棧),但擁有各自獨立的…