Skip to content

Commit 50968b5

Browse files
authored
Support Megatron GRPO (#6025)
1 parent f69b3e8 commit 50968b5

38 files changed

+2523
-90
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ You can contact us and communicate with us by adding our group:
6565
- **Quantization Training**: Supports training quantized models like BNB, AWQ, GPTQ, AQLM, HQQ, EETQ.
6666
- 🍊 **RLHF Training**: Supports human alignment training methods such as DPO, GRPO, RM, PPO, GKD, KTO, CPO, SimPO, ORPO for both pure text and multi-modal large models.
6767
- 🍓 **Multi-Modal Training**: Supports training on different modalities like images, videos, and audio, for tasks like VQA, captioning, OCR, and grounding.
68-
- 🥥 **Megatron Parallelism**: Supports accelerating CPT/SFT/DPO/KTO/RM using Megatron parallelism techniques, currently compatible with 200+ pure text large models, 100+ multi-modal large models.
68+
- 🥥 **Megatron Parallelism**: Supports accelerating CPT/SFT/GRPO/DPO/KTO/RM using Megatron parallelism techniques, currently compatible with 200+ pure text large models, 100+ multi-modal large models.
6969
- **Interface Training**: Provides capabilities for training, inference, evaluation, quantization through an interface, completing the whole large model pipeline.
7070
- **Plugin and Extension**: Supports custom model and dataset extensions, as well as customization of components like loss, metric, trainer, loss-scale, callback, optimizer.
7171
- 🍉 **Toolbox Capabilities**: Offers not only training support for large models and multi-modal large models but also covers the entire process of inference, evaluation, quantization, and deployment.
@@ -75,6 +75,7 @@ You can contact us and communicate with us by adding our group:
7575

7676

7777
## 🎉 News
78+
- 🎁 2025.11.14: Megatron GRPO is now available! Check out the [docs](./docs/source_en/Megatron-SWIFT/GRPO.md) and [examples](examples/megatron/grpo).
7879
- 🎁 2025.11.04: Support for [Mcore-Bridge](docs/source_en/Megatron-SWIFT/Mcore-Bridge.md), making Megatron training as simple and easy to use as transformers.
7980
- 🎁 2025.10.28: Ray [here](docs/source_en/Instruction/Ray.md).
8081
- 🎁 2025.10.28: Support [use yaml](examples/yaml) to configure command line parameters.

README_CN.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
- **量化训练**:支持对BNB、AWQ、GPTQ、AQLM、HQQ、EETQ量化模型进行训练。
6363
- 🍊 **RLHF训练**:支持纯文本大模型和多模态大模型的DPO、GRPO、RM、PPO、GKD、KTO、CPO、SimPO、ORPO等人类对齐训练方法。
6464
- 🍓 **多模态训练**:支持对图像、视频和语音不同模态模型进行训练,支持VQA、Caption、OCR、Grounding任务的训练。
65-
- 🥥 **Megatron并行技术**:支持使用Megatron并行技术对CPT/SFT/DPO/KTO/RM进行加速,现支持200+纯文本大模型和100+多模态大模型。
65+
- 🥥 **Megatron并行技术**:支持使用Megatron并行技术对CPT/SFT/GRPO/DPO/KTO/RM进行加速,现支持200+纯文本大模型和100+多模态大模型。
6666
- **界面训练**:以界面的方式提供训练、推理、评测、量化的能力,完成大模型的全链路。
6767
- **插件化与拓展**:支持自定义模型和数据集拓展,支持对loss、metric、trainer、loss-scale、callback、optimizer等组件进行自定义。
6868
- 🍉 **工具箱能力**:不仅提供大模型和多模态大模型的训练支持,还涵盖其推理、评测、量化和部署全流程。
@@ -71,6 +71,7 @@
7171
- **模型量化**:支持AWQ、GPTQ、FP8和BNB的量化导出,导出的模型支持使用vLLM/SGLang/LmDeploy推理加速,并支持继续训练。
7272

7373
## 🎉 新闻
74+
- 🎁 2025.11.14: Megatron GRPO现已支持!查看[文档](./docs/source/Megatron-SWIFT/GRPO.md)[示例](examples/megatron/grpo)
7475
- 🎁 2025.11.04: 支持[Mcore-Bridge](docs/source/Megatron-SWIFT/Mcore-Bridge.md),使Megatron训练像transformers一样简单易用。
7576
- 🎁 2025.10.28: Ray [已支持](docs/source/Instruction/Ray.md)
7677
- 🎁 2025.10.28: 已支持[使用yaml](examples/yaml)配置命令行参数。

docs/source/Instruction/Command-line-parameters.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -566,13 +566,13 @@ reward模型参数将在PPO、GRPO中使用。
566566
- use_vllm: 是否使用 vLLM 作为 GRPO 生成的 infer_backend,默认为False。
567567
- vllm_mode: vLLM 集成模式,可选项为 `server``colocate`。server 模式使用 `swift rollout` 拉起的 vLLM 服务器进行采样,colocate 模式在程序内部署 vLLM。使用server端时,
568568
- vllm_mode server 参数
569+
- vllm_server_host: vLLM server host地址,默认为None。
570+
- vllm_server_port: vLLM server 服务端口,默认为8000。
569571
- vllm_server_base_url: vLLM server的Base URL(比如 http://local_host:8000), 默认为None。设置后,忽略host和port设置。
570-
- vllm_server_host:vLLM server host地址,默认为None。
571-
- vllm_server_port vLLM server 服务端口,默认为8000。
572-
- vllm_server_timeout 连接vLLM server的超时时间,默认为 240s。
572+
- vllm_server_timeout: 连接vLLM server的超时时间,默认为 240s。
573573
- vllm_server_pass_dataset: 透传额外的数据集信息到vLLM server,用于多轮训练。
574574
- async_generate: 异步rollout以提高训练速度,注意开启时采样会使用上一轮更新的模型进行采样,不支持多轮场景。默认`false`.
575-
- SWIFT_UPDATE_WEIGHTS_BUCKET_SIZE环境变量,用于控制权重同步时的传输桶大小(bucket size),适用于 Server Mode 下的全参数训练,单位为 MB,默认值为 512 MB。
575+
- SWIFT_UPDATE_WEIGHTS_BUCKET_SIZE: 环境变量,用于控制权重同步时的传输桶大小(bucket size),适用于 Server Mode 下的全参数训练,单位为 MB,默认值为 512 MB。
576576
- vllm_mode colocate 参数(更多参数支持参考[vLLM参数](#vLLM参数)。)
577577
- vllm_gpu_memory_utilization: vllm透传参数,默认为0.9。
578578
- vllm_max_model_len: vllm透传参数,默认为None。
@@ -581,7 +581,7 @@ reward模型参数将在PPO、GRPO中使用。
581581
- vllm_enable_prefix_caching: vllm透传参数,默认为True。
582582
- vllm_tensor_parallel_size: tp并行数,默认为`1`
583583
- vllm_enable_lora: 支持vLLM Engine 加载 LoRA adapter,默认为False。用于加速LoRA训练的权重同步,具体参考[文档](./GRPO/GetStarted/GRPO.md#权重同步加速)
584-
- sleep_level: 训练时释放 vLLM 显存,可选项为[0, 1], 默认为0,不释放。
584+
- sleep_level: 训练时释放 vLLM 显存,可选项为[0, 1, 2], 默认为0,不释放。
585585
- offload_optimizer: 是否在vLLM推理时offload optimizer参数,默认为False。
586586
- offload_model: 是否在vLLM推理时 offload 模型,默认为False。
587587
- completion_length_limit_scope: 在多轮对话中,`max_completion_length` 的限制范围。
@@ -593,7 +593,7 @@ reward模型参数将在PPO、GRPO中使用。
593593
- max_resample_times:dynamic_sample设置下限制重采样次数,默认3次。
594594
- overlong_filter:跳过超长截断的样本,不参与loss计算,默认为False。
595595
- delta: [INTELLECT-2 tech report](https://huggingface.co/papers/2505.07291)中双侧 GRPO 上界裁剪值。若设置,建议大于 1 + epsilon。默认为None。
596-
- importance_sampling_level: 控制重要性采样比计算,可选项为 `token``sequence``token` 模式下保留原始的每个 token 的对数概率比,`sequence` 模式下则会对序列中所有有效 token 的对数概率比进行平均。[GSPO论文](https://www.arxiv.org/abs/2507.18071)中使用sequence级别计算来稳定训练,默认为`token`
596+
- importance_sampling_level: 控制重要性采样比计算,可选项为 `token``sequence``token` 模式下保留原始的每个 token 的对数概率比,`sequence` 模式下则会对序列中所有有效 token 的对数概率比进行平均。[GSPO论文](https://arxiv.org/abs/2507.18071)中使用sequence级别计算来稳定训练,默认为`token`
597597
- advantage_estimator: 优势计算函数,默认为 `grpo`,即计算组内相对优势,可选项为 `grpo`[`rloo`](./GRPO/AdvancedResearch/RLOO.md)[`reinforce_plus_plus`](./GRPO/AdvancedResearch/REINFORCEPP.md)
598598
- kl_in_reward: 控制 KL 散度正则项的处理位置;`false`表示作为损失函数的独立正则项,`true`表示将 KL 直接并入奖励(从奖励中扣除)。默认情况与advantage_estimator绑定,`grpo`下默认为`false``rloo``reinforce_plus_plus` 下默认为 `true`
599599
- scale_rewards:指定奖励的缩放策略。可选值包括 `group`(按组内标准差缩放)、`batch`(按整个批次的标准差缩放)、`none`(不进行缩放)。在 ms-swift < 3.10 版本中,该参数为布尔类型,`true` 对应 `group``false` 对应 `none`。默认值与 `advantage_estimator` 绑定:`grpo` 对应 `group``rloo` 对应 `none``reinforce_plus_plus` 对应 `batch`
@@ -606,6 +606,8 @@ reward模型参数将在PPO、GRPO中使用。
606606
- top_entropy_quantile: 仅对熵值处于前指定分位的 token 参与损失计算,默认为1.0,即不过滤低熵 token,具体参考[文档](./GRPO/AdvancedResearch/entropy_mask.md)
607607
- log_entropy: 记录训练中的熵值变化动态,默认为False,具体参考[文档](./GRPO/GetStarted/GRPO.md#logged-metrics)
608608

609+
##### 奖励函数参数
610+
内置的奖励函数参考[文档](./GRPO/DeveloperGuide/reward_function.md)
609611
cosine 奖励参数
610612
- cosine_min_len_value_wrong:cosine 奖励函数参数,生成错误答案时,最小长度对应的奖励值。默认值为-0.5。
611613
- cosine_max_len_value_wrong:生成错误答案时,最大长度对应的奖励值。默认值为0.0。

docs/source/Instruction/GRPO/AdvancedResearch/GSPO.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**版本依赖**:ms-swift>=3.7
44

5-
[Group Sequence Policy Optimization](https://www.arxiv.org/abs/2507.18071)中指出GRPO在计算重要性采样权重时,是在token级别进行操作的。然而,这种做法由于每个token仅采样一次,无法实现有效的分布校正,反而会在模型训练过程中引入高方差噪声,极易导致模型的梯度估计不稳定,最终造成模型训练的崩塌。因此,论文认为,优化目标的单位应该与奖励的单位保持一致。由于奖励通常是在序列级别(即完整生成的回复)给出的,因此更合理的做法是将 off-policy 校正和优化也提升到序列级别,而非 token 级别。以下是三种计算策略对比:
5+
[Group Sequence Policy Optimization](https://arxiv.org/abs/2507.18071)中指出GRPO在计算重要性采样权重时,是在token级别进行操作的。然而,这种做法由于每个token仅采样一次,无法实现有效的分布校正,反而会在模型训练过程中引入高方差噪声,极易导致模型的梯度估计不稳定,最终造成模型训练的崩塌。因此,论文认为,优化目标的单位应该与奖励的单位保持一致。由于奖励通常是在序列级别(即完整生成的回复)给出的,因此更合理的做法是将 off-policy 校正和优化也提升到序列级别,而非 token 级别。以下是三种计算策略对比:
66

77
1. GRPO
88
对每个 token 独立计算重要性采样比,具体公式为
@@ -54,7 +54,7 @@ importance_weights = torch.exp(log_importance_weights)
5454
- `importance_sampling_level sequence` (GSPO)
5555
- `importance_sampling_level sequence_token` (GSPO-token)
5656

57-
其中 sequence_token 要求 ms-swift > 3.7 (源码安装)
57+
其中 sequence_token 要求 ms-swift >= 3.8
5858

5959
论文其他超参
6060
```bash

docs/source/Instruction/Use-tuners.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ tuner是指附加在模型上的额外结构部分,用于减少训练参数量
1515
- Adapter: [Parameter-Efficient Transfer Learning for NLP](http://arxiv.org/abs/1902.00751)
1616
- Vision Prompt Tuning: [Visual Prompt Tuning](https://arxiv.org/abs/2203.12119)
1717
- Side: [Side-Tuning: A Baseline for Network Adaptation via Additive Side Networks](https://arxiv.org/abs/1912.13503)
18-
- Res-Tuning: [Res-Tuning: A Flexible and Efficient Tuning Paradigm via Unbinding Tuner from Backbone](https://arxiv.org/abs/2310.19859) < [arXiv](https://arxiv.org/abs/2310.19859) | [Project Page](https://res-tuning.github.io/) | [Usage](ResTuning.md) >
18+
- Res-Tuning: [Res-Tuning: A Flexible and Efficient Tuning Paradigm via Unbinding Tuner from Backbone](https://arxiv.org/abs/2310.19859) < [arXiv](https://arxiv.org/abs/2310.19859) | [Project Page](https://res-tuning.github.io/) >
1919
- [PEFT](https://github.com/huggingface/peft)提供的tuners, 如AdaLoRA、DoRA、Fourierft等
2020

2121
## 接口列表

0 commit comments

Comments
 (0)