股票配资代理

股票杠杆

杠杆炒股,股票融资!

炒期货
你的位置:股票配资代理 > 炒期货 > DeepSeek关节RL算法GRPO,有东谈主从新跑通了,孝顺完好意思代码

DeepSeek关节RL算法GRPO,有东谈主从新跑通了,孝顺完好意思代码

发布日期:2025-03-03 16:25    点击次数:167

选自GitHub

作者:Andriy Burkov

GRPO(Group Relative Policy Optimization)是 DeepSeek-R1 告捷的基础技巧之一,咱们之前也屡次报谈过该技巧,比如《DeepSeek 用的 GRPO 占用无数内存?有东谈主给出了些破解方法》。

陋劣来说,GRPO 算法丢弃了 critic model,抛弃了价值函数近似,转而通过组内样本的相对比较来打算战略梯度,从而灵验镌汰了考研的不阐述性,同期提高了学习恶果。

既然 GRPO 如斯灵验,那么,你知谈如何从新入手兑现 GRPO 吗?

近日,AI 工程师和技巧作者 Andriy Burkov 发布了一份「从新入手写 GRPO 代码」的教程,其中先容了如何基于 Qwen2.5-1.5B-Instruct 模子构建一个使用 GRPO 的散播式强化学习经过。

不外,在咱们深化这份教程之前,先陋劣先容一下它的作者。Andriy Burkov 算得上是 AI 界限的一位闻明科普作者,在加拿大拉瓦尔大学取得了打算机科学博士学位,还曾发表过两本颇受迎接的 AI 主题著述:《100 页话语模子书》和《100 页机器学习书》;书中一步步详确地先容了相干办法,并附带了简明的兑当代码。

image.png

接下来咱们就来望望这份 GRPO 从新兑现教程吧。

image.png

教程地址:https://github.com/aburkov/theLMbook/blob/main/GRPO_From_Scratch_Multi_GPU_DataParallel_Qwen_2_5_1_5B_Instruct.ipynb

从新编写 GRPO 代码

使用 Qwen2.5-1.5B-Instruct 的散播式兑现

本教程将展示如何使用 GRPO 方法构建散播式强化学习(RL)经过,从而不错针对数学、逻辑和编程任务对话语模子进行微调。

领先需要明确,这些任务皆存在一个唯独且正确的 ground truth 谜底,可通过陋劣的字符串比较松懈加以考证。

GRPO 的发明者是 DeepSeek,最早是被用于微调 DeepSeek 的 R1 和 R1-Zero 模子 —— 它们可通过学习生成念念维链(CoT)来更好地惩处数学和逻辑问题。

本教程的主义是将通用话语模子 Qwen2.5-1.5B-Instruct 疗养为数常识题求解器。咱们将从新入手编写 GRPO 代码,然后将其与几个流行的库和用具集成起来,以兑现散播式考研管谈经过,包括:

PyTorch:用于张量运算和散播式考研。

Hugging Face Transformers:用于加载预考研的话语模子和 tokenizer。

FlashAttention2:优化的驻防力机制,有助于减少内存使用量并提高考研速率。

Weights & Biases (wandb):用于实践追踪、可视化和模子版块适度。

本教程分为几个部分。领先是基本确立和导入,然后是数据时势化和谜底提真金不怕火、数据集准备、评估函数、奖励函数、考研确立和实施,临了加载和测试模子。此过程中,咱们将从新兑现 GRPO 算法。

Part 1:基础确立和导入

领先是安设并导入整个必要的模块。底下是导入库的一段代码截图。

image.png

部分代码截图。完好意思代码块参见 GitHub。

运行上述代码(参考姿色完好意思代码),不错实施以下任务:

确立就地种子:set_random_seed 函数通过为 Python 的就地模块、NumPy 和 PyTorch 确立种子,确保可复现性;

环境变量成立:确立 WANDB_API_KEY 和 WANDB_PROJECT 环境变量,以启用与 Weights & Biases 的实践追踪;

导入必要的库,包括 random、copy、re、torch 等等。

Part 2:数据时势以及谜底提真金不怕火

接下来,姿色界说了数据时势,以及模子如何从输出和数据集中提真金不怕火谜底段落。

为了确保模子输出时势一致,姿色还界说了一个系统教导。该教导辅导模子生成包含 < reasoning > 和 < answer > 标签的输出。这一步通过两个函数完成:

extract_answer_from_model_output:此函数获取模子的输出文本,并提真金不怕火 < answer > 标签内的本色;

