diff --git a/docs/mindformers/docs/source_zh_cn/advanced_development/accuracy_comparison.md b/docs/mindformers/docs/source_zh_cn/advanced_development/accuracy_comparison.md index a489487b582e5a09ec140c8e92bdc87156eebdcf..98dde4129fff406eb89478b8e85809fa3a7c4b44 100644 --- a/docs/mindformers/docs/source_zh_cn/advanced_development/accuracy_comparison.md +++ b/docs/mindformers/docs/source_zh_cn/advanced_development/accuracy_comparison.md @@ -1,4 +1,4 @@ -# MindSpore Transformers mcore模型与 Megatron-LM 训练精度比对 +# 与 Megatron-LM 比对训练精度 ## 1. 概述 @@ -32,10 +32,10 @@ Megatron-LM 是一个面向大规模训练任务的成熟框架,具备高度 ### 镜像链接 上表中的 **GPU / NPU** 相关依赖版本为参考信息,实际环境请以对应官方镜像为准: -> - **Megatron-LM** - :参考 [Megatron-LM 文档](https://github.com/NVIDIA/Megatron-LM/tree/core_r0.12.0?tab=readme-ov-file#setup) -> - **MindSpore Transformers**: - :参考 [MindSpore Transformers 文档](https://gitee.com/mindspore/mindformers/blob/dev/README_CN.md) + +- **Megatron-LM**:参考 [Megatron-LM 文档](https://github.com/NVIDIA/Megatron-LM/tree/core_r0.12.0?tab=readme-ov-file#setup) + +- **MindSpore Transformers**:参考 [MindSpore Transformers 文档](https://gitee.com/mindspore/mindformers/blob/dev/README_CN.md) ## 3. 精度对比流程 @@ -51,216 +51,216 @@ Megatron-LM 是一个面向大规模训练任务的成熟框架,具备高度 - 模型配置 -本文档仅支持 mcore 模型的精度比对,故 Megatron-LM 必须配置 `use-mcore-model`,MindSpore Transformers 必须配置`use_legacy: False` - -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|--------------------------------------------|---------------------------------------------|--------------------------------------------|---------------------------------------------------------------------| -| `use-legacy-model`和`use-mcore-model`组合 | 是否使用 mcore 模型 | `use_legacy` | 是否使用 mcore 模型 | -| `num-layers` | 网络层数,Transformer层的数量 | `num_layers` | 网络层数,Transformer层的数量 | -| `encoder-num-layers` | 编码器(Encoder)层数 | 不支持配置 | | -| `decoder-num-layers` | 解码器(Decoder)层数 | 不支持配置 | | -| `hidden-size` | 隐藏层大小,隐藏状态的维度 | `hidden_size` | 隐藏层大小,隐藏状态的维度 | -| `ffn-hidden-size` | 前馈网络隐藏层大小 | `intermediate_size` | 前馈网络隐藏层大小 | -| `num-attention-heads` | 注意力头数 | `num_heads` | 注意力头数 | -| `kv-channels` | Key/Value 张量通道数 | `head_dim` | Key/Value 张量通道数 | -| `group-query-attention` | 是否启用分组查询注意力 | `use_gqa` | 是否启用分组查询注意力 | -| `num-query-groups` | 查询分组数量 | `n_kv_heads` | 查询分组数量 | -| `max-position-embeddings` | 最大位置编码长度 | `max_position_embeddings` | 最大位置编码长度 | -| `position-embedding-type` | 位置编码类型,如 learned_absolute、rope 等 | `position_embedding_type` | 位置编码类型,如 learned_absolute、rope 等 | -| `use-rotary-position-embeddings` | 是否使用旋转位置编码(RoPE) | 由`position_embedding_type`==`rope`控制 | 是否使用旋转位置编码(RoPE) | -| `rotary-base` | 旋转基数,用于 RoPE | `rotary_base` | 旋转基数,用于 RoPE | -| `rotary-percent` | 旋转位置编码应用比例 | `rotary_percent` | 旋转位置编码应用比例 | -| `rotary-interleaved` | 是否使用交错的旋转编码 | `rotary_interleaved` | 是否使用交错的旋转编码 | -| `rotary-seq-len-interpolation-factor` | 旋转序列长度插值因子 | `rotary_seq_len_interpolation_factor` | 旋转序列长度插值因子 | -| `use-rope-scaling` | 是否启用 RoPE 缩放 | `use_rope_scaling` | 是否启用 RoPE 缩放 | -| `rope-scaling-factor` | RoPE 缩放因子 | `no_position_embedding` | 是否禁用位置编码 | -| `no-position-embedding` | 是否禁用位置编码 | 不支持配置 | 默认不禁用 | -| `disable-bias-linear` | 不在线性层使用bias | `add_bias_linear` | 在线性层使用 bias | -| `mrope-section` | 多段 RoPE 段信息(多个段) | 不支持配置 | | -| `make-vocab-size-divisible-by` | 使词表大小可被指定数整除 | 不支持配置 | 默认不修改词表大小 | -| `init-method-std` | 模型参数初始化时使用的正态分布的标准差 | `init_method_std` | 模型参数初始化时使用的正态分布的标准差 | -| `attention-dropout` | 多头自注意力机制里应用的 Dropout 概率 | `attention_dropout` | 多头自注意力机制里应用的 Dropout 概率 | -| `hidden-dropout` | 隐藏层的 Dropout 概率 | `hidden_dropout` | 隐藏层的 Dropout 概率 | -| `normalization` | 归一化方法,LayerNorm 或 RMSNorm | `normalization` | 归一化方法,LayerNorm 或 RMSNorm | -| `norm-epsilon` | 归一化稳定因子(epsilon) | `rms_norm_eps` | RMSNorm 稳定因子 | -| `apply-layernorm-1p` | 是否在 LayerNorm 后应用 1 加法 | 不支持配置 | | -| `apply-residual-connection-post-layernorm` | 残差连接是否在 LayerNorm 之后应用 | `apply_residual_connection_post_layernorm` | 残差连接是否在 LayerNorm 之后应用 | -| `openai-gelu` | 是否使用 OpenAI 版本的 GELU 激活函数 | 不支持配置 | | -| `squared-relu` | 是否使用平方 ReLU 激活函数 | 不支持配置 | | -| 由`swiglu`,`openai-gelu`,`squared-relu`控制 | 默认为 torch.nn.functional.gelu | `hidden_act` | 激活函数类型 | -| `gated_linear_unit` | 多层感知机(MLP)中是否使用门控线性单元 | `gated_linear_unit` | 多层感知机(MLP)中是否使用门控线性单元 | -| `swiglu` | 是否使用 SwiGLU 激活函数 | `hidden_act`==`silu`和`gated_linear_unit`组合 | 是否使用 SwiGLU 激活函数 | -| `no-persist-layer-norm` | 禁用持久化层归一化 | 不支持配置 | | -| `untie-embeddings-and-output-weights` | 是否解耦输入嵌入层和输出层权重 | `untie_embeddings_and_output_weights` | 是否解耦输入嵌入层和输出层权重 | -| 由`fp16` 和 `bf16` 控制 | 训练中张量计算精度 | `compute_dtype` | 训练中张量计算精度 | -| `grad-reduce-in-bf16` | 以 BFloat16 执行梯度规约 | 不支持配置 | | -| 不支持配置 | 默认以 BFloat16 生成初始化张量 | `param_init_type` | 权重张量初始化精度,默认 Float32,以保证反向梯度以 Float32 更新 | -| 不支持配置 | 默认以 Float32 精度计算层归一化 | `layernorm_compute_type` | 层归一化张量计算精度 | -| `attention-softmax-in-fp32` | 在 Float32 中执行 attention softmax | `softmax_compute_type` | softmax 张量计算精度 | -| 不支持配置 | | `rotary_dtype` | 位置编码张量计算精度 | -| `loss-scale` | 总体损失缩放因子 | `loss_scale_value` | 总体损失缩放因子,配置在 runner_wrapper 中,`compute_dtype`为BFloat16的场景下,通常设置为1.0 | -| `initial-loss-scale` | 初始损失缩放因子 | 不支持配置 | | -| `min-loss-scale` | 最小损失缩放因子 | 不支持配置 | | -| `loss-scale-window` | 动态缩放窗口大小 | `loss_scale_window` | 动态缩放窗口大小 | -| `hysteresis` | 损失缩放迟滞参数 | 不支持配置 | | -| `fp32-residual-connection` | 使用 Float32 残差连接 | 不支持配置 | | -| `accumulate-allreduce-grads-in-fp32` | 使用 Float32 累加并规约梯度 | 不支持配置 | 默认使用 Float32 累加并规约梯度 | -| `fp16-lm-cross-entropy` | 使用 Float16 执行语言模型交叉熵 | 不支持配置 | 默认使用 Float32 执行语言模型交叉熵 | -| `q-lora-rank` | Query 投影层的 LoRA rank,启用 Q-LoRA 时使用 | `q_lora_rank` | Query 投影层的 LoRA rank,启用 Q-LoRA 时使用 | -| `kv-lora-rank` | Key/Value 投影层的 LoRA rank,启用 KV-LoRA 时使用 | `kv_lora_rank` | Key/Value 投影层的 LoRA rank,启用 KV-LoRA 时使用 | -| `qk-head-dim` | Q/K 每个头的维度(QK 头维度) | `qk_nope_head_dim` | Q/K 每个头的维度(QK 头维度) | -| `qk-pos-emb-head-dim` | QK 相对位置嵌入的每头维度 | `qk_rope_head_dim` | QK 相对位置嵌入的每头维度 | -| `v-head-dim` | Value 投影每头的维度(V 头维度) | `v_head_dim` | Value 投影每头的维度(V 头维度) | -| `rotary-scaling-factor` | Rotary Positional Embedding 缩放因子(RoPE 缩放系数) | `scaling_factor` | Rotary Positional Embedding 缩放因子(RoPE 缩放系数) | -| `use-precision-aware-optimizer` | 启用精度感知的优化器,用于自动管理不同 dtype 的参数更新 | 不支持配置 | | -| `main-grads-dtype` | 主梯度的数据类型 | 不支持配置 | 默认使用 Float32 作为主梯度的数据类型 | -| `main-params-dtype` | 主参数的数据类型 | 不支持配置 | 默认使用 Float32 作为主参数的数据类型 | -| `exp-avg-dtype` | EMA(指数移动平均)的数据类型 | 不支持配置 | | -| `exp-avg-sq-dtype` | EMA平方项的数据类型 | 不支持配置 | | -| `first-last-layers-bf16` | 是否将首尾层强制使用 BFloat16 | 不支持配置 | | -| `num-layers-at-start-in-bf16` | 开始部分使用 BFloat16 的层数 | 不支持配置 | | -| `num-layers-at-end-in-bf16` | 末尾部分使用 BFloat16 的层数 | 不支持配置 | | -| `multi-latent-attention` | 是否启用多隐变量注意力机制 | `multi_latent_attention` | 是否启用多隐变量注意力机制 | -| `qk-layernorm` | 启用Query/Key 层归一化 | `qk-layernorm` | 启用Query/Key 层归一化 | + 本文档仅支持 mcore 模型的精度比对,故 Megatron-LM 必须配置 `use-mcore-model`,MindSpore Transformers 必须配置`use_legacy: False` + + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |--------------------------------------------|---------------------------------------------|--------------------------------------------|---------------------------------------------------------------------| + | `use-legacy-model`和`use-mcore-model`组合 | 是否使用 mcore 模型 | `use_legacy` | 是否使用 mcore 模型 | + | `num-layers` | 网络层数,Transformer层的数量 | `num_layers` | 网络层数,Transformer层的数量 | + | `encoder-num-layers` | 编码器(Encoder)层数 | 不支持配置 | | + | `decoder-num-layers` | 解码器(Decoder)层数 | 不支持配置 | | + | `hidden-size` | 隐藏层大小,隐藏状态的维度 | `hidden_size` | 隐藏层大小,隐藏状态的维度 | + | `ffn-hidden-size` | 前馈网络隐藏层大小 | `intermediate_size` | 前馈网络隐藏层大小 | + | `num-attention-heads` | 注意力头数 | `num_heads` | 注意力头数 | + | `kv-channels` | Key/Value 张量通道数 | `head_dim` | Key/Value 张量通道数 | + | `group-query-attention` | 是否启用分组查询注意力 | `use_gqa` | 是否启用分组查询注意力 | + | `num-query-groups` | 查询分组数量 | `n_kv_heads` | 查询分组数量 | + | `max-position-embeddings` | 最大位置编码长度 | `max_position_embeddings` | 最大位置编码长度 | + | `position-embedding-type` | 位置编码类型,如 learned_absolute、rope 等 | `position_embedding_type` | 位置编码类型,如 learned_absolute、rope 等 | + | `use-rotary-position-embeddings` | 是否使用旋转位置编码(RoPE) | 由`position_embedding_type`==`rope`控制 | 是否使用旋转位置编码(RoPE) | + | `rotary-base` | 旋转基数,用于 RoPE | `rotary_base` | 旋转基数,用于 RoPE | + | `rotary-percent` | 旋转位置编码应用比例 | `rotary_percent` | 旋转位置编码应用比例 | + | `rotary-interleaved` | 是否使用交错的旋转编码 | `rotary_interleaved` | 是否使用交错的旋转编码 | + | `rotary-seq-len-interpolation-factor` | 旋转序列长度插值因子 | `rotary_seq_len_interpolation_factor` | 旋转序列长度插值因子 | + | `use-rope-scaling` | 是否启用 RoPE 缩放 | `use_rope_scaling` | 是否启用 RoPE 缩放 | + | `rope-scaling-factor` | RoPE 缩放因子 | `no_position_embedding` | 是否禁用位置编码 | + | `no-position-embedding` | 是否禁用位置编码 | 不支持配置 | 默认不禁用 | + | `disable-bias-linear` | 不在线性层使用bias | `add_bias_linear` | 在线性层使用 bias | + | `mrope-section` | 多段 RoPE 段信息(多个段) | 不支持配置 | | + | `make-vocab-size-divisible-by` | 使词表大小可被指定数整除 | 不支持配置 | 默认不修改词表大小 | + | `init-method-std` | 模型参数初始化时使用的正态分布的标准差 | `init_method_std` | 模型参数初始化时使用的正态分布的标准差 | + | `attention-dropout` | 多头自注意力机制里应用的 Dropout 概率 | `attention_dropout` | 多头自注意力机制里应用的 Dropout 概率 | + | `hidden-dropout` | 隐藏层的 Dropout 概率 | `hidden_dropout` | 隐藏层的 Dropout 概率 | + | `normalization` | 归一化方法,LayerNorm 或 RMSNorm | `normalization` | 归一化方法,LayerNorm 或 RMSNorm | + | `norm-epsilon` | 归一化稳定因子(epsilon) | `rms_norm_eps` | RMSNorm 稳定因子 | + | `apply-layernorm-1p` | 是否在 LayerNorm 后应用 1 加法 | 不支持配置 | | + | `apply-residual-connection-post-layernorm` | 残差连接是否在 LayerNorm 之后应用 | `apply_residual_connection_post_layernorm` | 残差连接是否在 LayerNorm 之后应用 | + | `openai-gelu` | 是否使用 OpenAI 版本的 GELU 激活函数 | 不支持配置 | | + | `squared-relu` | 是否使用平方 ReLU 激活函数 | 不支持配置 | | + | 由`swiglu`,`openai-gelu`,`squared-relu`控制 | 默认为 torch.nn.functional.gelu | `hidden_act` | 激活函数类型 | + | `gated_linear_unit` | 多层感知机(MLP)中是否使用门控线性单元 | `gated_linear_unit` | 多层感知机(MLP)中是否使用门控线性单元 | + | `swiglu` | 是否使用 SwiGLU 激活函数 | `hidden_act`==`silu`和`gated_linear_unit`组合 | 是否使用 SwiGLU 激活函数 | + | `no-persist-layer-norm` | 禁用持久化层归一化 | 不支持配置 | | + | `untie-embeddings-and-output-weights` | 是否解耦输入嵌入层和输出层权重 | `untie_embeddings_and_output_weights` | 是否解耦输入嵌入层和输出层权重 | + | 由`fp16` 和 `bf16` 控制 | 训练中张量计算精度 | `compute_dtype` | 训练中张量计算精度 | + | `grad-reduce-in-bf16` | 以 BFloat16 执行梯度规约 | 不支持配置 | | + | 不支持配置 | 默认以 BFloat16 生成初始化张量 | `param_init_type` | 权重张量初始化精度,默认 Float32,以保证反向梯度以 Float32 更新 | + | 不支持配置 | 默认以 Float32 精度计算层归一化 | `layernorm_compute_type` | 层归一化张量计算精度 | + | `attention-softmax-in-fp32` | 在 Float32 中执行 attention softmax | `softmax_compute_type` | softmax 张量计算精度 | + | 不支持配置 | | `rotary_dtype` | 位置编码张量计算精度 | + | `loss-scale` | 总体损失缩放因子 | `loss_scale_value` | 总体损失缩放因子,配置在 runner_wrapper 中,`compute_dtype`为BFloat16的场景下,通常设置为1.0 | + | `initial-loss-scale` | 初始损失缩放因子 | 不支持配置 | | + | `min-loss-scale` | 最小损失缩放因子 | 不支持配置 | | + | `loss-scale-window` | 动态缩放窗口大小 | `loss_scale_window` | 动态缩放窗口大小 | + | `hysteresis` | 损失缩放迟滞参数 | 不支持配置 | | + | `fp32-residual-connection` | 使用 Float32 残差连接 | 不支持配置 | | + | `accumulate-allreduce-grads-in-fp32` | 使用 Float32 累加并规约梯度 | 不支持配置 | 默认使用 Float32 累加并规约梯度 | + | `fp16-lm-cross-entropy` | 使用 Float16 执行语言模型交叉熵 | 不支持配置 | 默认使用 Float32 执行语言模型交叉熵 | + | `q-lora-rank` | Query 投影层的 LoRA rank,启用 Q-LoRA 时使用 | `q_lora_rank` | Query 投影层的 LoRA rank,启用 Q-LoRA 时使用 | + | `kv-lora-rank` | Key/Value 投影层的 LoRA rank,启用 KV-LoRA 时使用 | `kv_lora_rank` | Key/Value 投影层的 LoRA rank,启用 KV-LoRA 时使用 | + | `qk-head-dim` | Q/K 每个头的维度(QK 头维度) | `qk_nope_head_dim` | Q/K 每个头的维度(QK 头维度) | + | `qk-pos-emb-head-dim` | QK 相对位置嵌入的每头维度 | `qk_rope_head_dim` | QK 相对位置嵌入的每头维度 | + | `v-head-dim` | Value 投影每头的维度(V 头维度) | `v_head_dim` | Value 投影每头的维度(V 头维度) | + | `rotary-scaling-factor` | Rotary Positional Embedding 缩放因子(RoPE 缩放系数) | `scaling_factor` | Rotary Positional Embedding 缩放因子(RoPE 缩放系数) | + | `use-precision-aware-optimizer` | 启用精度感知的优化器,用于自动管理不同 dtype 的参数更新 | 不支持配置 | | + | `main-grads-dtype` | 主梯度的数据类型 | 不支持配置 | 默认使用 Float32 作为主梯度的数据类型 | + | `main-params-dtype` | 主参数的数据类型 | 不支持配置 | 默认使用 Float32 作为主参数的数据类型 | + | `exp-avg-dtype` | EMA(指数移动平均)的数据类型 | 不支持配置 | | + | `exp-avg-sq-dtype` | EMA平方项的数据类型 | 不支持配置 | | + | `first-last-layers-bf16` | 是否将首尾层强制使用 BFloat16 | 不支持配置 | | + | `num-layers-at-start-in-bf16` | 开始部分使用 BFloat16 的层数 | 不支持配置 | | + | `num-layers-at-end-in-bf16` | 末尾部分使用 BFloat16 的层数 | 不支持配置 | | + | `multi-latent-attention` | 是否启用多隐变量注意力机制 | `multi_latent_attention` | 是否启用多隐变量注意力机制 | + | `qk-layernorm` | 启用Query/Key 层归一化 | `qk-layernorm` | 启用Query/Key 层归一化 | - 优化器与学习率调度配置 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|---------------------------|-----------------------------------|------------------------|------------------------------------| -| `optimizer` | 优化器类型,如 adam、sgd 等 | `type` | 优化器类型,如 adam、sgd 等 | -| `adam-beta1`和`adam-beta2` | Adam 优化器的 β 参数 | `betas` | Adam 优化器的 β 参数 | -| `adam-eps` | Adam 优化器中的 ε(防止除零) | `eps` | Adam 优化器中的 ε(防止除零) | -| `weight-decay` | 权重衰减系数 | `weight-decay` | 权重衰减系数 | -| `start-weight-decay` | 初始权重衰减值 | 不支持配置 | | -| `end-weight-decay` | 最终权重衰减值 | 不支持配置 | | -| `weight-decay-incr-style` | 权重衰减调整策略,如 constant、linear、cosine | 不支持配置 | | -| `clip-grad` | 梯度裁剪阈值 | `clip_grad` | 梯度裁剪阈值,配置在 runner_wrapper 中,通常为1.0 | -| `lr` | 学习率 | `learning_rate` | 学习率 | -| `lr-decay-style` | 学习率衰减方式 | `type` | 学习率衰减方式 | -| `lr-decay-iters` | 学习率衰减对应迭代数 | `total_steps` | 默认为全部迭代数 | -| `lr-decay-samples` | 学习率衰减对应样本数 | 不支持配置 | | -| `lr-warmup-iters` | 学习率预热迭代步数 | `warmup_steps` | 学习率预热迭代步数 | -| `lr-warmup-fraction` | 学习率预热阶段比例 | `warmup_ratio` | 学习率预热阶段比例 | -| `lr-warmup-init` | 学习率预热起始值 | `warmup_lr_init` | 学习率预热起始值 | -| `min-lr` | 最小学习率 | `min-lr` | 最小学习率 | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |---------------------------|-----------------------------------|------------------------|------------------------------------| + | `optimizer` | 优化器类型,如 adam、sgd 等 | `type` | 优化器类型,如 adam、sgd 等 | + | `adam-beta1`和`adam-beta2` | Adam 优化器的 β 参数 | `betas` | Adam 优化器的 β 参数 | + | `adam-eps` | Adam 优化器中的 ε(防止除零) | `eps` | Adam 优化器中的 ε(防止除零) | + | `weight-decay` | 权重衰减系数 | `weight-decay` | 权重衰减系数 | + | `start-weight-decay` | 初始权重衰减值 | 不支持配置 | | + | `end-weight-decay` | 最终权重衰减值 | 不支持配置 | | + | `weight-decay-incr-style` | 权重衰减调整策略,如 constant、linear、cosine | 不支持配置 | | + | `clip-grad` | 梯度裁剪阈值 | `clip_grad` | 梯度裁剪阈值,配置在 runner_wrapper 中,通常为1.0 | + | `lr` | 学习率 | `learning_rate` | 学习率 | + | `lr-decay-style` | 学习率衰减方式 | `type` | 学习率衰减方式 | + | `lr-decay-iters` | 学习率衰减对应迭代数 | `total_steps` | 默认为全部迭代数 | + | `lr-decay-samples` | 学习率衰减对应样本数 | 不支持配置 | | + | `lr-warmup-iters` | 学习率预热迭代步数 | `warmup_steps` | 学习率预热迭代步数 | + | `lr-warmup-fraction` | 学习率预热阶段比例 | `warmup_ratio` | 学习率预热阶段比例 | + | `lr-warmup-init` | 学习率预热起始值 | `warmup_lr_init` | 学习率预热起始值 | + | `min-lr` | 最小学习率 | `min-lr` | 最小学习率 | - 并行与分布式配置 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|----------------------------------------|--------------------------------------------|-------------------------------------|---------------------------| -| `tensor-model-parallel-size` | 张量模型并行大小 | `model_parallel` | 张量模型并行大小 | -| `pipeline-model-parallel-size` | 流水线模型并行大小 | `pipeline_stage` | 流水线模型并行大小 | -| `sequence-parallel` | 是否启用序列并行 | `use_seq_parallel` | 是否启用序列并行 | -| `context-parallel-size` | 上下文并行大小 | `context_parallel` | 上下文并行大小 | -| `use-distributed-optimizer` | 是否使用分布式优化器 | `parallel_optimizer_config` | 是否使用分布式优化器 | -| `expert-model-parallel-size` | Expert 层模型并行度 | `expert_parallel` | Expert 层模型并行度 | -| `expert-tensor-parallel-size` | Expert 层 tensor 并行度 | `expert_model_parallel` | Expert 层 tensor 并行度 | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |----------------------------------------|--------------------------------------------|-------------------------------------|---------------------------| + | `tensor-model-parallel-size` | 张量模型并行大小 | `model_parallel` | 张量模型并行大小 | + | `pipeline-model-parallel-size` | 流水线模型并行大小 | `pipeline_stage` | 流水线模型并行大小 | + | `sequence-parallel` | 是否启用序列并行 | `use_seq_parallel` | 是否启用序列并行 | + | `context-parallel-size` | 上下文并行大小 | `context_parallel` | 上下文并行大小 | + | `use-distributed-optimizer` | 是否使用分布式优化器 | `parallel_optimizer_config` | 是否使用分布式优化器 | + | `expert-model-parallel-size` | Expert 层模型并行度 | `expert_parallel` | Expert 层模型并行度 | + | `expert-tensor-parallel-size` | Expert 层 tensor 并行度 | `expert_model_parallel` | Expert 层 tensor 并行度 | - FlashAttention / Fused Attention 相关 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|-----------------------------|----------------------------------------|------------------------|--------------------------| -| `attention-backend` | 注意力实现后端:flash、fused、unfused、local、auto | 不支持配置 | | -| `use-flash-attn` | 是否启用 FlashAttention | `use_flash_attention` | 是否启用 FlashAttention,默认启用 | -| `no-masked-softmax-fusion` | 禁用 masked softmax 融合 | 不支持配置 | | -| `no-bias-gelu-fusion` | 禁用 bias + GELU 融合 | 不支持配置 | | -| `no-bias-swiglu-fusion` | 禁用 bias + SwiGLU 融合 | 不支持配置 | | -| `no-bias-dropout-fusion` | 禁用 bias + Dropout 融合 | 不支持配置 | | -| `no-rope-fusion` | 禁用 RoPE 融合 | 不支持配置 | | -| `cross-entropy-loss-fusion` | 启用交叉熵损失融合 | 不支持配置 | | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |-----------------------------|----------------------------------------|------------------------|--------------------------| + | `attention-backend` | 注意力实现后端:flash、fused、unfused、local、auto | 不支持配置 | | + | `use-flash-attn` | 是否启用 FlashAttention | `use_flash_attention` | 是否启用 FlashAttention,默认启用 | + | `no-masked-softmax-fusion` | 禁用 masked softmax 融合 | 不支持配置 | | + | `no-bias-gelu-fusion` | 禁用 bias + GELU 融合 | 不支持配置 | | + | `no-bias-swiglu-fusion` | 禁用 bias + SwiGLU 融合 | 不支持配置 | | + | `no-bias-dropout-fusion` | 禁用 bias + Dropout 融合 | 不支持配置 | | + | `no-rope-fusion` | 禁用 RoPE 融合 | 不支持配置 | | + | `cross-entropy-loss-fusion` | 启用交叉熵损失融合 | 不支持配置 | | - MoE 相关 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|---------------------------------------|----------------------------|---------------------------------------|----------------------------| -| `num-experts` | 每层的专家数 | `num-experts` | 每层的专家数 | -| `moe-layer-freq` | 每隔多少层插入 MoE 层 | `moe-layer-freq` | 每隔多少层插入 MoE 层 | -| `moe-ffn-hidden-size` | MoE 中 FFN 隐藏层维度 | `moe_intermediate_size` | MoE 中 FFN 隐藏层维度 | -| `moe-shared-expert-intermediate-size` | 多专家共享中间维度大小 | `moe_shared_expert_intermediate_size` | 多专家共享中间维度大小 | -| `moe-shared-expert-overlap` | 是否重叠共享专家中间层 | `moe_shared_expert_overlap` | 是否重叠共享专家中间层 | -| `moe-grouped-gemm` | 是否使用 Grouped GEMM 优化 | `use_gmm` | 是否使用 Grouped GEMM 优化 | -| `moe-router-load-balancing-type` | Router 负载均衡策略 | `moe_router_load_balancing_type` | Router 负载均衡策略 | -| `moe-router-dtype` | Router 分数数据类型 | `router_dense_type` | Router 分数数据类型 | -| `moe-router-score-function` | Router 分数计算方式(如 softmax) | `use_gating_sigmoid` | 是否应用 Sigmoid 激活函数 | -| `moe-router-topk` | Router top-k 选择数目 | `num_experts_chosen` | Router top-k 选择数目 | -| `moe-router-pre-softmax` | 是否在 softmax 前进行处理 | `moe_router_pre_softmax` | 是否在 softmax 前进行处理 | -| `moe-router-num-groups` | token 分组数 | `n_groups` | token 分组数 | -| `moe-router-group-topk` | 每组 token 的 top-k 数目 | `topk_group` | 每组 token 的 top-k 数目 | -| `moe-router-topk-scaling-factor` | top-k 分数缩放因子 | `routed_scaling_factor` | top-k 分数缩放因子 | -| `moe-router-enable-expert-bias` | 是否使用 expert 的 bias | `balance_via_topk_bias` | 是否使用 expert 的 bias | -| `moe-router-bias-update-rate` | expert bias 更新率 | `topk_bias_update_rate` | expert bias 更新率 | -| `moe-use-legacy-grouped-gemm` | 是否使用旧版 Grouped GEMM | 不支持配置 | | -| `moe-aux-loss-coeff` | MoE 辅助损失系数 | 不支持配置 | | -| `moe-z-loss-coeff` | MoE z-loss 系数 | 不支持配置 | | -| `moe-input-jitter-eps` | MoE 输入 jitter 噪声量 | `moe_input_jitter_eps` | MoE 输入 jitter 噪声量 | -| `moe-token-dispatcher-type` | token 调度策略(allgather 等) | 不支持配置 | | -| `moe-enable-deepep` | 是否启用 DeepEP 混合专家优化 | `moe_enable_deepep` | 是否启用 DeepEP 混合专家优化 | -| `moe-per-layer-logging` | 每层 MoE 打印日志 | `moe_per_layer_logging` | 每层 MoE 打印日志 | -| `moe-expert-capacity-factor` | expert 容量扩展比例 | `capacity_factor` | expert 容量扩展比例 | -| `moe-pad-expert-input-to-capacity` | 是否填充 expert 输入到容量上限 | `moe_pad_expert_input_to_capacity` | 是否填充 expert 输入到容量上限 | -| `moe-token-drop-policy` | token 丢弃策略(probs/position) | `enable_sdrop` | token 丢弃策略(probs/position) | -| `moe-extended-tp` | 启用扩展 tensor 并行支持 | 不支持配置 | | -| `moe-use-upcycling` | 是否启用专家 upcycling | 不支持配置 | | -| `moe-permute-fusion` | 启用专家内部 permute 融合优化 | `moe_permute_fusion` | 启用专家内部 permute 融合优化 | -| `mtp-num-layers` | MoE 层的数量 | `mtp_depth` | MoE 层的数量 | -| `mtp-loss-scaling-factor` | MoE 架构中的损失缩放 | `mtp_loss_factor` | MoE 架构中的损失缩放 | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |---------------------------------------|----------------------------|---------------------------------------|----------------------------| + | `num-experts` | 每层的专家数 | `num-experts` | 每层的专家数 | + | `moe-layer-freq` | 每隔多少层插入 MoE 层 | `moe-layer-freq` | 每隔多少层插入 MoE 层 | + | `moe-ffn-hidden-size` | MoE 中 FFN 隐藏层维度 | `moe_intermediate_size` | MoE 中 FFN 隐藏层维度 | + | `moe-shared-expert-intermediate-size` | 多专家共享中间维度大小 | `moe_shared_expert_intermediate_size` | 多专家共享中间维度大小 | + | `moe-shared-expert-overlap` | 是否重叠共享专家中间层 | `moe_shared_expert_overlap` | 是否重叠共享专家中间层 | + | `moe-grouped-gemm` | 是否使用 Grouped GEMM 优化 | `use_gmm` | 是否使用 Grouped GEMM 优化 | + | `moe-router-load-balancing-type` | Router 负载均衡策略 | `moe_router_load_balancing_type` | Router 负载均衡策略 | + | `moe-router-dtype` | Router 分数数据类型 | `router_dense_type` | Router 分数数据类型 | + | `moe-router-score-function` | Router 分数计算方式(如 softmax) | `use_gating_sigmoid` | 是否应用 Sigmoid 激活函数 | + | `moe-router-topk` | Router top-k 选择数目 | `num_experts_chosen` | Router top-k 选择数目 | + | `moe-router-pre-softmax` | 是否在 softmax 前进行处理 | `moe_router_pre_softmax` | 是否在 softmax 前进行处理 | + | `moe-router-num-groups` | token 分组数 | `n_groups` | token 分组数 | + | `moe-router-group-topk` | 每组 token 的 top-k 数目 | `topk_group` | 每组 token 的 top-k 数目 | + | `moe-router-topk-scaling-factor` | top-k 分数缩放因子 | `routed_scaling_factor` | top-k 分数缩放因子 | + | `moe-router-enable-expert-bias` | 是否使用 expert 的 bias | `balance_via_topk_bias` | 是否使用 expert 的 bias | + | `moe-router-bias-update-rate` | expert bias 更新率 | `topk_bias_update_rate` | expert bias 更新率 | + | `moe-use-legacy-grouped-gemm` | 是否使用旧版 Grouped GEMM | 不支持配置 | | + | `moe-aux-loss-coeff` | MoE 辅助损失系数 | 不支持配置 | | + | `moe-z-loss-coeff` | MoE z-loss 系数 | 不支持配置 | | + | `moe-input-jitter-eps` | MoE 输入 jitter 噪声量 | `moe_input_jitter_eps` | MoE 输入 jitter 噪声量 | + | `moe-token-dispatcher-type` | token 调度策略(allgather 等) | 不支持配置 | | + | `moe-enable-deepep` | 是否启用 DeepEP 混合专家优化 | `moe_enable_deepep` | 是否启用 DeepEP 混合专家优化 | + | `moe-per-layer-logging` | 每层 MoE 打印日志 | `moe_per_layer_logging` | 每层 MoE 打印日志 | + | `moe-expert-capacity-factor` | expert 容量扩展比例 | `capacity_factor` | expert 容量扩展比例 | + | `moe-pad-expert-input-to-capacity` | 是否填充 expert 输入到容量上限 | `moe_pad_expert_input_to_capacity` | 是否填充 expert 输入到容量上限 | + | `moe-token-drop-policy` | token 丢弃策略(probs/position) | `enable_sdrop` | token 丢弃策略(probs/position) | + | `moe-extended-tp` | 启用扩展 tensor 并行支持 | 不支持配置 | | + | `moe-use-upcycling` | 是否启用专家 upcycling | 不支持配置 | | + | `moe-permute-fusion` | 启用专家内部 permute 融合优化 | `moe_permute_fusion` | 启用专家内部 permute 融合优化 | + | `mtp-num-layers` | MoE 层的数量 | `mtp_depth` | MoE 层的数量 | + | `mtp-loss-scaling-factor` | MoE 架构中的损失缩放 | `mtp_loss_factor` | MoE 架构中的损失缩放 | - 数据加载与分词设置 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|-------------------------------|---------------------------|------------------------|--------------------------------| -| `data-path`和`split`组合 | 通用数据路径 | `data_path` | Megatron数据集采样比例以及路径 | -| `train-data-path` | 训练数据路径 | 不支持配置 | | -| `valid-data-path` | 验证数据路径 | 不支持配置 | | -| `test-data-path` | 测试数据路径 | 不支持配置 | | -| `vocab-size` | 词表大小 | `vocab_size` | 词表大小 | -| `vocab-file` | 词表文件路径 | 不支持配置 | | -| `merge-file` | BPE 合并规则文件 | 不支持配置 | | -| `tokenizer-type` | 分词器类型(如 GPT2BPETokenizer) | 不支持配置 | 默认使用 Huggingface 对应的 Tokenizer | -| `seq-length` | 输入序列长度 | `seq_length` | 输入序列长度 | -| `encoder-seq-length` | 编码器输入长度 | 不支持配置 | | -| `decoder-seq-length` | 解码器输入长度 | 不支持配置 | | -| `retriever-seq-length` | 检索器序列长度(如果启用) | 不支持配置 | | -| `num-workers` | 加载数据的线程数 | `num_parallel_workers` | 加载数据的线程数 | -| `num-dataset-builder-threads` | 构建数据集的线程数 | 不支持配置 | | -| `data-cache-path` | 数据缓存路径 | 不支持配置 | | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |-------------------------------|---------------------------|------------------------|--------------------------------| + | `data-path`和`split`组合 | 通用数据路径 | `data_path` | Megatron数据集采样比例以及路径 | + | `train-data-path` | 训练数据路径 | 不支持配置 | | + | `valid-data-path` | 验证数据路径 | 不支持配置 | | + | `test-data-path` | 测试数据路径 | 不支持配置 | | + | `vocab-size` | 词表大小 | `vocab_size` | 词表大小 | + | `vocab-file` | 词表文件路径 | 不支持配置 | | + | `merge-file` | BPE 合并规则文件 | 不支持配置 | | + | `tokenizer-type` | 分词器类型(如 GPT2BPETokenizer) | 不支持配置 | 默认使用 Huggingface 对应的 Tokenizer | + | `seq-length` | 输入序列长度 | `seq_length` | 输入序列长度 | + | `encoder-seq-length` | 编码器输入长度 | 不支持配置 | | + | `decoder-seq-length` | 解码器输入长度 | 不支持配置 | | + | `retriever-seq-length` | 检索器序列长度(如果启用) | 不支持配置 | | + | `num-workers` | 加载数据的线程数 | `num_parallel_workers` | 加载数据的线程数 | + | `num-dataset-builder-threads` | 构建数据集的线程数 | 不支持配置 | | + | `data-cache-path` | 数据缓存路径 | 不支持配置 | | - 训练控制与保存 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|--------------------------------|------------------------|----------------------------------------|-----------------------------------------------------------------------------| -| 不支持配置 | 每个迭代处理的局部样本总数 | `batch_size` | 每个迭代处理的局部样本总数,在`runner_wrapper`中配置 | -| 不支持配置 | 每个迭代处理的局部样本总数 | `micro_batch_interleave_num` | 微批交错数,当`micro_batch_interleave_num`大于 1 时,启用多副本并行 | -| `global_batch_size` | 每个迭代处理的全局样本总数 | `batch_size`和`data_parallel`组合 | 每个迭代处理的全局样本总数,`batch_size`,`data_parallel`和`micro_batch_interleave_num`相乘得到 | -| 不支持配置 | 迭代周期数 | `epochs` | 迭代周期数,在`runner_wrapper`中配置 | -| `train-samples` | 总训练样本数 | `sizes` | 总训练样本数,在`train_dataset`中配置 | -| `train-iters` | 总训练迭代次数 | `epochs`,`sizes`和`global_batch_size`组合 | 总训练迭代次数,`sizes`除`global_batch_size`再乘`epochs`得到 | -| `log-interval` | 日志记录间隔(迭代步数) | `per_print_times` | 日志记录间隔(迭代步数),在`callbacks`的`MFLossMonitor`中配置 | -| `eval-iters` | 每次评估时使用的迭代步数 | 不支持配置 | | -| `eval-interval` | 评估间隔步数 | 不支持配置 | | -| `save` | 模型保存路径 | `output_dir` | 模型保存路径 | -| `save-interval` | 模型保存间隔(迭代步数) | `save_checkpoint_steps` | 模型保存间隔(迭代步数),在`callbacks`的`CheckpointMonitor`中配置 | -| `non-persistent-save-interval` | 临时保存间隔(非持久化) | 不支持配置 | | -| `non-persistent-ckpt-type` | 临时保存类型(如 global/local) | 不支持配置 | | -| `pretrained-checkpoint` | 预训练模型路径 | 不支持配置 | | -| `ckpt-step` | 加载指定 step 的权重 | `load_checkpoint`和`resume_training`组合 | 断点续训场景下,加载指定名字的权重 | -| `load` | 从该路径加载模型 | `load_checkpoint` | 从该路径加载模型 | -| `exit-interval` | 控制退出训练的迭代间隔 | `stop_step` | 控制退出训练的迭代数,在`callbacks`的`TrainCallMonitor`中配置 | -| `exit-duration-in-mins` | 控制退出训练的时间限制(分钟) | 不支持配置 | | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |--------------------------------|------------------------|----------------------------------------|-----------------------------------------------------------------------------| + | 不支持配置 | 每个迭代处理的局部样本总数 | `batch_size` | 每个迭代处理的局部样本总数,在`runner_wrapper`中配置 | + | 不支持配置 | 每个迭代处理的局部样本总数 | `micro_batch_interleave_num` | 微批交错数,当`micro_batch_interleave_num`大于 1 时,启用多副本并行 | + | `global_batch_size` | 每个迭代处理的全局样本总数 | `batch_size`和`data_parallel`组合 | 每个迭代处理的全局样本总数,`batch_size`,`data_parallel`和`micro_batch_interleave_num`相乘得到 | + | 不支持配置 | 迭代周期数 | `epochs` | 迭代周期数,在`runner_wrapper`中配置 | + | `train-samples` | 总训练样本数 | `sizes` | 总训练样本数,在`train_dataset`中配置 | + | `train-iters` | 总训练迭代次数 | `epochs`,`sizes`和`global_batch_size`组合 | 总训练迭代次数,`sizes`除`global_batch_size`再乘`epochs`得到 | + | `log-interval` | 日志记录间隔(迭代步数) | `per_print_times` | 日志记录间隔(迭代步数),在`callbacks`的`MFLossMonitor`中配置 | + | `eval-iters` | 每次评估时使用的迭代步数 | 不支持配置 | | + | `eval-interval` | 评估间隔步数 | 不支持配置 | | + | `save` | 模型保存路径 | `output_dir` | 模型保存路径 | + | `save-interval` | 模型保存间隔(迭代步数) | `save_checkpoint_steps` | 模型保存间隔(迭代步数),在`callbacks`的`CheckpointMonitor`中配置 | + | `non-persistent-save-interval` | 临时保存间隔(非持久化) | 不支持配置 | | + | `non-persistent-ckpt-type` | 临时保存类型(如 global/local) | 不支持配置 | | + | `pretrained-checkpoint` | 预训练模型路径 | 不支持配置 | | + | `ckpt-step` | 加载指定 step 的权重 | `load_checkpoint`和`resume_training`组合 | 断点续训场景下,加载指定名字的权重 | + | `load` | 从该路径加载模型 | `load_checkpoint` | 从该路径加载模型 | + | `exit-interval` | 控制退出训练的迭代间隔 | `stop_step` | 控制退出训练的迭代数,在`callbacks`的`TrainCallMonitor`中配置 | + | `exit-duration-in-mins` | 控制退出训练的时间限制(分钟) | 不支持配置 | | - 重计算配置 -MindSpore Transformers 重计算配置逻辑与 Megatron-LM 差异较大,参考[重计算配置](https://www.mindspore.cn/mindformers/docs/zh-CN/dev/feature/memory_optimization.html#%E9%87%8D%E8%AE%A1%E7%AE%97)使能即可。 + MindSpore Transformers 重计算配置逻辑与 Megatron-LM 差异较大,参考[重计算配置](https://www.mindspore.cn/mindformers/docs/zh-CN/dev/feature/memory_optimization.html#%E9%87%8D%E8%AE%A1%E7%AE%97)使能即可。 -| Megatron-LM | 含义 | MindSpore Transformers | 含义 | -|--------------------------------|-----------------------|------------------------|--------------------------| -| `recompute-activations` | 是否启用激活重计算以节省内存 | `recompute` | 是否启用激活完全重计算以节省内存(`bool`) | -| `recompute-granularity` | 重计算粒度(full/selective) | `select_recompute` | 是否开启 selective 重计算 | -| `recompute-method` | 重计算方法(uniform/block) | 不支持配置 | | -| `recompute-num-layers` | 重计算的层数 | `recompute` | 重计算的层数(`tuple`/`list`) | -| `distribute-saved-activations` | 分布式存储激活值 | 不支持配置 | | -| `checkpoint-activations` | 是否启用激活值检查点机制以减少显存 | 不支持配置 | | -| `moe-layer-recompute` | MoE 层启用重计算 | 不支持配置 | | + | Megatron-LM | 含义 | MindSpore Transformers | 含义 | + |--------------------------------|-----------------------|------------------------|--------------------------| + | `recompute-activations` | 是否启用激活重计算以节省内存 | `recompute` | 是否启用激活完全重计算以节省内存(`bool`) | + | `recompute-granularity` | 重计算粒度(full/selective) | `select_recompute` | 是否开启 selective 重计算 | + | `recompute-method` | 重计算方法(uniform/block) | 不支持配置 | | + | `recompute-num-layers` | 重计算的层数 | `recompute` | 重计算的层数(`tuple`/`list`) | + | `distribute-saved-activations` | 分布式存储激活值 | 不支持配置 | | + | `checkpoint-activations` | 是否启用激活值检查点机制以减少显存 | 不支持配置 | | + | `moe-layer-recompute` | MoE 层启用重计算 | 不支持配置 | | **注意**:两个框架还有其他训练相关性较小的配置,MindSpore Transformer 详情参考[配置说明],Megatron-LM 可通过执行命令`torchrun --nproc_per_node=1 pretrain_gpt.py --help`查看。 @@ -350,7 +350,7 @@ MindSpore Transformers 重计算配置逻辑与 Megatron-LM 差异较大,参 为了实现不同框架间模型行为的一致性,需将训练得到的权重精确映射到 MindSpore Transformers 和 Megatron-LM 中对应位置,通过合理的权重转换和切分实现。 -#### 3.3.1 权重转换 +#### 权重转换 由于 MindSpore Transformers 和 Megatron-LM 使用的权重格式、参数命名方式及张量排列存在差异,直接加载权重通常会导致不兼容。因此,需要通过专门的转换脚本将源框架导出的模型权重转换为目标框架可识别的格式。 @@ -415,6 +415,6 @@ MindSpore Transformers 重计算配置逻辑与 Megatron-LM 差异较大,参 | Megatron-LM | MindSpore Transformers | 含义 | |-----------------|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| | `iteration` | `epoch` 与 `step` 的组合 | 表示训练过程中的全局迭代次数。MindSpore Transformers 通常以 `(epoch, step)` 表示当前训练位置,而 Megatron-LM 使用单一的 `iteration` 表示。两者关系为:`iteration = (epoch - 1) * steps_per_epoch + step` | - | `lm loss` | `loss` | 训练损失,精度对比核心指标 | + | `lm loss` | `loss` | 训练损失,精度对比核心指标。MindSpore Transformers 的`loss`是指`lm loss`和`aux loss`的和,未来将会分别打印输出 | | `learning rate` | `lr` | 学习率,精度对比参考指标 | | `grand norm` | `global norm` | 全局梯度范数,精度对比参考指标 | \ No newline at end of file diff --git a/docs/mindformers/docs/source_zh_cn/index.rst b/docs/mindformers/docs/source_zh_cn/index.rst index 390908382cd88705a0d136a1aadbbbb676dff0b9..75541a558d98250f1bbe02342bc77e5bc141987a 100644 --- a/docs/mindformers/docs/source_zh_cn/index.rst +++ b/docs/mindformers/docs/source_zh_cn/index.rst @@ -143,7 +143,7 @@ MindSpore Transformers功能特性说明 - 精度对比 - - `Parallel Core精度对比 `_ + - `与 Megatron-LM 比对训练精度 `_ 环境变量 ------------------------------------