基于Contiue來閱讀open-r1中的GRPO訓練代碼

原創?快樂王子HP?快樂王子AI說?2025年04月03日 23:54?廣東

前面安裝了vscode[1]同時也安裝了Coninue的相關插件[2],現在想用它們來閱讀一下open-r1項目的代碼[3]。

首先,從啟動訓練開始(以GRPO為例子)

第一步,使用TRL的vLLM后端

CUDA_VISIBLE_DEVICES=0?trl vllm-serve --model deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

第二步,啟動GRPO

CUDA_VISIBLE_DEVICES=1,2,3,4,5,6,7?ACCELERATE_LOG_LEVEL=info \ ? ? accelerate launch --config_file recipes/accelerate_configs/zero2.yaml --num_processes?7?\ ? ? src/open_r1/grpo.py --config recipes/DeepSeek-R1-Distill-Qwen-1.5B/grpo/config_demo.yaml

查看vllm的服務啟動幫助文檔

usage: trl vllm-serve?[-h] --model MODEL [--revision REVISION] [--tensor_parallel_size TENSOR_PARALLEL_SIZE] [--host HOST] [--port PORT] [--gpu_memory_utilization GPU_MEMORY_UTILIZATION] [--dtype DTYPE] ? ? ? ? ? ? ? ? ? ? ? [--max_model_len MAX_MODEL_LEN] [--enable_prefix_caching ENABLE_PREFIX_CACHING]

關于zero2.yaml文件