extract_answer_from_dataset:此函数从 GSM8K 数据集中提真金不怕火预期谜底,该数据集使用 “####” 分隔符来分隔谜底:

image.png

部分代码截图。完好意思代码块参见 GitHub。

Part 3:数据准备

该姿色使用 GSM8K 数据集进行考研。姿色使用了该数据集中的示例来考研模子,基于强化学习(RL)考研范式,让模子生成多个问题解答样本,之后作者将这些解答与 GSM8K 示例中的步履谜底进行对比,淌若匹配,就为 RL 算法(GRPO)提供高奖励,然后更新模子权重,以增多模子下次得到高奖励的可能性。

实践过程是这么的。领先从 Hugging Face 加载数据集,然后时势化每个示例,包括系统教导和用户教导。这段兑当代码中还界说了两个援手函数:prepare_dataset 以及 build_prompt。

image.png

部分代码截图。完好意思代码块参见 GitHub。

Part 4:评估函数

评估关于追踪模子的进展至关遑急。因此作者界说了一些函数,从而不错在一组示例上对模子进行评估。该姿色的评估函数实施以下任务:

token 化教导并生成反应:模子的输出是在 token 化教导的基础上生成的。

提真金不怕火预计谜底:从生成的反应中提真金不怕火谜底。

将预计谜底与预期谜底进行比较:这种比较是通过精准匹配以及数值等价查验来完成的。

在这段代码中,两个援手函数 _extract_last_number 和 _extract_single_number 被用来从文本中提真金不怕火数字。评估函数 evaluate_model 使用这些援手函数来笃定预计谜底是否正确:

image.png

部分代码截图。完好意思代码块参见 GitHub。

Part 5:奖励函数

在强化学习中,奖励函数是必不行缺的,作者界说了两个奖励函数:

correctness_reward:这个函数证据生成的谜底是否正确来分拨奖励。选拔两种方式:精准的字符串匹配和数值等价查验,将模子输出的谜底与预期谜底进行比较。透澈匹配会得到更高的奖励(2.0),而基于数值等价的匹配会得到较小的奖励(1.5)。

format_reward:这个函数饱读舞模子罢黜所需的相同 XML 的输出时势。它为生成文本中存在 < reasoning>、、 和 标签提供小额奖励。

image.png

部分代码截图。完好意思代码块参见 GitHub。

Part 6:从新入手兑现 DataParallel GRPO

这一节,咱们将从新兑现 GRPO 算法的整个构建模块。领先,这里假定运行代码的机器至少有 2 台 GPU。为此,这里要使用 PyTorch 的 DataParallel API 来将战略模子放在多个 GPU 中枢上,每个 GPU 中枢皆有该模子的一个副本。然后将批量数据远隔在这些 GPU 中枢上完成处理。

image.png

部分代码截图。完好意思代码块参见 GitHub。

Part 7:考研确立和实施

这一节,股票配资代理咱们将整个组件组合在一谈,完成确立并入手考研。

领先,加载预考研的模子和 tokenizer,准备评估数据,然后使用上头从新兑现的 train_with_grpo 进行强化学习微调。

关节时势包括:

模子和 tokenizer 入手化:使用优化确立(使用 torch.bfloat16 和 FlashAttention2)加载模子 Qwen/Qwen2.5-1.5B-Instruct。tokenizer 也要加载,其填充 token 确立为序列末尾 token。使用 torch.bfloat16 加载模子会将其参数疗养为每个数值使用 16 位而不是 32 位的形式,这可将模子的内存使用量减少一半,况且可加速在当代 GPU 上的考研速率。

初步评估:在微调之前,证据几个示例对模子进行评估,以笃定基准性能。

强化学习微调:为从新入手兑现 GRPO 的考研函数 train_with_grpo 成立适当的考研参数和奖励函数。然后,在剩余的考研数据上实施强化学习考研。

最终评估和模子保存:强化学习微调后,再次评估模子,并保存最终模子。

底下的代码会实施以下功能:

笃定开导(淌若有 GPU 就用 GPU,不然就用 CPU)。

加载预考研版 Qwen2.5-1.5B-Instruct 模子和 tokenizer。tokenizer 的 pad token 确立为 eos_token。

保留一小部分数据集用于评估,以提供基线。

通过启用梯度查验点和禁用 KV 缓存,优化模子的内存恶果。

时势 1:在微调之前评估模子,以开发基线准确性。

