已合并
master readme文档修改 #710
NIE SHIYU创建于 2025年10月20日
master readme文档修改 #710
已合并
共 19 个文件变更+31-31
| @@ -32,7 +32,7 @@ bash examples/data/preprocess_data.sh math_17k | |||
| 32 | * `tokenizer_name_or_path`:指定分词器的名称或路径; | 32 | * `tokenizer_name_or_path`:指定分词器的名称或路径; |
| 33 | * `output_prefix`:输出结果的前缀路径,例如 /datasets/data; | 33 | * `output_prefix`:输出结果的前缀路径,例如 /datasets/data; |
| 34 | * `workers`:设置处理数据时使用的 worker 数; | 34 | * `workers`:设置处理数据时使用的 worker 数; |
| 35 | -* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt-type` 的可选项可以在 `configs/model/templates.json` 文件内查看; | 35 | +* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt_type` 的可选项可以在 [configs/model/templates.json](../../configs/model/templates.json) 文件内查看关键词"name"; |
| 36 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; | 36 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; |
| 37 | * `handler_name`:指定处理数据的处理器名称; | 37 | * `handler_name`:指定处理数据的处理器名称; |
| 38 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; | 38 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; |
| @@ -46,7 +46,7 @@ bash examples/data/preprocess_data.sh math_17k | |||
| 46 | 46 | ||
| 47 | 根据 DAPO 算法要求,Actor 模型应该使用 SFT 微调后的模型进行初始化,Reward 模型应该使用规则奖励。DAPO 算法模型权重均使用 Megatron-mcore 格式,其他格式的权重需要进行模型权重转换。 | 47 | 根据 DAPO 算法要求,Actor 模型应该使用 SFT 微调后的模型进行初始化,Reward 模型应该使用规则奖励。DAPO 算法模型权重均使用 Megatron-mcore 格式,其他格式的权重需要进行模型权重转换。 |
| 48 | 48 | ||
| 49 | -接下来,以 Qwen25-32B 模型的权重转换脚本为参考,相应的权重转换步骤如下: | 49 | +接下来,以 Qwen2.5-32B 模型的权重转换脚本为参考,相应的权重转换步骤如下: |
| 50 | 50 | ||
| 51 | ### 获取权重文件 | 51 | ### 获取权重文件 |
| 52 | 权重文件可以从 Huggingface 网站上获取,可以根据模型的使用场景灵活选择,在这里以 | 52 | 权重文件可以从 Huggingface 网站上获取,可以根据模型的使用场景灵活选择,在这里以 |
| @@ -72,7 +72,7 @@ bash examples/data/preprocess_data.sh math_17k | |||
| 72 | 72 | ||
| 73 | #过长response惩罚措施 | 73 | #过长response惩罚措施 |
| 74 | overlong_buffer_enable: true <------- 默认关闭 | 74 | overlong_buffer_enable: true <------- 默认关闭 |
| 75 | - rollout_max_tokens : 2048 <------- response最大长度 | 75 | + rollout_max_tokens: 2048 <------- response最大长度 |
| 76 | overlong_buffer: 512 <------- 超长惩罚缓冲区大小 | 76 | overlong_buffer: 512 <------- 超长惩罚缓冲区大小 |
| 77 | overlong_buffer_penalty_factor: 1.0 <------- 超长惩罚系数 | 77 | overlong_buffer_penalty_factor: 1.0 <------- 超长惩罚系数 |
| 78 | 78 | ||
| @@ -32,7 +32,7 @@ bash examples/data/preprocess_data.sh orca_rlhf | |||
| 32 | * `tokenizer_name_or_path`:指定分词器的名称或路径; | 32 | * `tokenizer_name_or_path`:指定分词器的名称或路径; |
| 33 | * `output_prefix`:输出结果的前缀路径,例如 ./datasets/data; | 33 | * `output_prefix`:输出结果的前缀路径,例如 ./datasets/data; |
| 34 | * `workers`:设置处理数据时使用的 worker 数; | 34 | * `workers`:设置处理数据时使用的 worker 数; |
| 35 | -* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt-type` 的可选项可以在 `configs/model/templates.json` 文件内查看; | 35 | +* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt_type` 的可选项可以在 [configs/model/templates.json](../../configs/model/templates.json) 文件内查看关键词"name"; |
| 36 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; | 36 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; |
| 37 | * `handler_name`:指定处理数据的处理器名称; | 37 | * `handler_name`:指定处理数据的处理器名称; |
| 38 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; | 38 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; |
| @@ -50,7 +50,7 @@ bash examples/data/preprocess_data.sh deepscaler | |||
| 50 | * `tokenizer_name_or_path`:指定分词器的名称或路径,路径具体到分词器所在目录即可; | 50 | * `tokenizer_name_or_path`:指定分词器的名称或路径,路径具体到分词器所在目录即可; |
| 51 | * `output_prefix`:输出结果的前缀路径,例如 /datasets/data; | 51 | * `output_prefix`:输出结果的前缀路径,例如 /datasets/data; |
| 52 | * `workers`:设置处理数据时使用的 worker 数; | 52 | * `workers`:设置处理数据时使用的 worker 数; |
| 53 | -* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt-type` 的可选项可以在 `configs/model/templates.json` 文件内查看; | 53 | +* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt_type` 的可选项可以在 [configs/model/templates.json](../../configs/model/templates.json) 文件内查看关键词"name"; |
| 54 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; | 54 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; |
| 55 | * `handler_name`:指定处理数据的处理器名称; | 55 | * `handler_name`:指定处理数据的处理器名称; |
| 56 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; | 56 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; |
| @@ -67,7 +67,7 @@ bash examples/data/preprocess_data.sh deepscaler | |||
| 67 | 67 | ||
| 68 | 权重转换需要安装MindSpeed-LLM,具体安装方法参考[安装指南](https://gitee.com/ascend/MindSpeed-LLM/blob/master/docs/pytorch/install_guide.md),建议在新建虚拟环境中安装,避免和MindSpeed-RL 出现依赖冲突。 | 68 | 权重转换需要安装MindSpeed-LLM,具体安装方法参考[安装指南](https://gitee.com/ascend/MindSpeed-LLM/blob/master/docs/pytorch/install_guide.md),建议在新建虚拟环境中安装,避免和MindSpeed-RL 出现依赖冲突。 |
| 69 | 69 | ||
| 70 | -接下来,以 Qwen25-7B 模型的权重转换脚本为参考,相应的权重转换步骤如下: | 70 | +接下来,以 Qwen2.5-7B 模型的权重转换脚本为参考,相应的权重转换步骤如下: |
| 71 | 71 | ||
| 72 | ### 获取权重文件 | 72 | ### 获取权重文件 |
| 73 | 权重文件可以从 Huggingface 网站上获取,可以根据模型的使用场景灵活选择,在这里以 | 73 | 权重文件可以从 Huggingface 网站上获取,可以根据模型的使用场景灵活选择,在这里以 |
| @@ -38,7 +38,7 @@ bash examples/data/preprocess_data.sh deepscaler | |||
| 38 | * `tokenizer_name_or_path`:指定分词器的名称或路径; | 38 | * `tokenizer_name_or_path`:指定分词器的名称或路径; |
| 39 | * `output_prefix`:输出结果的前缀路径,例如 /datasets/data; | 39 | * `output_prefix`:输出结果的前缀路径,例如 /datasets/data; |
| 40 | * `workers`:设置处理数据时使用的 worker 数; | 40 | * `workers`:设置处理数据时使用的 worker 数; |
| 41 | -* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt-type` 的可选项可以在 `configs/model/templates.json` 文件内查看; | 41 | +* `prompt_type`: 用于指定对话模板,能够让 base 模型微调后能具备更好的对话能力,`prompt_type` 的可选项可以在 [configs/model/templates.json](../../configs/model/templates.json) 文件内查看关键词"name"; |
| 42 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; | 42 | * `log_interval`:设置日志记录的间隔,每处理多少条数据时记录一次日志,用于监控数据处理的进度和状态; |
| 43 | * `handler_name`:指定处理数据的处理器名称; | 43 | * `handler_name`:指定处理数据的处理器名称; |
| 44 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; | 44 | * `seq_length`:设置数据预处理最大序列长度,超过了会过滤掉; |
| @@ -53,7 +53,7 @@ bash examples/data/preprocess_data.sh deepscaler | |||
| 53 | 53 | ||
| 54 | 根据 PPO 算法要求,Actor 和 Reference 模型应该使用 SFT 微调后的模型进行初始化,Reward 模型应该使用规则奖励。PPO 算法模型权重均使用 Megatron-mcore 格式,其他格式的权重需要进行模型权重转换。 | 54 | 根据 PPO 算法要求,Actor 和 Reference 模型应该使用 SFT 微调后的模型进行初始化,Reward 模型应该使用规则奖励。PPO 算法模型权重均使用 Megatron-mcore 格式,其他格式的权重需要进行模型权重转换。 |
| 55 | 55 | ||
| 56 | -接下来,以 Qwen25-32B 模型的权重转换脚本为参考,相应的权重转换步骤如下: | 56 | +接下来,以 Qwen2.5-32B 模型的权重转换脚本为参考,相应的权重转换步骤如下: |
| 57 | 57 | ||
| 58 | ### 获取权重文件 | 58 | ### 获取权重文件 |
| 59 | #### actor model权重文件 | 59 | #### actor model权重文件 |
| @@ -129,7 +129,7 @@ SERVERS = ( | |||
| 129 | 129 | ||
| 130 | ## Eplb_map Generate 使用说明 | 130 | ## Eplb_map Generate 使用说明 |
| 131 | 131 | ||
| 132 | -本功能基于每一层的 **token 到 expert 的分配情况**,通过Deepseek开源的**EPLB策略**,生成 **冗余专家映射表**,实现更合理的专家分布。 | 132 | +本功能基于每一层的 **token 到 expert 的分配情况**,通过DeepSeek开源的**EPLB策略**,生成 **冗余专家映射表**,实现更合理的专家分布。 |
| 133 | 133 | ||
| 134 | --- | 134 | --- |
| 135 | 135 | ||
| @@ -215,7 +215,7 @@ python mindspeed_rl/workers/eplb/eplb_generate_map_ds.py \ | |||
| 215 | 215 | ||
| 216 | 1. 运行方式 | 216 | 1. 运行方式 |
| 217 | ``` | 217 | ``` |
| 218 | - bash examples\eplb\eplb.sh | 218 | + bash examples/eplb/eplb.sh |
| 219 | ``` | 219 | ``` |
| 220 | 2. 生成JSON文件: `output_path` | 220 | 2. 生成JSON文件: `output_path` |
| 221 | 3. 文件中保存了 **每个层上** expert在**每个rank上**的映射情况。 | 221 | 3. 文件中保存了 **每个层上** expert在**每个rank上**的映射情况。 |
| @@ -267,7 +267,7 @@ expert_map_path: /file/to/save | |||
| 267 | 267 | ||
| 268 | 运行脚本: | 268 | 运行脚本: |
| 269 | ```bash | 269 | ```bash |
| 270 | -bash examples\eplb\grpo_trainer_deepseek_r1_671b_eplb.sh | 270 | +bash examples/eplb/grpo_trainer_deepseek_r1_671b_eplb.sh |
| 271 | ``` | 271 | ``` |
| 272 | --- | 272 | --- |
| 273 | 273 | ||
| @@ -7,7 +7,7 @@ | |||
| 7 | ### Ulysses | 7 | ### Ulysses |
| 8 | [Ulysses](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-ulysses)是一种用于长序列训练的分布式并行技术,由微软 DeepSpeed 提出。其核心思想是将输入序列在序列维度上切分给不同的计算设备,并通过 All-to-All 通信方式确保每个计算设备能够计算不同注意力头的子集。这种方式可以降低激活显存,解决长序列场景下显存OOM的问题。 | 8 | [Ulysses](https://github.com/deepspeedai/DeepSpeed/tree/master/blogs/deepspeed-ulysses)是一种用于长序列训练的分布式并行技术,由微软 DeepSpeed 提出。其核心思想是将输入序列在序列维度上切分给不同的计算设备,并通过 All-to-All 通信方式确保每个计算设备能够计算不同注意力头的子集。这种方式可以降低激活显存,解决长序列场景下显存OOM的问题。 |
| 9 | 9 | ||
| 10 | -具体来说,Ulysses 将各个样本在序列维度上分割给参与的计算设备;然后,在 attention 计算之前,它对已分割的查询(Q)、键(K)和值(V)执行 all-to-all 通信操作,以使每个计算设备接收完整的序列,但仅用于注意力头的非重叠子集,这使得参与的计算设备可以并行计算不同的注意力头;最后,Ulysses 使用另一个 all-to-all 来在注意力头上收集结果,同时重新在序列维度上进行分区。 | 10 | +具体来说,Ulysses 将各个样本在序列维度上分割给参与的计算设备;然后,在 attention 计算之前,它对已分割的查询(Q)、键(K)和值(V)执行 All-to-All 通信操作,以使每个计算设备接收完整的序列,但仅用于注意力头的非重叠子集,这使得参与的计算设备可以并行计算不同的注意力头;最后,Ulysses 使用另一个 All-to-All 来在注意力头上收集结果,同时重新在序列维度上进行分区。 |
| 11 | 11 | ||
| 12 | ### Ring Attention | 12 | ### Ring Attention |
| 13 | [Ring Attention](https://arxiv.org/pdf/2310.01889)借鉴了分块Softmax原理,在不需要获取整个序列的完整矩阵情况下进行分块attention计算,提出以分块方式执行自注意力和前馈网络计算,跨多个设备分布序列维度。具体地,该方法在进程之间构建注意力计算块的环状通信结构(Ring),每个进程具有一个切分后的本地QKV块;在计算完本地的attention后,通过向后发送和向前获取KV块,遍历进程设备环,以逐块的方式进行注意力和前馈网络计算;同时,本地的attention计算和KV块的通信理想情况下可以互相掩盖,从而消除了额外引入的通信开销。 | 13 | [Ring Attention](https://arxiv.org/pdf/2310.01889)借鉴了分块Softmax原理,在不需要获取整个序列的完整矩阵情况下进行分块attention计算,提出以分块方式执行自注意力和前馈网络计算,跨多个设备分布序列维度。具体地,该方法在进程之间构建注意力计算块的环状通信结构(Ring),每个进程具有一个切分后的本地QKV块;在计算完本地的attention后,通过向后发送和向前获取KV块,遍历进程设备环,以逐块的方式进行注意力和前馈网络计算;同时,本地的attention计算和KV块的通信理想情况下可以互相掩盖,从而消除了额外引入的通信开销。 |
| @@ -69,12 +69,12 @@ | |||
| 69 | 69 | ||
| 70 | |参数名| 参数位置 | 说明 | | 70 | |参数名| 参数位置 | 说明 | |
| 71 | |:----|:------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 71 | |:----|:------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
| 72 | -|actor_rollout_dispatch_size| config_cls/rl_config.py | 【可选参数】actor rollout的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_sample_per_prompt / actor_rollout_dp_size | | 72 | +|actor_rollout_dispatch_size| config_cls/rl_config.py | 【可选参数】actor rollout的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_samples_per_prompt / actor_rollout_dp_size | |
| 73 | -|actor_logprob_dispatch_size| config_cls/rl_config.py | 【可选参数】actor logprob的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_sample_per_prompt / actor_logprob_dp_size | | 73 | +|actor_logprob_dispatch_size| config_cls/rl_config.py | 【可选参数】actor logprob的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_samples_per_prompt / actor_logprob_dp_size | |
| 74 | -|actor_update_dispatch_size| config_cls/rl_config.py | 【可选参数】actor update的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_sample_per_prompt / actor_update_dp_size | | 74 | +|actor_update_dispatch_size| config_cls/rl_config.py | 【可选参数】actor update的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_samples_per_prompt / actor_update_dp_size | |
| 75 | -|ref_dispatch_size| config_cls/rl_config.py | 【可选参数】ref logprob的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_sample_per_prompt / ref_logprob_dp_size | | 75 | +|ref_dispatch_size| config_cls/rl_config.py | 【可选参数】ref logprob的每路DP每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_samples_per_prompt / ref_logprob_dp_size | |
| 76 | -|reward_dispatch_size| config_cls/rl_config.py | 【可选参数】reward每路DP(若有)每次从TD中读出的(Prompt, Response)对的数据量;对于Reward Model,默认设置为global_batch_size * n_sample_per_prompt / reward_dp_size;对于规则奖励默认设置为global_batch_size * n_sample_per_prompt;手动设置时对于GRPO算法需保证为n_samples_per_prompt的整数倍 | | 76 | +|reward_dispatch_size| config_cls/rl_config.py | 【可选参数】reward每路DP(若有)每次从TD中读出的(Prompt, Response)对的数据量;对于Reward Model,默认设置为global_batch_size * n_samples_per_prompt / reward_dp_size;对于规则奖励默认设置为global_batch_size * n_samples_per_prompt;手动设置时对于GRPO算法需保证为n_samples_per_prompt的整数倍 | |
| 77 | -|adv_dispatch_size| config_cls/rl_config.py | 【可选参数】advantage每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_sample_per_prompt | | 77 | +|adv_dispatch_size| config_cls/rl_config.py | 【可选参数】advantage每次从TD中读出的(Prompt, Response)对的数据量;默认设置为global_batch_size * n_samples_per_prompt | |
| 78 | 78 | ||
| 79 | 79 | ||
| 80 | 80 | ||
| @@ -35,7 +35,7 @@ | |||
| 35 | ``` | 35 | ``` |
| 36 | - 1.2 使能TransferDock (TD) 保序特性 | 36 | - 1.2 使能TransferDock (TD) 保序特性 |
| 37 | 37 | ||
| 38 | - TransferDock在Mindspeed RL仓中用于存取数据,控制数据流,数据取出默认是乱序的,vllm推理等对于数据的输入顺序是敏感的,两次训练需要保持一致的顺序才能有相同输出。开启此特性之后,将按实际数据顺序进行存取。 | 38 | + TransferDock在MindSpeed RL仓中用于存取数据,控制数据流,数据取出默认是乱序的,vllm推理等对于数据的输入顺序是敏感的,两次训练需要保持一致的顺序才能有相同输出。开启此特性之后,将按实际数据顺序进行存取。 |
| 39 | 39 | ||
| 40 | 使能方法,在rl_config参数中加入 | 40 | 使能方法,在rl_config参数中加入 |
| 41 | ``` | 41 | ``` |
| @@ -62,7 +62,7 @@ MindSpeed RL 通过将模型参数和训练配置解耦的层级化参数配置 | |||
| 62 | * `max_prompt_length`:GRPO 训练中最大 prompt 长度,默认为512; | 62 | * `max_prompt_length`:GRPO 训练中最大 prompt 长度,默认为512; |
| 63 | * `clip_ratio`:Actor 模型训练计算损失函数时的 clip 比例,默认为0.2 一般取值范围 [0.1,0.3] 最大取值范围[0,1] 该数值越大允许策略更新的幅度越大,反之不然; | 63 | * `clip_ratio`:Actor 模型训练计算损失函数时的 clip 比例,默认为0.2 一般取值范围 [0.1,0.3] 最大取值范围[0,1] 该数值越大允许策略更新的幅度越大,反之不然; |
| 64 | * `entropy_coeff`: entropy loss 所占权重; | 64 | * `entropy_coeff`: entropy loss 所占权重; |
| 65 | -* `n_samples_per_prompt`:每条prompt的重用次数,一条 prompt 输入能输出 n 条 responese; | 65 | +* `n_samples_per_prompt`:每条prompt的重用次数,一条 prompt 输入能输出 n 条 response; |
| 66 | * `guarantee_order`: 是否开启TransferDock保序,默认 False; | 66 | * `guarantee_order`: 是否开启TransferDock保序,默认 False; |
| 67 | * `shuffle_mini_batch`:Actor 训练时是否对 minibatch 进行 shuffle,默认为 False; | 67 | * `shuffle_mini_batch`:Actor 训练时是否对 minibatch 进行 shuffle,默认为 False; |
| 68 | * `log_max_throughput`: 配置tps计算时是否使用max值,默认为 true; | 68 | * `log_max_throughput`: 配置tps计算时是否使用max值,默认为 true; |
| @@ -75,7 +75,7 @@ actor_config: | |||
| 75 | generate_config: | 75 | generate_config: |
| 76 | infer_tensor_parallel_size: 4 # 推理态 TP 切分 | 76 | infer_tensor_parallel_size: 4 # 推理态 TP 切分 |
| 77 | infer_pipeline_parallel_size: 1 # 推理态 PP 切分 | 77 | infer_pipeline_parallel_size: 1 # 推理态 PP 切分 |
| 78 | - infer_expert_parallel_size: 1 # 推理态 PP 切分 | 78 | + infer_expert_parallel_size: 1 # 推理态 EP 切分 |
| 79 | 79 | ||
| 80 | offload_train_optimizer: true # 设置为 true 可以使能在推理时卸载训练态优化器 | 80 | offload_train_optimizer: true # 设置为 true 可以使能在推理时卸载训练态优化器 |
| 81 | offload_train_grad: true # 设置为 true 可以使能在推理时卸载训练态梯度 | 81 | offload_train_grad: true # 设置为 true 可以使能在推理时卸载训练态梯度 |
| @@ -15,7 +15,7 @@ rl_config: | |||
| 15 | 同步引擎:数据按批处理,同时进入推理引擎、批次内所有数据完成推理后同时返回结果 | 15 | 同步引擎:数据按批处理,同时进入推理引擎、批次内所有数据完成推理后同时返回结果 |
| 16 | 关键技术点: | 16 | 关键技术点: |
| 17 | 1. 长序列推理截断机制:根据最大推理长度和次数设置推理截断点,将截断样本放入TransferDock,当满足≥GBS个prompt已完成全部推理,则进入后续计算任务,否则则从TransferDock中取数据再次推理,达成高资源利用率。 | 17 | 1. 长序列推理截断机制:根据最大推理长度和次数设置推理截断点,将截断样本放入TransferDock,当满足≥GBS个prompt已完成全部推理,则进入后续计算任务,否则则从TransferDock中取数据再次推理,达成高资源利用率。 |
| 18 | -2. 基于优先级的混合A数据重排和采样技术:在下一轮推理时,优先取出被截断样本进行推理,避免影响效果和收敛性。 | 18 | +2. 基于优先级的混合数据重排和采样技术:在下一轮推理时,优先取出被截断样本进行推理,避免影响效果和收敛性。 |
| 19 | 19 | ||
| 20 |  | 20 |  |
| 21 | 21 | ||
| @@ -77,7 +77,7 @@ MindSpeed RL 通过将模型参数和训练配置解耦的层级化参数配置 | |||
| 77 | * `clip_ratio`:Actor 模型训练计算损失函数时的 clip 比例,默认为0.2 一般取值范围 [0.1,0.3] 最大取值范围[0,1] 该数值越大允许策略更新的幅度越大,反之不然; | 77 | * `clip_ratio`:Actor 模型训练计算损失函数时的 clip 比例,默认为0.2 一般取值范围 [0.1,0.3] 最大取值范围[0,1] 该数值越大允许策略更新的幅度越大,反之不然; |
| 78 | * `cliprange_value`:Critic 模型训练计算损失函数时的 clip 比例,默认为0.2 一般取值范围 [0.1,0.3] 最大取值范围[0,1] 该数值越大允许策略更新的幅度越大,反之不然; | 78 | * `cliprange_value`:Critic 模型训练计算损失函数时的 clip 比例,默认为0.2 一般取值范围 [0.1,0.3] 最大取值范围[0,1] 该数值越大允许策略更新的幅度越大,反之不然; |
| 79 | * `entropy_coeff`: entropy loss 所占权重; | 79 | * `entropy_coeff`: entropy loss 所占权重; |
| 80 | -* `n_samples_per_prompt`:每条prompt的重用次数,一条 prompt 输入能输出 n 条 responese; | 80 | +* `n_samples_per_prompt`:每条prompt的重用次数,一条 prompt 输入能输出 n 条 response; |
| 81 | * `guarantee_order`: 是否开启TransferDock保序,默认 False; | 81 | * `guarantee_order`: 是否开启TransferDock保序,默认 False; |
| 82 | * `shuffle_mini_batch`:Actor 训练时是否对 minibatch 进行 shuffle,默认为 False; | 82 | * `shuffle_mini_batch`:Actor 训练时是否对 minibatch 进行 shuffle,默认为 False; |
| 83 | * `actor_resource` :分配给 Actor 、Reference模型的显卡数量; | 83 | * `actor_resource` :分配给 Actor 、Reference模型的显卡数量; |
| @@ -31,7 +31,7 @@ profiler_config: | |||
| 31 | ``` | 31 | ``` |
| 32 | 32 | ||
| 33 | 针对MindSpeed-RL仓库支持的直接偏好对齐(DPO)算法,可以通过如下方式进行配置: | 33 | 针对MindSpeed-RL仓库支持的直接偏好对齐(DPO)算法,可以通过如下方式进行配置: |
| 34 | -> **注意**:其他未罗列的参数目前对应功能都未支持,且该场景下采集profiliing 数据会warmup 1步,即实际采集步数为 profile_step_end - profile_step_start + 1。 | 34 | +> **注意**:其他未罗列的参数目前对应功能都未支持,且该场景下采集profiling 数据会warmup 1步,即实际采集步数为 profile_step_end - profile_step_start + 1。 |
| 35 | ```yaml | 35 | ```yaml |
| 36 | profiler_config: | 36 | profiler_config: |
| 37 | integrated: | 37 | integrated: |
| @@ -1,6 +1,6 @@ | |||
| 1 | # 特性说明 | 1 | # 特性说明 |
| 2 | 2 | ||
| 3 | -本文档介绍了两项在大语言模型训练中用于加速、节省显存的关键特性: | 3 | +本文档介绍了三项在大语言模型训练中用于加速、节省显存的关键特性: |
| 4 | 4 | ||
| 5 | 1. **填充移除(Remove padding)** | 5 | 1. **填充移除(Remove padding)** |
| 6 | 2. **动态批量大小(Dynamic Batch Size)** | 6 | 2. **动态批量大小(Dynamic Batch Size)** |
| @@ -30,7 +30,7 @@ | |||
| 30 | 30 | ||
| 31 | 为解决这一问题,提出基于参数分桶的训推内存0冗余切换技术,如下图所示。 | 31 | 为解决这一问题,提出基于参数分桶的训推内存0冗余切换技术,如下图所示。 |
| 32 | 32 | ||
| 33 | -(1)ShardingMananger初始化阶段,根据推理并行策略切分或推理引擎提供的权重元信息(MetaInfo)分配每个PP Stage所需的MemoryBuffer(推理参数桶); | 33 | +(1)ShardingManager初始化阶段,根据推理并行策略切分或推理引擎提供的权重元信息(MetaInfo)分配每个PP Stage所需的MemoryBuffer(推理参数桶); |
| 34 | 34 | ||
| 35 | (2)进行推理态计算时,为每个PP申请推理参数桶内存,将训练态权重参数经过并行策略转换为推理态权重参数,并拷贝至推理参数桶中,同时,将训练态模型权重、优化器、梯度等全部卸载至CPU侧; | 35 | (2)进行推理态计算时,为每个PP申请推理参数桶内存,将训练态权重参数经过并行策略转换为推理态权重参数,并拷贝至推理参数桶中,同时,将训练态模型权重、优化器、梯度等全部卸载至CPU侧; |
| 36 | 36 | ||
| @@ -146,7 +146,7 @@ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 | |||
| 146 | yum install jemalloc | 146 | yum install jemalloc |
| 147 | ``` | 147 | ``` |
| 148 | 如果上述方法无法正常安装,可以通过源码编译安装 | 148 | 如果上述方法无法正常安装,可以通过源码编译安装 |
| 149 | -前往jamalloc官网下载最新稳定版本,官网地址:https://github.com/jemalloc/jemalloc/releases/ | 149 | +前往jemalloc官网下载最新稳定版本,官网地址:https://github.com/jemalloc/jemalloc/releases/ |
| 150 | ```shell | 150 | ```shell |
| 151 | tar -xvf jemalloc-{version}.tar.bz2 | 151 | tar -xvf jemalloc-{version}.tar.bz2 |
| 152 | cd jemalloc-{version} | 152 | cd jemalloc-{version} |
| @@ -1,5 +1,5 @@ | |||
| 1 | # DeepSeek-R1-Zero-671B | 1 | # DeepSeek-R1-Zero-671B |
| 2 | -R1-Zero模型是使用base模型,基于GPRO+规则奖励打分进行训练,本篇工作使用DeepSeek-671B Base模型复现DeepSeek-R1-Zero在Math领域的工作。 | 2 | +R1-Zero模型是使用base模型,基于GRPO+规则奖励打分进行训练,本篇工作使用DeepSeek-671B Base模型复现DeepSeek-R1-Zero在Math领域的工作。 |
| 3 | 3 | ||
| 4 | 4 | ||
| 5 | ## 复现效果 | 5 | ## 复现效果 |
| @@ -1,5 +1,5 @@ | |||
| 1 | # DeepSeek-R1-Zero-Qwen25-32B | 1 | # DeepSeek-R1-Zero-Qwen25-32B |
| 2 | -R1-Zero模型是使用base模型,基于GPRO+规则奖励打分进行训练,本篇工作使用Qwen25-32B模型复现DeepSeek-R1-Zero在Math领域的工作。 | 2 | +R1-Zero模型是使用base模型,基于GRPO+规则奖励打分进行训练,本篇工作使用Qwen25-32B模型复现DeepSeek-R1-Zero在Math领域的工作。 |
| 3 | 3 | ||
| 4 | ## 整体流程示意图 | 4 | ## 整体流程示意图 |
| 5 | 5 | ||
| @@ -9,7 +9,7 @@ R1-Zero模型是使用base模型,基于GPRO+规则奖励打分进行训练, | |||
| 9 | ## 复现效果 | 9 | ## 复现效果 |
| 10 | ### 训练细节 | 10 | ### 训练细节 |
| 11 | 11 | ||
| 12 | -我们使用Qwen-2.5-32B模型在deepscaler数据集上使用准的格式奖励和准确性奖励训练。 | 12 | +我们使用Qwen-2.5-32B模型在deepscaler数据集上使用标准的格式奖励和准确性奖励训练。 |
| 13 | 13 | ||
| 14 | **训练过程记录如下:** | 14 | **训练过程记录如下:** |
| 15 | 15 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | # DeepSeek-R1-Zero-Qwen25-7B | 1 | # DeepSeek-R1-Zero-Qwen25-7B |
| 2 | -R1-Zero模型是使用base模型,基于GPRO+规则奖励打分进行训练,本篇工作使用Qwen25-7B模型复现DeepSeek-R1-Zero在Math领域的工作。 | 2 | +R1-Zero模型是使用base模型,基于GRPO+规则奖励打分进行训练,本篇工作使用Qwen25-7B模型复现DeepSeek-R1-Zero在Math领域的工作。 |
| 3 | 3 | ||
| 4 | ## 整体流程示意图 | 4 | ## 整体流程示意图 |
| 5 | 5 | ||