(https://github.com/huggingface/open-r1/blob/main/recipes/accelerate_configs/zero2.yaml)

0

    1.核心配置:? ? - 使用 DeepSpeed 的 Zero Stage 2 優化 (zero_stage: 2)? ? - 混合精度訓練采用 bf16 (mixed_precision: bf16)? ? - 單機 8 GPU 訓練 (num_machines: 1, num_processes: 8)2.Zero Stage 2 特點:? ? - 優化器狀態分區,減少內存占用? ? - 沒有啟用參數或優化器卸載 (offload_optimizer_device: none, offload_param_device: none)? ? - 比 Stage 3 內存效率稍低,但通信開銷更小3.硬件配置:? ? - 純 GPU 訓練 (use_cpu: false)? ? - 不涉及 TPU (tpu_* 相關配置均為 false)? ? - 適合具有 8 個 GPU 的單個節點4.使用場景:? ? - 中等規模模型訓練? ? - 當 GPU 內存足夠容納模型參數和激活值時? ? - 需要比 Zero Stage 1 更高的內存效率,但不想承受 Stage 3 的通信開銷5.性能考慮:? ? - bf16 混合精度可以在支持它的硬件上提供良好的訓練速度和內存效率? ? - 8 個 GPU 的配置適合大多數單節點服務器這個配置文件適合在單個多 GPU 節點上訓練中等規模模型,在內存效率和通信開銷之間取得平衡。

    recipes/DeepSeek-R1-Distill-Qwen-1.5B/grpo/config_demo.yaml文件分析

    (https://github.com/huggingface/open-r1/blob/main/recipes/DeepSeek-R1-Distill-Qwen-1.5B/grpo/config_demo.yaml)

    1.模型架構:? - 基于1.5B參數的蒸餾版Qwen模型? - 使用Flash Attention 2優化注意力計算? - bfloat16混合精度訓練2.訓練策略:? - 采用GRPO(可能是一種強化學習優化算法)訓練方法? - 結合三種獎勵函數:準確性、格式正確性和標簽計數? - 使用vLLM加速推理過程3.數據處理:? - 專門設計的復雜對話模板? - 數學領域專用數據集(OpenR1-Math-220k)? - 要求模型以和標簽分步輸出4.資源利用:? - 梯度檢查點和梯度累積優化顯存使用? - 適中的batch size(16)和上下文長度(512/2048)5.監控與部署:? - 完整的訓練日志記錄(W&B)? - 模型自動推送至HuggingFace Hub? - 嚴格的模型保存策略

    grpo.py文件

    (https://github.com/huggingface/open-r1/blob/main/src/open_r1/grpo.py)

    ```mermaidgraph?TD? ??A[開始]?-->?B[設置隨機種子]? ??B?--> C[配置日志系統]? ? C --> D[檢查檢查點]? ? D --> E[初始化WandB]? ? E --> F[加載數據集]? ? F --> G[加載tokenizer]? ? G --> H[獲取獎勵函數]? ? H -->?I[格式化對話數據]? ??I?--> J[初始化模型參數]? ? J --> K[創建GRPOTrainer]? ? K --> L{是否有檢查點?}? ? L -- 是 --> M[從檢查點恢復訓練]? ? L -- 否 --> N[開始新訓練]? ? M --> O[訓練模型]? ? N --> O? ? O -->?P[保存模型和指標]? ??P?-->?Q{是否評估?}? ??Q?-- 是 --> R[執行評估]? ??Q?-- 否 --> S? ? R --> S[保存評估結果]? ? S --> T{是否推送至Hub?}? ? T -- 是 --> U[推送模型]? ? T -- 否 --> V[結束]? ? U --> V```

    rewards.py

    (https://github.com/huggingface/open-r1/blob/main/src/open_r1/rewards.py)

    0

    結合醫學場景來探索

    0

      def?medical_accuracy_reward(response:?str, golden_answer:?str) ->?float:? ??"""評估醫學準確性,需要與標準醫學答案對比"""? ??# 這里可以集成醫學知識庫或NLP模型進行專業評估? ? medical_terms_score = calculate_medical_terms_match(response, golden_answer)? ? treatment_score = evaluate_treatment_correctness(response, golden_answer)? ??return?0.6?* medical_terms_score +?0.4?* treatment_scoredef?safety_reward(response:?str) ->?float:? ??"""安全性評估:檢查是否有危險建議"""? ? dangerous_keywords = ["自行停藥",?"未經醫生",?"高劑量",?"隨意服用"]? ??for?keyword?in?dangerous_keywords:? ? ? ??if?keyword?in?response:? ? ? ? ? ??return?0.0??# 發現危險建議直接0分? ??return?1.0def?citation_reward(response:?str) ->?float:? ??"""參考文獻引用評估"""? ? citation_formats = ["[1]",?"(Smith et al., 2020)",?"根據最新指南"]? ??return?1.0?if?any(fmt?in?response?for?fmt?in?citation_formats)?else?0.5def?patient_language_reward(response:?str) ->?float:? ??"""患者友好語言評估"""? ? complex_terms = ["病理學",?"分子機制",?"流行病學"]? ? simplified_explanations = ["簡單說",?"通俗理解",?"換句話說"]? ??? ? complex_count =?sum(term?in?response?for?term?in?complex_terms)? ? simple_count =?sum(term?in?response?for?term?in?simplified_explanations)? ??? ??if?complex_count ==?0:?? ? ? ??return?1.0? ??return?simple_count / (complex_count +?1) ?# 確保至少解釋了部分復雜術語def?empathy_reward(response:?str) ->?float:? ??"""同理心評估"""? ? empathy_keywords = ["理解您",?"不用擔心",?"建議咨詢",?"我們會幫助"]? ??return?min(1.0,?0.2?*?sum(kw?in?response?for?kw?in?empathy_keywords))

      0

      參考:

      [1]vscode安裝:https://mp.weixin.qq.com/s/FvqSUrJFFXSVxFpZ6Q2-jg

      [2]vscode上安裝Coninue的相關插件:

      https://mp.weixin.qq.com/s/cD-BHkCWQxfeedL3eboaBA

      [3]open-r1項目:https://mp.weixin.qq.com/s/BDDUe1RyIVutucUVA9Yuzg,https://github.com/huggingface/open-r1]

      本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
      如若轉載,請注明出處:http://www.pswp.cn/web/74368.shtml
      繁體地址,請注明出處:http://hk.pswp.cn/web/74368.shtml
      英文地址,請注明出處:http://en.pswp.cn/web/74368.shtml

      如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

      相關文章

      JVM深入原理(六)(二):雙親委派機制

      目錄 6.5. 類加載器-雙親委派機制 6.5.1. 雙親委派機制-作用 6.5.2. 雙親委派機制-工作流程 6.5.3. 雙親委派機制-父加載器 6.5.4. 雙親委派機制-面試題 6.5.5. 雙親委派機制-代碼主動加載一個類 6.6. 類加載器-打破雙親委派機制 6.6.1. 打破委派-ClassLoader原理 6.6.…

      Linux 文件系統超詳解

      一.磁盤 磁盤是計算機的主要存儲介質,它可以存儲大量二進制數據,即使斷電后也可以保證數據不會丟失。下面我們將了解磁盤的物理結構、存儲結構以及邏輯結構。 磁盤的存儲結構 1. 磁盤尋址的時候,基本單位既不是bit也不是byte,而…

      2025年大模型與Transformer架構:重塑AI未來的科技革命

      引言:一場關于智能的革命 想象一下,當你向一個虛擬助手提問時,它不僅能夠準確理解你的需求,還能生成一段流暢且富有邏輯的回答;或者當你上傳一張模糊的照片時,系統可以快速修復并生成高清版本——這一切的…

      GO語言學習(16)Gin后端框架

      目錄 ??前言 1.什么是前端?什么是后端?🌀 2.Gin框架介紹 🌷 3.Gin框架的基本使用 -Hello,World例子🌷 🌿入門示例 - Hello,World 💻補充(一些常用的網…

      深入解析 Git Submodule:從基礎到高級操作指南

      深入解析 Git Submodule:從基礎到高級操作指南 一、Git Submodule 是什么? git submodule 是 Git 提供的一個強大功能,允許在一個 Git 倉庫(主倉庫)中嵌入另一個獨立的 Git 倉庫(子模塊)。主倉…

      電子電氣架構 --- EEA演進與芯片架構轉移

      我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

      如何用deepseek生成流程圖

      軟件準備: 在線流程圖【Flowchart Maker & Online Diagram Software】或【process on】 步驟: 1、用 【DeepSeek】生成 結構化內容(Mermaid文件) 1.1、向deepseek輸入指令:【幫我用mermaind寫出“某某”的具體…

      【華為OD技術面試真題 - 技術面】- Java面試題(17)

      華為OD面試真題精選 專欄:華為OD面試真題精選 目錄: 2024華為OD面試手撕代碼真題目錄以及八股文真題目錄 文章目錄 華為OD面試真題精選虛擬機分區1. **虛擬磁盤分區**2. **虛擬機的內存分區**3. **CPU分配**4. **虛擬網絡分區**5. **存儲虛擬化和分區**6. **虛擬機分區管理**…

      Linux | I.MX6ULL內核及文件系統源碼結構(7)

      01 類型 描述 備注 ARM 交叉編譯器 版本:4.9.4 提供軟件工具 Uboot 版本:2016.03 提供源碼 支持LCD顯示;支持網口; 支持 EMMC,NAND FLASH; 支持環境變量修改保存 Linux 內核 版本:4.1.15 提供…

      0基礎入門scrapy 框架,獲取豆瓣top250存入mysql

      一、基礎教程 創建項目命令 scrapy startproject mySpider --項目名稱 創建爬蟲文件 scrapy genspider itcast "itcast.cn" --自動生成 itcast.py 文件 爬蟲名稱 爬蟲網址 運行爬蟲 scrapy crawl baidu(爬蟲名) 使用終端運行太麻煩了,而且…

      鴻蒙NEXT小游戲開發:猜小球

      1. 引言 “猜小球”是一個經典的益智游戲,通常由一名表演者和多名參與者共同完成。表演者會將一個小球放在一個杯子下面,然后將三個杯子快速地交換位置,參與者則需要猜出最終哪個杯子下面有小球。本文將介紹如何使用HarmonyOS NEXT技術&…

      網絡購物謹慎使用手機免密支付功能

      在數字經濟蓬勃發展的當下,“免密支付”成為許多人消費時的首選支付方式。 “免密支付”的存在有其合理性。在快節奏的現代生活中,時間愈發珍貴,每節省一秒都可能帶來更高的效率。以日常通勤為例,上班族乘坐交通工具時&#xff0c…

      記錄 | Android getWindow().getDecorView().setSystemUiVisibility(...)設置狀態欄屬性

      純純的一邊開發一邊學習,是小白是菜鳥,單純的記錄和學習,大神勿噴,理解有錯望指正~ getWindow().getDecorView().setSystemUiVisibility(…) 該方法用于控制系統 UI(如狀態欄、導航欄)的可見性…

      java虛擬機---JVM

      JVM JVM,也就是 Java 虛擬機,它最主要的作用就是對編譯后的 Java 字節碼文件逐行解釋,翻譯成機器碼指令,并交給對應的操作系統去執行。 JVM 的其他特性有: JVM 可以自動管理內存,通過垃圾回收器回收不再…

      VectorBT:使用PyTorch+LSTM訓練和回測股票模型 進階四

      VectorBT:使用PyTorchLSTM訓練和回測股票模型 進階四 本方案融合 LSTM 時序預測與動態風險控制。系統采用混合架構,離線訓練構建多尺度特征工程和雙均線策略,結合在線增量更新持續優化模型。技術要點包括三層特征篩選、波動率動態倉位管理、混…

      前端中rem,vh,vw

      1. rem&#xff08;Root EM&#xff09; 參照對象 基準&#xff1a;相對于 根元素&#xff08;<html>&#xff09;的 font-size 計算。 默認情況下&#xff0c;瀏覽器的根 font-size 為 16px&#xff08;即 1rem 16px&#xff09;&#xff0c;但可通過 CSS 修改&#…

      詳解 MySQL 常見的存儲引擎及它們之間的區別

      MySQL 支持多種存儲引擎&#xff0c;每種引擎針對不同的應用場景提供了特定的特性和優化。下面是幾種常見的存儲引擎以及它們之間的主要區別&#xff1a; 常見存儲引擎 1. InnoDB&#xff08;重點&#xff09; 事務支持&#xff1a; 完全支持 ACID 事務&#xff0c;確保數據一…

      html+css+js 實現一個貪吃蛇小游戲

      目錄 游戲簡介 游戲功能與特點 如何玩轉貪吃蛇 游戲設計與實現 HTML結構 JavaScript核心實現 代碼結構&#xff1a; 效果 關于“其他游戲” 游戲簡介 貪吃蛇是一款經典的單人小游戲&#xff0c;玩家通過控制蛇的移動&#xff0c;吃掉食物來增加長度&#xff0c;避免撞…

      GLSL(OpenGL 著色器語言)基礎語法

      GLSL&#xff08;OpenGL 著色器語言&#xff09;基礎語法 GLSL&#xff08;OpenGL Shading Language&#xff09;是 OpenGL 計算著色器的語言&#xff0c;語法類似于 C 語言&#xff0c;但提供了針對 GPU 的特殊功能&#xff0c;如向量運算和矩陣運算。 著色器的開頭總是要聲明…

      ngx_http_core_merge_srv_conf

      定義在 src\http\ngx_http_core_module.c static char * ngx_http_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) {ngx_http_core_srv_conf_t *prev parent;ngx_http_core_srv_conf_t *conf child;ngx_str_t name;ngx_http_server_name_t…