时势 2:使用 train_with_grpo 函数和咱们界说的奖励函数(format_reward 和 correctness_reward,并吞为 combined_reward)实施强化学习微调。这里使用了多台 GPU 考研模子。

时势 3:将最终的微调模子和 tokenizer 保存到磁盘。

GRPO 考研经过使用的超参数如下。

考研成立

以下参数设定了使用上头的 GRPO 算法兑现强化学习微调运行的成立:

num_iterations=1:从现时战略模子创建新参考模子的外部迭代次数。一次迭代是指在通盘数据集上实施一次通过。

num_steps=500:考研轮回将实施最多 500 个时势,每个时势处理一批样本。

batch_size=7:在 8 台 GPU 的情况下,每个时势每批处理 7 个样本,每台 GPU 上扬弃 1 个样本。使用一个 GPU (0) 被 DataParallel 用作东节点来团聚梯度并相聚输出。

num_generations=14:关于考研数据中的每个教导词,考研器将生成 14 个不同的完成松手。这些生成松手将被用于打算率领强化学习更新的相对上风(或奖励信号)。淌若你的 GPU 的 VRAM 较少,请减少此数字。

max_completion_length=400:在生成完成松手(序列的 response 部分)时,生成上限为 400 个 token。这为止了模子在 RL 阶段生成的输出的长度。淌若你的 GPU 的 VRAM 较少,请减少此数字。

beta=0.04:GRPO 亏空函数中 KL 散度处分的总计。这适度的是模子与参考模子的偏差进度。

learning_rate=5e-6:RL 微调的学习率。为了兑现阐述的战略更新,这里使用了相对较低的学习率。

mu=1:对每批 rollout 数据实施的战略更新次数。在这里,咱们每批只实施一次更新。

epsilon=0.1:GRPO 的 PPO 组件的 clipping 参数。这不错辞让战略在单次更新中发生太大的变化。

在微调之前和之后皆会对模子进行评估,以臆想准确率的提高情况。临了,将微调后的模子保存到 grpo_finetuned_model 目次中。

image.png

部分代码截图。完好意思代码块参见 GitHub。

教程中还给出了详备的实施情况,可作参考。

image.png

底下咱们也陋劣望望其考研过程。

领先,入手成立后,咱们不错看到运行 GRPO 之前的准确度为 23.33%。

image.png

然后经过 500 步的 1 轮 GRPO 迭代,下图展示了相干的考研动态:

image.png

考研完成后,当然还需要对模子进行新一轮的评估。这里选拔了 30 个评估样原来进行评估,以下展示了其中一个模子薪金正确的示例:

sp_250301_112209.png

全体发扬如何呢?不错看到,经过一轮 GRPO 之后,Qwen-2.5-1.5B-Instruct 模子答对了 30 问题中的 27 题,兑现了 90% 的准确度。相较于 GRPO 之前的 23.33%,可说是兑现了性能飞跃。

image.png

image.png

上头两张图展示了模子的学习过程动态,不错看到:平均奖励在 2.25 附近就趋于阐述了(表面最大值为 0.8 + 2.0 = 2.8)。比较于另一处微调的 Qwen-2.5-0.5B-Instruct(得到的平均奖励为 1.4),这个数字额外高了,参阅:https://github.com/aburkov/theLMbook/blob/main/GRPO_Qwen_0_5_Instruct.ipynb

淌若使用更大的模子并允许更长的生成时间,模子正确解答问题的能力还将进一步进步。可是,淌若要考研更大的模子,不仅需要将数据散播在多台 GPU 上,还需要将模子分盛开在多台 GPU 上,这需要用到 DeepSpeed 或 FSDP(透澈分片数据并行)等模子并行用具。

底下加载和测试仍是微调的模子:

image.png

完好意思代码原宥条记本

加载完成后测试一下,领先问问 1+1 即是几:

不错看到,模子反复念念考了许屡次,终于认定如实即是 2。

屡次测试后还不错发现,该模子莫得学会生成序列收尾(EOS)token,因此即使在 token 之后,输出序列仍会链接。这是预期的行径,因为咱们使用的奖励函数中莫得包含一个用于罢手生成的奖励。咱们也莫得实施监督微调时势 —— 该时势不错让模子学会在 之后立即生成 EOS。

你对这篇代码密集的教程怎样看?有莫得让你产生在我方的电脑上兑现 GRPO 的想法?

© THE END



Powered by 股票配资代理 @2013-2022 RSS地图 HTML地图

建站@kebiseo;2013-2022 万生配资有限公司 版权所有