已合并
[pytorch][doc]doc file update #3535
guihaowen666创建于 2025年10月18日
[pytorch][doc]doc file update #3535
已合并
从已删除 :br_220_update_doc_file_1017合入到Ascend/MindSpeed-LLM2.2.0
共 54 个文件变更+208-212
| @@ -39,7 +39,7 @@ MindSpeed LLM:基于昇腾生态的大语言模型分布式训练框架,旨 | |||
| 39 | 39 | ||
| 40 | - **[DeepSeek-V3-671B模型全家桶](./examples/mcore/deepseek3/)** 已上线 | 40 | - **[DeepSeek-V3-671B模型全家桶](./examples/mcore/deepseek3/)** 已上线 |
| 41 | 41 | ||
| 42 | -- **支持数据集处理、权重转换、预训练、全参微调、lora微调、qlora微调** | 42 | +- **支持数据集处理、权重转换、预训练、全参微调、LoRA微调、QLoRA微调** |
| 43 | - **DeepSeek-R1-Distill** 系列模型已上线 | 43 | - **DeepSeek-R1-Distill** 系列模型已上线 |
| 44 | 44 | ||
| 45 | - **[DeepSeek-R1-Distill-Qwen](./examples/mcore/deepseek_r1_distill_qwen/)** **[DeepSeek-R1-Distill-LLaMA](./examples/mcore/deepseek_r1_distill_llama/)** | 45 | - **[DeepSeek-R1-Distill-Qwen](./examples/mcore/deepseek_r1_distill_qwen/)** **[DeepSeek-R1-Distill-LLaMA](./examples/mcore/deepseek_r1_distill_llama/)** |
| @@ -95,7 +95,6 @@ MindSpeed LLM的依赖配套如下表 | |||
| 95 | <td>apex</td> | 95 | <td>apex</td> |
| 96 | </tr> | 96 | </tr> |
| 97 | </table> | 97 | </table> |
| 98 | -注:由于master分支使用在研版本的驱动以及CANN包,因此master上的一些新特性老版本配套可能有不支持情况,要使用稳定版本,请切换到商发分支并下载对应依赖版本进行安装。 | ||
| 99 | 98 | ||
| 100 | # 安装 | 99 | # 安装 |
| 101 | 100 | ||
| @@ -627,7 +626,7 @@ MindSpeed LLM包含分布式预训练、分布式微调等训练方案。 | |||
| 627 | 626 | ||
| 628 | ## 权重转换 | 627 | ## 权重转换 |
| 629 | 628 | ||
| 630 | -MindSpeed LLM支持Huggingface、Megatron-core两种格式的权重互转,支持LoRa权重合并。权重转换特性参数和使用说明参考[权重转换](docs/pytorch/solutions/checkpoint/checkpoint_convert.md)。 | 629 | +MindSpeed LLM支持Huggingface、Megatron-core两种格式的权重互转,支持LoRA权重合并。权重转换特性参数和使用说明参考[权重转换](docs/pytorch/solutions/checkpoint/checkpoint_convert.md)。 |
| 631 | 630 | ||
| 632 | <table> | 631 | <table> |
| 633 | <thead> | 632 | <thead> |
| @@ -635,7 +634,7 @@ MindSpeed LLM支持Huggingface、Megatron-core两种格式的权重互转,支 | |||
| 635 | <th>源格式</th> | 634 | <th>源格式</th> |
| 636 | <th>目标格式</th> | 635 | <th>目标格式</th> |
| 637 | <th>切分特性</th> | 636 | <th>切分特性</th> |
| 638 | - <th>lora</th> | 637 | + <th>LoRA</th> |
| 639 | <th>贡献方</th> | 638 | <th>贡献方</th> |
| 640 | <th>Released</th> | 639 | <th>Released</th> |
| 641 | </tr> | 640 | </tr> |
| @@ -12,7 +12,7 @@ | |||
| 12 | 1. 建议用户在主机(包括宿主机)及容器中设置运行系统umask值为0027及以上,保障新增文件夹默认最高权限为750,新增文件默认最高权限为640。 | 12 | 1. 建议用户在主机(包括宿主机)及容器中设置运行系统umask值为0027及以上,保障新增文件夹默认最高权限为750,新增文件默认最高权限为640。 |
| 13 | 2. 建议用户对个人数据、商业资产、源文件、训练过程中保存的各类文件等敏感内容做好权限管控。涉及场景如MindSpeed-LLM安装目录权限管控、多用户使用共享数据集权限管控,管控权限可参考表1进行设置。 | 13 | 2. 建议用户对个人数据、商业资产、源文件、训练过程中保存的各类文件等敏感内容做好权限管控。涉及场景如MindSpeed-LLM安装目录权限管控、多用户使用共享数据集权限管控,管控权限可参考表1进行设置。 |
| 14 | 3. MindSpeed-LLM在数据预处理中会生成训练数据,在训练过程会生成权重文件,文件权限默认640,用户可根据实际需求对生成文件权限进行进阶管控。 | 14 | 3. MindSpeed-LLM在数据预处理中会生成训练数据,在训练过程会生成权重文件,文件权限默认640,用户可根据实际需求对生成文件权限进行进阶管控。 |
| 15 | -4. 在以Root用户进行训练时,您的`CKPT_SAVE_DIR`路径可能权限设置较为严格,导致无法访问该目录。您可以在脚本中添加`chmod -R 440 $CKPT_SAVE_DIR`来修改该目录的访问权限,从而确保可以正常读取和写入模型权重文件。 | 15 | +4. 在以非Root用户进行训练时,您的`CKPT_SAVE_DIR`路径可能权限设置较为严格,导致无法访问该目录。您可以在脚本中添加`chmod -R 660 $CKPT_SAVE_DIR`来修改该目录的访问权限,从而确保可以正常读取和写入模型权重文件。 |
| 16 | 16 | ||
| 17 | **表1 文件(夹)各场景权限管控推荐最大值** | 17 | **表1 文件(夹)各场景权限管控推荐最大值** |
| 18 | | 类型 | linux权限参考最大值 | | 18 | | 类型 | linux权限参考最大值 | |
| @@ -40,7 +40,7 @@ | |||
| 40 | ## 数据安全声明 | 40 | ## 数据安全声明 |
| 41 | 41 | ||
| 42 | 1. MindSpeed-LLM会在megatron中的checkpointing模块中保存模型文件,其中部分模型文件使用了风险模块pickle,可能存在数据风险。 | 42 | 1. MindSpeed-LLM会在megatron中的checkpointing模块中保存模型文件,其中部分模型文件使用了风险模块pickle,可能存在数据风险。 |
| 43 | -2. 程序运行过程中,会通过nltk.load从用户指定的路径中加载语料库,需要保证网络安全,确保下载的语料包来源可信。 | 43 | +2. 程序运行过程中,会通过nltk.download从用户指定的路径中加载语料库,需要保证网络安全,确保下载的语料包来源可信。 |
| 44 | 44 | ||
| 45 | ## 运行安全声明 | 45 | ## 运行安全声明 |
| 46 | 46 | ||
| @@ -40,7 +40,7 @@ RC2以上版本,LoRA微调场景,算法与PP、VPP、分布式优化器等 | |||
| 40 | 40 | ||
| 41 | 通过设置--lora-fusion开启CCLoRA的加速,在开启了TP或SP场景,加入--use-fused-mlp启用[Fused_MLP](fused_mlp.md)算法,针对LoRA的MLP模块进一步进行计算通信掩盖提高性能。 | 41 | 通过设置--lora-fusion开启CCLoRA的加速,在开启了TP或SP场景,加入--use-fused-mlp启用[Fused_MLP](fused_mlp.md)算法,针对LoRA的MLP模块进一步进行计算通信掩盖提高性能。 |
| 42 | 42 | ||
| 43 | -注意:cclora 与 --overlap-param-gather 特性冲突 , 不能同时使用。 | 43 | +注意:CCLoRA 与 --overlap-param-gather 特性冲突 , 不能同时使用。 |
| 44 | 44 | ||
| 45 | ## 使用效果 | 45 | ## 使用效果 |
| 46 | 46 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 问题分析 | 3 | ## 问题分析 |
| 4 | 4 | ||
| 5 | -大模型训练过程中,其ColumnParallelLinear和RowParallelLinear部分的前反向均存在相互毗邻、顺序依赖的计算通信组合,计算为Matmul,而通信则为AllReduce(不开启序列并行)或AllGather和ReduceScatter(开启序列并行)。这些计算通信的组合因为存在顺序依赖(即后一个的输入是前一个输出),常常被串行执行,但这时候计算和通信流都存在一定的空闲等待时间,该过程的执行效率没有被最大化。 | 5 | +大模型训练过程中,其ColumnParallelLinear和RowParallelLinear部分的前向/反向均存在相互毗邻、顺序依赖的计算通信组合,计算为Matmul,而通信则为AllReduce(不开启序列并行)或AllGather和ReduceScatter(开启序列并行)。这些计算通信的组合因为存在顺序依赖(即后一个的输入是前一个输出),常常被串行执行,但这时候计算和通信流都存在一定的空闲等待时间,该过程的执行效率没有被最大化。 |
| 6 | 6 | ||
| 7 | ## 解决方案 | 7 | ## 解决方案 |
| 8 | 8 | ||
| @@ -8,7 +8,7 @@ | |||
| 8 | 8 | ||
| 9 | ## 使用方法 | 9 | ## 使用方法 |
| 10 | 10 | ||
| 11 | -要启用此功能,在脚本中加入`--npu-deterministic`, 并配置环境变量`export HCCL_DETERMINISTIC=true`。seed默认为1234,也可自行设定 | 11 | +要启用此功能,在脚本中加入`--npu-deterministic`,并配置环境变量`export HCCL_DETERMINISTIC=true`。seed默认为1234,也可自行设定 |
| 12 | 12 | ||
| 13 | ## 使用效果 | 13 | ## 使用效果 |
| 14 | 14 | ||
| @@ -4,20 +4,20 @@ | |||
| 4 | 4 | ||
| 5 | | 环境变量名称 | 环境变量描述 | 链接 | | 5 | | 环境变量名称 | 环境变量描述 | 链接 | |
| 6 | |-----------------------------|------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------| | 6 | |-----------------------------|------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------| |
| 7 | -| ASCEND_LAUNCH_BLOCKING | 1:强制算子采用同步模式运行会导致性能下降,会屏蔽task_queue队列优化功能;0:会增加内存消耗,有OOM的风险。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_006.html | | 7 | +| ASCEND_LAUNCH_BLOCKING | 1:强制算子采用同步模式运行会导致性能下降,会屏蔽task_queue队列优化功能;0:会增加内存消耗,有OOM的风险。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_006.html | |
| 8 | | ASCEND_SLOG_PRINT_TO_STDOUT | 0:关闭日志打屏,日志采用默认输出方式,将日志保存在log文件中;1:开启日志打屏,日志将不会保存在log文件中,直接打屏显示。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0121.html | | 8 | | ASCEND_SLOG_PRINT_TO_STDOUT | 0:关闭日志打屏,日志采用默认输出方式,将日志保存在log文件中;1:开启日志打屏,日志将不会保存在log文件中,直接打屏显示。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0121.html | |
| 9 | | HCCL_WHITELIST_DISABLE | HCCL白名单开关,1-关闭/0-开启。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0085.html | | 9 | | HCCL_WHITELIST_DISABLE | HCCL白名单开关,1-关闭/0-开启。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0085.html | |
| 10 | | HCCL_CONNECT_TIMEOUT | 设置HCCL超时时间,默认值为120。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0077.html | | 10 | | HCCL_CONNECT_TIMEOUT | 设置HCCL超时时间,默认值为120。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0077.html | |
| 11 | | CUDA_DEVICE_MAX_CONNECTIONS | 定义了任务流能够利用或映射到的硬件队列的数量。 | 无 | | 11 | | CUDA_DEVICE_MAX_CONNECTIONS | 定义了任务流能够利用或映射到的硬件队列的数量。 | 无 | |
| 12 | | TASK_QUEUE_ENABLE | 用于控制开启task_queue算子下发队列优化的等级,0:关闭,1:开启Level 1优化,2:开启Level 2优化。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_007.html | | 12 | | TASK_QUEUE_ENABLE | 用于控制开启task_queue算子下发队列优化的等级,0:关闭,1:开启Level 1优化,2:开启Level 2优化。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_007.html | |
| 13 | | COMBINED_ENABLE | 设置combined标志。设置为0表示关闭此功能;设置为1表示开启,用于优化非连续两个算子组合类场景。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_005.html | | 13 | | COMBINED_ENABLE | 设置combined标志。设置为0表示关闭此功能;设置为1表示开启,用于优化非连续两个算子组合类场景。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_005.html | |
| 14 | -| PYTORCH_NPU_ALLOC_CONF | 内存碎片优化开关,默认是expandable_segments:False,使能时expandable_segments:True。还有内存管理和碎片回收管理接口。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_012.html | | 14 | +| PYTORCH_NPU_ALLOC_CONF | 内存碎片优化开关,默认是expandable_segments:False,使能时配置为expandable_segments:True,用于内存管理和碎片回收。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_012.html | |
| 15 | -| ASCEND_RT_VISIBLE_DEVICES | 指定哪些Device对当前进程可见,支持一次指定一个或多个Device ID。通过该环境变量,可实现不修改应用程序即可调整所用Device的功能。 | https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1alpha001/maintenref/envvar/envref_07_0028.html | | 15 | +| ASCEND_RT_VISIBLE_DEVICES | 指定哪些device对当前进程可见,支持一次指定一个或多个device ID。通过该环境变量,可实现不修改应用程序即可调整所用device的功能。 | https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1alpha001/maintenref/envvar/envref_07_0028.html | |
| 16 | | NPUS_PER_NODE | 配置一个计算节点上使用的NPU数量。 | 无 | | 16 | | NPUS_PER_NODE | 配置一个计算节点上使用的NPU数量。 | 无 | |
| 17 | | HCCL_SOCKET_IFNAME | 指定hccl socket通讯走的网卡配置。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0075.html | | 17 | | HCCL_SOCKET_IFNAME | 指定hccl socket通讯走的网卡配置。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0075.html | |
| 18 | | GLOO_SOCKET_IFNAME | 指定gloo socket通讯走的网卡配置。 | 无 | | 18 | | GLOO_SOCKET_IFNAME | 指定gloo socket通讯走的网卡配置。 | 无 | |
| 19 | | HCCL_LOGIC_SUPERPOD_ID | 指定当前设备的逻辑超节点ID,如果走ROCE,不同多机超节点ID不同,0-N。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0100.html | | 19 | | HCCL_LOGIC_SUPERPOD_ID | 指定当前设备的逻辑超节点ID,如果走ROCE,不同多机超节点ID不同,0-N。 | https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/maintenref/envvar/envref_07_0100.html | |
| 20 | | CPU_AFFINITY_CONF | 开启粗/细粒度绑核。该配置能够避免线程间抢占,提高缓存命中,避免跨NUMA节点的内存访问,减少任务调度开销,优化任务执行效率。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_033.html | | 20 | | CPU_AFFINITY_CONF | 开启粗/细粒度绑核。该配置能够避免线程间抢占,提高缓存命中,避免跨NUMA节点的内存访问,减少任务调度开销,优化任务执行效率。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_033.html | |
| 21 | -| NPU_ASD_ENABLE | 0:关闭检测功能; 1:开启特征值检测功能,打印异常日志,不告警;2:开启,并告警;3:开启,告警,并再device侧info级别日志中记录过程数据。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_029.html | | 21 | +| NPU_ASD_ENABLE | 0:关闭检测功能; 1:开启特征值检测功能,打印异常日志,不告警;2:开启,并告警;3:开启,告警,并在device侧info级别日志中记录过程数据。 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_029.html | |
| 22 | | HCCL_ASYNC_ERROR_HANDLING | 当使用HCCL用于通信时,0:不开启异步错误处理;1:开启异步错误处理,默认值为1 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_018.html | | 22 | | HCCL_ASYNC_ERROR_HANDLING | 当使用HCCL用于通信时,0:不开启异步错误处理;1:开启异步错误处理,默认值为1 | https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_018.html | |
| 23 | 23 | ||
| @@ -21,7 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | 【--context-parallel-size】 | 22 | 【--context-parallel-size】 |
| 23 | 23 | ||
| 24 | -CP切分的并行数目,要可以被序列长度整除。 | 24 | +设置CP切分的并行数目,配置值要求能够被序列长度整除。 |
| 25 | 25 | ||
| 26 | 【--attention-mask-type】 | 26 | 【--attention-mask-type】 |
| 27 | 27 | ||
| @@ -35,14 +35,12 @@ CP切分的并行数目,要可以被序列长度整除。 | |||
| 35 | 2. [**ulysses_cp_algo**](https://gitcode.com/ascend/MindSpeed/blob/master/docs/features/ulysses-context-parallel.md) | 35 | 2. [**ulysses_cp_algo**](https://gitcode.com/ascend/MindSpeed/blob/master/docs/features/ulysses-context-parallel.md) |
| 36 | 3. [**hybrid_cp_algo**](https://gitcode.com/ascend/MindSpeed/blob/master/docs/features/hybrid-context-parallel.md) | 36 | 3. [**hybrid_cp_algo**](https://gitcode.com/ascend/MindSpeed/blob/master/docs/features/hybrid-context-parallel.md) |
| 37 | 37 | ||
| 38 | -由于在微调场景,`--attention-mask-type`只能设置为`general`, | 38 | +由于在微调场景,`--attention-mask-type`只能设置为`general`,所以理论上样本越短,拼接序列包含的样本数目越多,`--context-parallel-size`设置越大,性能收益越明显。但是要注意 seq-length / context-parallel-size > 8k时可以一定程度上弥补CP带来的通信损失,针对这种场景参考配置如下,参数相关介绍参考上述对应算法的链接。 |
| 39 | -理论上样本越短,拼接序列包含的样本数目越多,`--context-parallel-size`设置越大,性能收益越明显,但是要注意 seq-length / context-parallel-size > 8k时可以 | ||
| 40 | -尽可能弥补CP带来的通信损失,针对该种场景参考配置如下,参数相关介绍参考上述对应算法的链接。CP较小时(一般<=4),`ulysses_cp_algo`是性能不错的选择。 | ||
| 41 | 39 | ||
| 42 | ```shell | 40 | ```shell |
| 43 | --seq-length 131072 | 41 | --seq-length 131072 |
| 44 | --context-parallel-size 8 | 42 | --context-parallel-size 8 |
| 45 | - --context-parallel-algo megatron_cp_algo | 43 | + --context-parallel-algo megatron_cp_algo # CP较小时(CP<=4),使用ulysses_cp_algo是性能不错的选择 |
| 46 | --attention-mask-type general | 44 | --attention-mask-type general |
| 47 | ``` | 45 | ``` |
| 48 | 46 | ||
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | ### TTP临终遗言功能 | 7 | ### TTP临终遗言功能 |
| 8 | 8 | ||
| 9 | -在训练过程中发生故障后,校验优化器中间状态数据的完整性和一致性,生成一次临终Checkpoint数据,恢复训练时能够通过该CheckPoint恢复到故障前一刻的状态,减少故障造成的训练迭代损失。 | 9 | +在训练过程中发生故障后,校验优化器中间状态数据的完整性和一致性,生成一次临终checkpoint数据,恢复训练时能够通过该checkpoint恢复到故障前一刻的状态,减少故障造成的训练迭代损失。 |
| 10 | 10 | ||
| 11 | ### UCE Step级重计算功能 | 11 | ### UCE Step级重计算功能 |
| 12 | 12 | ||
| @@ -21,11 +21,11 @@ | |||
| 21 | 21 | ||
| 22 | megatron原生的分布式优化器数据流及工作原理如下图: | 22 | megatron原生的分布式优化器数据流及工作原理如下图: |
| 23 | 23 | ||
| 24 | - | 24 | + |
| 25 | 25 | ||
| 26 | 副本优化器通过设计优化器参数均匀分布在副本DP组,完成优化器状态的备份,从而为TTP/UCE功能提供机制支持: | 26 | 副本优化器通过设计优化器参数均匀分布在副本DP组,完成优化器状态的备份,从而为TTP/UCE功能提供机制支持: |
| 27 | 27 | ||
| 28 | - | 28 | + |
| 29 | 29 | ||
| 30 | 副本优化器相比分布式优化器会有内存占用增加,相对占用如下: | 30 | 副本优化器相比分布式优化器会有内存占用增加,相对占用如下: |
| 31 | 31 | ||
| @@ -54,7 +54,7 @@ taskd下载地址:[TaskD 下载软件包-昇腾社区](https://www.hiascend.co | |||
| 54 | 54 | ||
| 55 | `--distributed-optimizer-no-replica` # 不使用副本优化器而使用CKPT文件进行重计算和空中加油修复,需要在故障时存在CKPT文件。 | 55 | `--distributed-optimizer-no-replica` # 不使用副本优化器而使用CKPT文件进行重计算和空中加油修复,需要在故障时存在CKPT文件。 |
| 56 | 56 | ||
| 57 | -`--enable-elastic-training` # 使能弹性训练功能,配合支持相关功能的 Mind Cluster组件共同使能后,在发生一般性故障且无空闲芯片资源时,缩掉部分节点后继续训练,待有可用芯片资源时扩容回原有规模继续训练。本功能会将故障卡所在Data Parallel域对应节点剔除,修复时要求未故障节点中至少存在一份完整的优化器数据。 | 57 | +`--enable-elastic-training` # 使能弹性训练功能,配合支持相关功能的 Mind Cluste`r组件共同使能后,在发生一般性故障且无空闲芯片资源时,缩掉部分节点后继续训练,待有可用芯片资源时扩容回原有规模继续训练。本功能会将故障卡所在Data Parallel域对应节点剔除,修复时要求未故障节点中至少存在一份完整的优化器数据。 |
| 58 | 58 | ||
| 59 | ### 启动脚本中添加环境变量 | 59 | ### 启动脚本中添加环境变量 |
| 60 | 60 | ||
| @@ -16,7 +16,7 @@ Mamba为解决transformer模型序列长度2次方复杂度提出,成为长序 | |||
| 16 | 16 | ||
| 17 | ## 使用场景 | 17 | ## 使用场景 |
| 18 | 18 | ||
| 19 | -1. 与TPSP正交,可以在开启TP的基础上进一步开启CP降低显存; | 19 | +1. 与TP和SP正交,可以在开启TP的基础上进一步开启CP降低显存; |
| 20 | 2. TP有n_groups整除限制,CP无限制; | 20 | 2. TP有n_groups整除限制,CP无限制; |
| 21 | 3. CP在显存不足场景,开启CP相比开启重计算降低显存方式性能更优; | 21 | 3. CP在显存不足场景,开启CP相比开启重计算降低显存方式性能更优; |
| 22 | 22 | ||
| @@ -5,7 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | 若在非指定版本中尝试采用该配置,可能触发系统级的异常行为,包括但不限于运行时错误。 | 6 | 若在非指定版本中尝试采用该配置,可能触发系统级的异常行为,包括但不限于运行时错误。 |
| 7 | 7 | ||
| 8 | -MindSpeed-LLM 中 mc2 功能默认关闭,如需开启MC2,需将 `mindspeed_llm/training/arguments.py` 文件下,`validate_args_decorator`函数中的`args.use_ascend_mc2 = False`语句注释掉。 | 8 | +MindSpeed-LLM 中 MC2 功能默认关闭,如需开启MC2,需将 `mindspeed_llm/training/arguments.py` 文件下,`validate_args_decorator`函数中的`args.use_ascend_mc2 = False`语句注释掉。 |
| 9 | **注意:使能MC2可能在部分模型带来精度问题。** | 9 | **注意:使能MC2可能在部分模型带来精度问题。** |
| 10 | 10 | ||
| 11 | ## 问题分析 | 11 | ## 问题分析 |
| @@ -32,7 +32,7 @@ MC2算子接口参见[link](https://www.hiascend.com/document/detail/zh/Pytorch/ | |||
| 32 | 32 | ||
| 33 | ## 使用方法 | 33 | ## 使用方法 |
| 34 | 34 | ||
| 35 | -设置--use-ascend-mc2即可使能MC2算子。 | 35 | +设置`--use-ascend-mc2`即可使能MC2算子。 |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | ## 使用效果 | 38 | ## 使用效果 |
| @@ -4,11 +4,11 @@ | |||
| 4 | 4 | ||
| 5 | ### 问题描述 | 5 | ### 问题描述 |
| 6 | 6 | ||
| 7 | -DeepSeek系列模型创造性的提出多头潜在注意力:Multi-head Latent Attention(简称MLA),替代传统多头注意力(Multi Head Attention)。 | 7 | +DeepSeek系列模型创造性地提出多头潜在注意力:Multi-head Latent Attention(简称MLA),替代传统多头注意力(Multi Head Attention)。 |
| 8 | 具体而言,MLA利用低秩键值联合压缩(low-rank key-value joint compression)来降低推理时的KV Cache开销,并且模型效果不输于传统的MHA。 | 8 | 具体而言,MLA利用低秩键值联合压缩(low-rank key-value joint compression)来降低推理时的KV Cache开销,并且模型效果不输于传统的MHA。 |
| 9 | 9 | ||
| 10 | 从MHA到MLA演化如图所示: | 10 | 从MHA到MLA演化如图所示: |
| 11 | - | 11 | + |
| 12 | 12 | ||
| 13 | ### 特性介绍 | 13 | ### 特性介绍 |
| 14 | 14 | ||
| @@ -18,11 +18,11 @@ DeepSeek系列模型创造性的提出多头潜在注意力:Multi-head Latent | |||
| 18 | 18 | ||
| 19 | 【--mla-fa-without-pad】 | 19 | 【--mla-fa-without-pad】 |
| 20 | 20 | ||
| 21 | - | 21 | + |
| 22 | 22 | ||
| 23 | -如上图所示:因为query、key的维度和value的维度不匹配,会将value维度padding到与query、key相同的维度,然后进入FA进行计算,开启该特性,在进入FA之前不会进行pad处理,消减pad操作,减少额外显存占用,提升训练性能。 | 23 | +如上图所示:未开启该特性时,当query、key的维度和value的维度不匹配时,会将value维度padding到与query、key相同的维度,然后进入FA进行计算。开启该特性后,在进入FA之前不会进行pad处理,消减pad操作,减少额外显存占用,提升训练性能。 |
| 24 | 24 | ||
| 25 | - | 25 | + |
| 26 | 26 | ||
| 27 | **建议CANN版本为8.2.RC1及更高版本使用,如遇到上图FA计算时shape不匹配报错,建议更新CANN包。** | 27 | **建议CANN版本为8.2.RC1及更高版本使用,如遇到上图FA计算时shape不匹配报错,建议更新CANN包。** |
| 28 | 28 | ||
| @@ -30,12 +30,12 @@ DeepSeek系列模型创造性的提出多头潜在注意力:Multi-head Latent | |||
| 30 | 30 | ||
| 31 | 在对压缩后的q_compressed和kv_compressed进行升维,q_compressed经过升维后会转成q_no_pe和q_pos_emb,kv_compressed会转成k_no_pe和value,所以在进行升维操作时可以有两种方式,如下图所示: | 31 | 在对压缩后的q_compressed和kv_compressed进行升维,q_compressed经过升维后会转成q_no_pe和q_pos_emb,kv_compressed会转成k_no_pe和value,所以在进行升维操作时可以有两种方式,如下图所示: |
| 32 | 32 | ||
| 33 | - | 33 | + |
| 34 | 34 | ||
| 35 | - 开启--mla-mm-split后,与q_compressed相乘的矩阵会被初始化为两个(linear_qk_nope,linear_qk_rope),q_compressed与这两个矩阵相乘直接得到q_no_pe和q_pos_emb;与kv_compressed相乘的矩阵会被初始化为两个(linear_kv_nope,linear_v),kv_compressed与这两个矩阵相乘得到k_no_pe和value,会消减两次split操作,从而避免产生非连续tensor,优化转连续开销,但是由于对一个大矩阵乘拆分了两次,会降低矩阵乘的效率,同时TP通信多场景可能带来更多通信开销。 | 35 | - 开启--mla-mm-split后,与q_compressed相乘的矩阵会被初始化为两个(linear_qk_nope,linear_qk_rope),q_compressed与这两个矩阵相乘直接得到q_no_pe和q_pos_emb;与kv_compressed相乘的矩阵会被初始化为两个(linear_kv_nope,linear_v),kv_compressed与这两个矩阵相乘得到k_no_pe和value,会消减两次split操作,从而避免产生非连续tensor,优化转连续开销,但是由于对一个大矩阵乘拆分了两次,会降低矩阵乘的效率,同时TP通信多场景可能带来更多通信开销。 |
| 36 | - 不使用--mla-mm-split,与q_compressed相乘的矩阵会被初始化一个(linear_kv_up_proj),q_compressed与这一个大矩阵相乘得到结果然后split成q_no_pe和q_pos_emb;与kv_compressed相乘的矩阵会被初始化为一个(linear_kv_up_proj),kv_compressed与这个一个大矩阵相乘后split成k_no_pe和value。与开启--mla-mm-split相比,关闭该特性会提高矩阵计算效率,但是可能会有转连续的开销。 | 36 | - 不使用--mla-mm-split,与q_compressed相乘的矩阵会被初始化一个(linear_kv_up_proj),q_compressed与这一个大矩阵相乘得到结果然后split成q_no_pe和q_pos_emb;与kv_compressed相乘的矩阵会被初始化为一个(linear_kv_up_proj),kv_compressed与这个一个大矩阵相乘后split成k_no_pe和value。与开启--mla-mm-split相比,关闭该特性会提高矩阵计算效率,但是可能会有转连续的开销。 |
| 37 | 37 | ||
| 38 | -**推荐在无TP场景或者TP 通讯量较少场景使用。** | 38 | +**推荐在无TP场景或者TP通讯量较少场景使用。** |
| 39 | 39 | ||
| 40 | ## 使用约束 | 40 | ## 使用约束 |
| 41 | 41 | ||
| @@ -6,9 +6,9 @@ MindSpeed-LLM支持基于昇腾芯片采集profiling数据,以提供对模型 | |||
| 6 | --profile-export-type # 指定导出的性能数据结果文件格式, db, text, 默认text格式 | 6 | --profile-export-type # 指定导出的性能数据结果文件格式, db, text, 默认text格式 |
| 7 | --profile-data-simplification # 使用数据精简模式 | 7 | --profile-data-simplification # 使用数据精简模式 |
| 8 | --profile-step-start 5 # 指定开启采集数据的步骤 | 8 | --profile-step-start 5 # 指定开启采集数据的步骤 |
| 9 | ---profile-step-end 6 # 指定结束采集数据的步骤,实际采集步数为 end-start,不包含end | 9 | +--profile-step-end 6 # 指定结束采集数据的步骤,实际采集步数从start到end,包括第start步,不包括第end步 |
| 10 | --profile-ranks 0 1 2 3 4 # 指定采集数据的卡号,默认为0,设置为-1时表示采集所有rank的profiling数据,可以设置为 0 1 2 3 4 5 6 7 8 9 列表指定全局卡号 | 10 | --profile-ranks 0 1 2 3 4 # 指定采集数据的卡号,默认为0,设置为-1时表示采集所有rank的profiling数据,可以设置为 0 1 2 3 4 5 6 7 8 9 列表指定全局卡号 |
| 11 | ---profile-level level2 # 数据采集水平,可选配置为:level0, 1, 2, 级别越高采集信息越多,默认为level0 | 11 | +--profile-level level2 # 数据采集水平,可选配置为:level0, level1, level2, 级别越高采集信息越多,默认为level0 |
| 12 | --profile-with-cpu # 是否采集CPU数据,加入参数采集 | 12 | --profile-with-cpu # 是否采集CPU数据,加入参数采集 |
| 13 | --profile-with-stack # 采集指令运行堆栈,加入参数采集 | 13 | --profile-with-stack # 采集指令运行堆栈,加入参数采集 |
| 14 | --profile-with-memory # 是否采集内存,加入参数采集 | 14 | --profile-with-memory # 是否采集内存,加入参数采集 |
| @@ -5,7 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | ## 全量重计算 | 6 | ## 全量重计算 |
| 7 | 7 | ||
| 8 | -对于内存非常有限的情况,全量重计算只保存 Transformer 层或层组的输入激活值,其他部分全部重新计算。要启用全量激活重计算,请使用 `--recompute-granularity full`。在全量激活重新计算模式下,有两种方法:均匀(uniform)和分块(block),可以通过 `--recompute-method` 参数选择。 | 8 | +对于内存非常有限的情况,全量重计算只保存 Transformer 层或层组的输入激活值,其他部分全部重新计算。要启用全量重计算,请使用 `--recompute-granularity full`。在该模式下,有两种重计算方法:均匀(uniform)和分块(block),可以通过 `--recompute-method` 参数选择。 |
| 9 | 9 | ||
| 10 | **均匀方法**: | 10 | **均匀方法**: |
| 11 | 11 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 问题分析 | 3 | ## 问题分析 |
| 4 | 4 | ||
| 5 | -从生成性AI到科研模型,长序列训练正在变得非常重要。 在生成性AI领域,会话式AI、长文档摘要和视频生成等任务都需要在空间和时间层面对长上下文进行推理。 同样,章节和书籍级别的摘要(数万甚至数十万字)在会话式AI和摘要任务中也非常重要。现有的数据、张量和流水线等并行方法无法在序列维度进行切分。当序列维度(S)增长时,训练内存开销会以 $O$($S^2$) 的速度增长。因此需要针对长序列场景进行特定的优化解决长训练场景的训练需求。 | 5 | +从生成性AI到科研模型,长序列训练正在变得非常重要。 在生成性AI领域,会话式AI、长文档摘要和视频生成等任务都需要在空间和时间层面对长上下文进行推理。 同样,章节和书籍级别的摘要(数万甚至数十万字)在会话式AI和摘要任务中也非常重要。现有的数据、张量和流水线等并行方法无法在序列维度进行切分。当序列维度(S)增长时,训练内存开销会以 $O$($S^2$) 的速度增长。因此需要针对长序列场景进行特定的优化解决长序列场景的训练需求。 |
| 6 | 6 | ||
| 7 | ## 解决方案 | 7 | ## 解决方案 |
| 8 | 8 | ||
| @@ -43,4 +43,4 @@ Ring Attention借鉴了分块Softmax原理,在不需要获取整个序列的 | |||
| 43 | 43 | ||
| 44 | 1. 开启Context Parallel时需要同时开启Flash Attention特性,否则特性不支持。 | 44 | 1. 开启Context Parallel时需要同时开启Flash Attention特性,否则特性不支持。 |
| 45 | 2. 在使用GPT类模型进行训练的场景下,建议attention-mask-type设置为causal。 | 45 | 2. 在使用GPT类模型进行训练的场景下,建议attention-mask-type设置为causal。 |
| 46 | -3. 在8k的序列长度情况下,由于计算的时间缩短,cp功能分割之后的send receive的时间反而会长于计算时间,造成性能的下降,所以建议配置seq-length / context-parallel-size> 8k以获取最佳效果。具体公式参考:S/(Talpha) >= 1/(Wbeta),其中,S=seq-length / context-parallel-size, T表示芯片的理论算力,alpha表示计算效率,W表示理论通信带宽,beta表示带宽利用率。 | 46 | +3. 在8k的序列长度情况下,由于计算的时间缩短,cp功能分割之后的send receive的时间反而会长于计算时间,造成性能的下降,所以建议配置seq-length / context-parallel-size> 8k以获取最佳效果。具体公式参考:S/(T\*alpha) >= 1/(W\*beta),其中,S=seq-length / context-parallel-size, T表示芯片的理论算力,alpha表示计算效率,W表示理论通信带宽,beta表示带宽利用率。 |
| @@ -26,5 +26,5 @@ | |||
| 26 | - 该特性不与--sequence-parallel、--use-fused-rmsnorm特性相兼容,使用该特性需关闭; | 26 | - 该特性不与--sequence-parallel、--use-fused-rmsnorm特性相兼容,使用该特性需关闭; |
| 27 | - 该特性暂不支持MoE类模型及其相关特性; | 27 | - 该特性暂不支持MoE类模型及其相关特性; |
| 28 | - 该特性推荐场景为超大稠密模型、TP域较大场景,例如llama3-405B TP=16,较小模型、较小的TP域设置会引起性能下降,请根据实际情况调整配置; | 28 | - 该特性推荐场景为超大稠密模型、TP域较大场景,例如llama3-405B TP=16,较小模型、较小的TP域设置会引起性能下降,请根据实际情况调整配置; |
| 29 | - - 在llama3-405B TP=16进行模型训练时,建议开启2D张量并行,tp_x=8,tp_y=2。其他场景由于计算效率和通信组的划分差异,需要根据tp_x和tp_y实际调优情况进行配置,部分配置不能保证效率提升; | 29 | + - 在llama3-405B TP=16进行模型训练时,建议开启2D张量并行,tp-x=8,tp-y=2。其他场景由于计算效率和通信组的划分差异,需要根据tp-x和tp-y实际调优情况进行配置,部分配置不能保证效率提升; |
| 30 | - 融合算子依赖CANN 8.0.1.B020及以上版本,安装CANN-NNAL并初始化添加环节;融合算子场景当前仅支持micro-batch-size=1; | 30 | - 融合算子依赖CANN 8.0.1.B020及以上版本,安装CANN-NNAL并初始化添加环节;融合算子场景当前仅支持micro-batch-size=1; |
| @@ -29,7 +29,7 @@ python ./preprocess_data.py \ | |||
| 29 | 29 | ||
| 30 | ## 原理 | 30 | ## 原理 |
| 31 | ### 1.使能前 | 31 | ### 1.使能前 |
| 32 | -初始化atten_mask为压缩下三角矩阵(2048*2048); | 32 | +初始化attn_mask为压缩下三角矩阵(2048*2048); |
| 33 | 33 | ||
| 34 | <img alt="casual_mask.png" src="../../../sources/images/variable_length_flash_attention/casual_mask.png" width="261"/> | 34 | <img alt="casual_mask.png" src="../../../sources/images/variable_length_flash_attention/casual_mask.png" width="261"/> |
| 35 | 35 | ||
| @@ -39,7 +39,7 @@ python ./preprocess_data.py \ | |||
| 39 | 不初始化mask,根据eod位置生成actual_seq_len,假设一个序列中真实的文本长度分别为[2,2,0,2,2],则actual_seq_len为[2,4,4,6,8]; | 39 | 不初始化mask,根据eod位置生成actual_seq_len,假设一个序列中真实的文本长度分别为[2,2,0,2,2],则actual_seq_len为[2,4,4,6,8]; |
| 40 | 实际计算量由actual_seq_len决定; | 40 | 实际计算量由actual_seq_len决定; |
| 41 | 41 | ||
| 42 | -类似的attn_mask可以类似的表示为(实际计算时不生成): | 42 | +attn_mask可以类似的表示为(实际计算时不生成): |
| 43 | 43 | ||
| 44 | <img alt="varlen_mask.png" src="../../../sources/images/variable_length_flash_attention/varlen_mask.png" width="414"/> | 44 | <img alt="varlen_mask.png" src="../../../sources/images/variable_length_flash_attention/varlen_mask.png" width="414"/> |
| 45 | 45 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 问题分析 | 3 | ## 问题分析 |
| 4 | 4 | ||
| 5 | -Pipedream流水线并行切分粒度过大,运行过程中仍然有许多空泡(bubble),计算资源利用率仍有提高空间。 | 5 | +PipeDream流水线并行切分粒度过大,运行过程中仍然有许多空泡(bubble),计算资源利用率仍有提高空间。 |
| 6 | 6 | ||
| 7 | ## 解决方案 | 7 | ## 解决方案 |
| 8 | 8 | ||
| @@ -39,5 +39,5 @@ Pipedream流水线并行切分粒度过大,运行过程中仍然有许多空 | |||
| 39 | 39 | ||
| 40 | ## 注意事项 | 40 | ## 注意事项 |
| 41 | 41 | ||
| 42 | -Megatron虚拟流水并行vpp影响权重切分方式,保存、加载权重时需保证vpp配置一致,才能正常加载; | 42 | +Megatron虚拟流水并行VPP影响权重切分方式,保存、加载权重时需保证VPP配置一致,才能正常加载; |
| 43 | 43 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ## 特性介绍 | 3 | ## 特性介绍 |
| 4 | 4 | ||
| 5 | -基于Transformer的大语言模型已成为众多自然语言处理任务几乎普遍的选择,在这些任务中,诸如上下文学习等长距离处理能力至关重要。在执行自然语言处理任务时,预训练大语言模型的主要限制之一,是由其训练过程所决定的序列最大长度(上下文窗口)。传统的Transformer模型的计算和内存复杂度是O(n^2),其中n为序列长度,随着序列长度增加,计算和内存消耗会急剧上升。通过少量微调(或无需微调)动态扩展上下文窗口的相关技术就变得非常重要。 | 5 | +基于Transformer的大语言模型几乎已成为众多自然语言处理任务普遍的选择,在这些任务中,诸如上下文学习等长距离处理能力至关重要。在执行自然语言处理任务时,预训练大语言模型的主要限制之一,是由其训练过程所决定的序列最大长度(上下文窗口)。传统的Transformer模型的计算和内存复杂度是O(n^2),其中n为序列长度,随着序列长度增加,计算和内存消耗会急剧上升。通过少量微调(或无需微调)动态扩展上下文窗口的相关技术就变得非常重要。 |
| 6 | 6 | ||
| 7 | yarn通过ntk-by-part调整位置编码,提升序列扩增后的精度。 | 7 | yarn通过ntk-by-part调整位置编码,提升序列扩增后的精度。 |
| 8 | 8 | ||
| @@ -11,7 +11,7 @@ yarn通过ntk-by-part调整位置编码,提升序列扩增后的精度。 | |||
| 11 | 11 | ||
| 12 |  | 12 |  |
| 13 | 13 | ||
| 14 | -如图所示,对于一个token的embedding,从低维到高维,旋转位置编码θ逐渐变大(频率逐渐变低),较低频的周期数不到1,较低频的周期数远超过1,对于高频部分直接外推,对于低频部分线性插值,中间区域,在两者之间进行线性插值过渡 | 14 | +如图所示,对于一个token的embedding,从低维到高维,旋转位置编码θ逐渐变大(频率逐渐变低),较低频的周期数不到1,较高频的周期数远超过1,对于高频部分直接外推,对于低频部分线性插值,中间区域,在两者之间进行线性插值过渡 |
| 15 | 15 | ||
| 16 | ## 使用方法 | 16 | ## 使用方法 |
| 17 | 17 | ||
| @@ -3,8 +3,8 @@ | |||
| 3 | 请参考首页[版本说明](../../README.md#版本说明)选择下载对应依赖版本。 | 3 | 请参考首页[版本说明](../../README.md#版本说明)选择下载对应依赖版本。 |
| 4 | 4 | ||
| 5 | >注意:<br> | 5 | >注意:<br> |
| 6 | -> 1.torch2.6不支持python3.8,请优先使用python3.10。<br> | 6 | +> 1.torch2.6及以上版本不支持python3.8,请优先使用python3.10。<br> |
| 7 | -> 2.qwen3,glm45-moe系列模型要求高版本transformers,因此需要使用python3.10及以上版本。<br> | 7 | +> 2.qwen3,glm45-moe系列模型要求高版本transformers,因此需要使用python3.10及以上版本。<br> |
| 8 | 8 | ||
| 9 | 9 | ||
| 10 | ### 驱动固件安装 | 10 | ### 驱动固件安装 |
| @@ -10,8 +10,8 @@ MindSpeed-LLM 支持大模型在公开基准数据集上进行准确率评估, | |||
| 10 | | HumanEval | [GitHub](https://github.com/openai/human-eval/tree/master/data) | test | [12.8%](../../../examples/mcore/llama2/evaluate_llama2_7b_humaneval_ptd.sh) | [12.2%](https://hub.opencompass.org.cn/dataset-detail/HumanEval) | | 10 | | HumanEval | [GitHub](https://github.com/openai/human-eval/tree/master/data) | test | [12.8%](../../../examples/mcore/llama2/evaluate_llama2_7b_humaneval_ptd.sh) | [12.2%](https://hub.opencompass.org.cn/dataset-detail/HumanEval) | |
| 11 | | CMMLU | [Kaggle](https://www.kaggle.com/datasets/ginrawin/ceval-exam) | test | -- | -- | | 11 | | CMMLU | [Kaggle](https://www.kaggle.com/datasets/ginrawin/ceval-exam) | test | -- | -- | |
| 12 | | GSM8k | [GitHub](https://github.com/openai/grade-school-math/tree/master/grade_school_math/data) | -- | -- | -- | | 12 | | GSM8k | [GitHub](https://github.com/openai/grade-school-math/tree/master/grade_school_math/data) | -- | -- | -- | |
| 13 | -| Hellaswag | [GitHub](https://github.com/rowanz/hellaswag) | -- | -- | -- | | 13 | +| HellaSwag | [GitHub](https://github.com/rowanz/hellaswag) | -- | -- | -- | |
| 14 | -| Needlebench | [HuggingFace](https://huggingface.co/datasets/opencompass/NeedleBench/tree/main) | -- | -- | -- | | 14 | +| NeedleBench | [HuggingFace](https://huggingface.co/datasets/opencompass/NeedleBench/tree/main) | -- | -- | -- | |
| 15 | 15 | ||
| 16 | MindSpeed-LLM 已支持的大模型评估数据统计如下: | 16 | MindSpeed-LLM 已支持的大模型评估数据统计如下: |
| 17 | 17 | ||
| @@ -23,7 +23,7 @@ MindSpeed-LLM 已支持的大模型评估数据统计如下: | |||
| 23 | | Baichuan-13B | BoolQ | 74.7% | [73.6%](https://hub.opencompass.org.cn/dataset-detail/BoolQ) | Baichuan2-7B | BoolQ | 70.0% | [63.2%](https://hub.opencompass.org.cn/dataset-detail/BoolQ) | | 23 | | Baichuan-13B | BoolQ | 74.7% | [73.6%](https://hub.opencompass.org.cn/dataset-detail/BoolQ) | Baichuan2-7B | BoolQ | 70.0% | [63.2%](https://hub.opencompass.org.cn/dataset-detail/BoolQ) | |
| 24 | | Baichuan2-13B | BoolQ | 78.0% | [67.0%](https://hub.opencompass.org.cn/dataset-detail/BoolQ) | Bloom-7B | MMLU | 25.1% | -- | | 24 | | Baichuan2-13B | BoolQ | 78.0% | [67.0%](https://hub.opencompass.org.cn/dataset-detail/BoolQ) | Bloom-7B | MMLU | 25.1% | -- | |
| 25 | | Bloom-176B | BoolQ | 64.5% | -- | ChatGLM3-6B | MMLU | 61.5% | -- | | 25 | | Bloom-176B | BoolQ | 64.5% | -- | ChatGLM3-6B | MMLU | 61.5% | -- | |
| 26 | -| GLM4-9B | MMLU | 74.5% | [74.7%](https://huggingface.co/THUDM/glm-4-9b) | CodeQwen1.5-7B | Human. | 54.8% | [51.8%](https://qwenlm.github.io/zh/blog/codeqwen1.5/) | | 26 | +| GLM4-9B | MMLU | 74.5% | [74.7%](https://huggingface.co/THUDM/glm-4-9b) | CodeQwen1.5-7B | HumanEval | 54.8% | [51.8%](https://qwenlm.github.io/zh/blog/codeqwen1.5/) | |
| 27 | | CodeLLaMA-34B | HumanEval | 48.8% | [48.8%](https://paperswithcode.com/sota/code-generation-on-humaneval) | Gemma-2B | MMLU | 39.6% | -- | | 27 | | CodeLLaMA-34B | HumanEval | 48.8% | [48.8%](https://paperswithcode.com/sota/code-generation-on-humaneval) | Gemma-2B | MMLU | 39.6% | -- | |
| 28 | | Gemma-7B | MMLU | 52.2% | -- | InternLM-7B | MMLU | 48.7% | [51.0%](https://huggingface.co/internlm/internlm-7b) | | 28 | | Gemma-7B | MMLU | 52.2% | -- | InternLM-7B | MMLU | 48.7% | [51.0%](https://huggingface.co/internlm/internlm-7b) | |
| 29 | | Gemma2-9B | MMLU | 70.7% | [71.3%](https://huggingface.co/google/gemma-2-9b) | Gemma2-27B | MMLU | 75.5% | [75.2%](https://huggingface.co/google/gemma-2-27b) | | 29 | | Gemma2-9B | MMLU | 70.7% | [71.3%](https://huggingface.co/google/gemma-2-9b) | Gemma2-27B | MMLU | 75.5% | [75.2%](https://huggingface.co/google/gemma-2-27b) | |
| @@ -52,11 +52,12 @@ MindSpeed-LLM 已支持的大模型评估数据统计如下: | |||
| 52 | | InternLM2.5-1.8b | MMLU | 51.3% | [53.5%](https://huggingface.co/internlm/internlm2_5-1_8b) | InternLM2.5-7B | MMLU | 71.6% | [71.6%](https://huggingface.co/internlm/internlm2_5-7b) | | 52 | | InternLM2.5-1.8b | MMLU | 51.3% | [53.5%](https://huggingface.co/internlm/internlm2_5-1_8b) | InternLM2.5-7B | MMLU | 71.6% | [71.6%](https://huggingface.co/internlm/internlm2_5-7b) | |
| 53 | | InternLM2.5-20b | MMLU | 73.3% | [74.2%](https://huggingface.co/internlm/internlm2_5-20b) | InternLM3-8b | MMLU | 76.6% | [76.6%](https://huggingface.co/internlm/internlm3-8b-instruct) | | 53 | | InternLM2.5-20b | MMLU | 73.3% | [74.2%](https://huggingface.co/internlm/internlm2_5-20b) | InternLM3-8b | MMLU | 76.6% | [76.6%](https://huggingface.co/internlm/internlm3-8b-instruct) | |
| 54 | | Yi1.5-6B | MMLU | 63.2% | [63.5%](https://huggingface.co/01-ai/Yi-1.5-6B/tree/main) | Yi1.5-9B | MMLU | 69.2% | [69.5%](https://huggingface.co/01-ai/Yi-1.5-9B/tree/main) | | 54 | | Yi1.5-6B | MMLU | 63.2% | [63.5%](https://huggingface.co/01-ai/Yi-1.5-6B/tree/main) | Yi1.5-9B | MMLU | 69.2% | [69.5%](https://huggingface.co/01-ai/Yi-1.5-9B/tree/main) | |
| 55 | -| Yi1.5-34B | MMLU | 76.9% | [77.1%](https://huggingface.co/01-ai/Yi-1.5-34B/tree/main) | CodeQWen2.5-7B | Human. | 66.5% | [61.6%](https://modelscope.cn/models/Qwen/Qwen2.5-Coder-7B) | | 55 | +| Yi1.5-34B | MMLU | 76.9% | [77.1%](https://huggingface.co/01-ai/Yi-1.5-34B/tree/main) | CodeQWen2.5-7B | HumanEval | 66.5% | [61.6%](https://modelscope.cn/models/Qwen/Qwen2.5-Coder-7B) | |
| 56 | -| Qwen2.5-Math-7B | MMLU-STEM | 67.8% | [67.8%](https://github.com/QwenLM/Qwen2.5-Math/tree/main/) | Qwen2.5-Math-72B |MMLU-STEM| 83.7% | [82.8%](https://github.com/QwenLM/Qwen2.5-Math/tree/main/) | | 56 | +| Qwen2.5-Math-7B | MMLU-STEM | 67.8% | [67.8%](https://github.com/QwenLM/Qwen2.5-Math/tree/main/) | Qwen2.5-Math-72B |MMLU-STEM| 83.7% | [82.8%](https://github.com/QwenLM/Qwen2.5-Math/tree/main/) | |
| 57 | -| MiniCPM3-4B | MMLU | 63.7% | 64.6% | Phi-3.5-mini-instruct | MMLU | 64.39% | 64.34% | | 57 | +| MiniCPM3-4B | MMLU | 63.7% | [64.6%](https://huggingface.co/openbmb/MiniCPM3-4B) | Phi-3.5-mini-instruct | MMLU | 64.39% | [64.34%](https://huggingface.co/microsoft/Phi-3.5-mini-instruct) | |
| 58 | | Phi-3.5-MoE-instruct | MMLU | 78.5% | [78.9%](https://huggingface.co/microsoft/Phi-3.5-MoE-instruct) | DeepSeek-Math-7B |MMLU-STEM| 56.5% | [56.5%](https://github.com/deepseek-ai/DeepSeek-Math) | | 58 | | Phi-3.5-MoE-instruct | MMLU | 78.5% | [78.9%](https://huggingface.co/microsoft/Phi-3.5-MoE-instruct) | DeepSeek-Math-7B |MMLU-STEM| 56.5% | [56.5%](https://github.com/deepseek-ai/DeepSeek-Math) | |
| 59 | -| DeepSeek-V2.5 | MMLU | 79.3% | [80.6%](https://github.com/deepseek-ai/DeepSeek-V3) | DeepSeek-V2-236B | MMLU | 78.1% | [78.5%](https://huggingface.co/deepseek-ai/DeepSeek-V2) | | 59 | +| DeepSeek-V2.5 | MMLU | 79.3% | [80.6%](https://huggingface.co/deepseek-ai/DeepSeek-V2.5) + |
| 60 | + | DeepSeek-V2-236B | MMLU | 78.1% | [78.5%](https://huggingface.co/deepseek-ai/DeepSeek-V2) | | ||
| 60 | | LLaMA3.3-70B-Instruct | MMLU | 82.7% | -- | QwQ-32B | MMLU | 81.19% | -- | | 61 | | LLaMA3.3-70B-Instruct | MMLU | 82.7% | -- | QwQ-32B | MMLU | 81.19% | -- | |
| 61 | 62 | ||
| 62 | ## 评估指导手册 | 63 | ## 评估指导手册 |
| @@ -149,7 +149,7 @@ | |||
| 149 | 149 | ||
| 150 | ### DeepSeek3模型 | 150 | ### DeepSeek3模型 |
| 151 | 151 | ||
| 152 | -注意:当前master分支未适配DeepSeek-V3,如需使用请切换到2.1.0商发分支 | 152 | +注意:当前分支未适配DeepSeek-V3,如需使用请切换到2.1.0商发分支 |
| 153 | 153 | ||
| 154 | 版本要求:CANN版本≥8.1.RC1,PTA版本≥7.0.RC1。 | 154 | 版本要求:CANN版本≥8.1.RC1,PTA版本≥7.0.RC1。 |
| 155 | 155 | ||
| @@ -164,7 +164,7 @@ MTP说明:master分支是参考Megatron-LM实现,与2.0.0分支实现方案 | |||
| 164 | 164 | ||
| 165 | ### 社区BUG列表 | 165 | ### 社区BUG列表 |
| 166 | 166 | ||
| 167 | -1. DeepSeek2:使用examples/mcore/deepseek2/pretratin_deepseek2_100b_8k_C_ptd.sh进行八机预训练任务时,需确保首节点有1.2T的host内存,第二节点有1.1T的host内存,以此类推。可通过以下命令进行查询 | 167 | +1. DeepSeek2:使用examples/mcore/deepseek2/pretrain_deepseek2_100b_8k_C_ptd.sh进行八机预训练任务时,需确保首节点有1.2T的host内存,第二节点有1.1T的host内存,以此类推。可通过以下命令进行查询 |
| 168 | 168 | ||
| 169 | ```shell | 169 | ```shell |
| 170 | # 查询host内存,通过free字段确定当前可用host内存 | 170 | # 查询host内存,通过free字段确定当前可用host内存 |
| @@ -1,6 +1,6 @@ | |||
| 1 | ## MindSpeed-LLM 预置ssm大模型 | 1 | ## MindSpeed-LLM 预置ssm大模型 |
| 2 | 2 | ||
| 3 | -认证`【Pass】`表示经过昇腾官方版本测试的模型。`【Test】`表示模型处于内部测试阶段,未完成充分的性能测试和验收,在实际使用中可能存在未被发现的问题,待后续充分验证后会发布正式版本。相关使用问题可反馈至[MindSpeed-LLM/issues](https://gitcode.com/ascend/MindSpeed-LLM/issues)。 | 3 | +认证`【Pass】`表示经过昇腾官方版本测试的模型。`【test】`表示模型处于内部测试阶段,未完成充分的性能测试和验收,在实际使用中可能存在未被发现的问题,待后续充分验证后会发布正式版本。相关使用问题可反馈至[MindSpeed-LLM/issues](https://gitcode.com/ascend/MindSpeed-LLM/issues)。 |
| 4 | 4 | ||
| 5 | <table> | 5 | <table> |
| 6 | <thead> | 6 | <thead> |
| @@ -2,20 +2,20 @@ | |||
| 2 | 2 | ||
| 3 | ## 权重转换背景 | 3 | ## 权重转换背景 |
| 4 | 4 | ||
| 5 | -随着大规模预训练模型的广泛应用,不同的训练框架和硬件平台之间的适配性问题逐渐显现。专有训练框架如MindSpeed-LLM通常采用定制的并行化策略(例如Tensor Parallelism、Pipeline Parallelism)以应对大规模模型训练中的内存和计算瓶颈。随着训练需求和硬件的变化,模型参数的切分策略也需进行相应的调整。然而,跨框架的权重转换往往面临格式不兼容和切分策略不同等挑战。权重转换旨在促进大规模预训练模型在不同训练框架之间的无缝迁移与评估,解决框架间权重格式不兼容及切分策略差异等问题,从而增强模型迁移的灵活性和可扩展性,支持更广泛的应用场景和业务需求。 | 5 | +随着大规模预训练模型的广泛应用,不同的训练框架和硬件平台之间的适配性问题逐渐显现。专有训练框架如MindSpeed-LLM通常采用定制的并行化策略(例如Tensor Parallelism、Pipeline Parallelism)以应对大规模模型训练中的内存和计算瓶颈。随着训练需求和硬件的变化,模型参数的切分策略也需进行相应的调整。然而,跨框架的权重转换往往面临格式不兼容和切分策略不同等挑战。权重转换旨在促进大规模预训练模型在不同训练框架之间的无缝迁移与评估,解决框架间权重格式不兼容及切分策略差异等问题,从而增强模型迁移的灵活性和可扩展性,支持更广泛的应用场景和业务需求。 |
| 6 | 6 | ||
| 7 | 7 | ||
| 8 | - [权重下载](#1-权重下载) | 8 | - [权重下载](#1-权重下载) |
| 9 | 9 | ||
| 10 | 从Huggingface等网站下载开源模型权重,支持命令行和网页下载。 | 10 | 从Huggingface等网站下载开源模型权重,支持命令行和网页下载。 |
| 11 | - [权重转换](#2-权重转换) | 11 | - [权重转换](#2-权重转换) |
| 12 | - - [Huggingface权重转换到Megatron-LM格式](#21-huggingface权重转换到megatron-lm格式) | 12 | + - [Huggingface权重转换到Megatron-Mcore格式](#21-huggingface权重转换到megatron-mcore格式) |
| 13 | 13 | ||
| 14 | - 将Huggingface模型权重转换为Megatron-LM格式,支持多种并行切分。 | 14 | + 将Huggingface模型权重转换为Megatron-Mcore格式,支持多种并行切分。 |
| 15 | 15 | ||
| 16 | - - [Megatron-LM权重转换到Huggingface格式](#22-megatron-lm权重转换到huggingface格式) | 16 | + - [Megatron-Mcore权重转换到Huggingface格式](#22-megatron-mcore权重转换到huggingface格式) |
| 17 | 17 | ||
| 18 | - 将Megatron-LM模型权重转换为Huggingface格式,适用于不同框架间的模型迁移。 | 18 | + 将Megatron-Mcore模型权重转换为Huggingface格式,适用于不同框架间的模型迁移。 |
| 19 | 19 | ||
| 20 | - [Lora权重转换](#24-lora权重转换) | 20 | - [Lora权重转换](#24-lora权重转换) |
| 21 | 21 | ||
| @@ -33,7 +33,7 @@ | |||
| 33 | 33 | ||
| 34 | 权重转换旨在解决不同深度学习框架和训练策略下模型权重的兼容性问题,支持在多个模型和训练配置之间进行高效的权重互转。核心功能包括: | 34 | 权重转换旨在解决不同深度学习框架和训练策略下模型权重的兼容性问题,支持在多个模型和训练配置之间进行高效的权重互转。核心功能包括: |
| 35 | 35 | ||
| 36 | -**权重互转**:支持100+种模型的权重互转,能够在 Hugging Face、Megatron-LM主流框架之间,实现任意并行切分策略的权重格式互转。在转换过程中,用户需要通过指定参数 --use-mcore-models 来将权重转换为 Megatron-Mcore 格式。 | 36 | +**权重互转**:支持100+种模型的权重互转,能够在 Huggingface、Megatron-LM主流框架之间,实现任意并行切分策略的权重格式互转。在转换过程中,用户需要通过指定参数 --use-mcore-models 来将权重转换为 Megatron-Mcore 格式。 |
| 37 | 37 | ||
| 38 | **训练并行策略权重转换**:支持多种训练并行策略之间的权重转换,包括 张量并行、流水线并行、专家并行、流水并行动态划分 和 虚拟流水并行 等。无论是针对不同并行策略的训练,还是需要在不同策略之间切换的场景,都能实现灵活的权重转换,以适应各种训练和推理需求。 | 38 | **训练并行策略权重转换**:支持多种训练并行策略之间的权重转换,包括 张量并行、流水线并行、专家并行、流水并行动态划分 和 虚拟流水并行 等。无论是针对不同并行策略的训练,还是需要在不同策略之间切换的场景,都能实现灵活的权重转换,以适应各种训练和推理需求。 |
| 39 | 39 | ||
| @@ -67,9 +67,9 @@ cd ../../ | |||
| 67 | 67 | ||
| 68 | ## 2. 权重转换 | 68 | ## 2. 权重转换 |
| 69 | 69 | ||
| 70 | -### 2.1 Huggingface权重转换到Megatron-LM格式 | 70 | +### 2.1 Huggingface权重转换到Megatron-Mcore格式 |
| 71 | 71 | ||
| 72 | -权重转换实现了 HuggingFace 权重到 Megatron-LM 格式的转换,支持多种并行策略(如张量并行、流水并行等),确保转换后可以在 MindSpeed-LLM 框架下继续训练和推理。 | 72 | +权重转换实现了 Huggingface 权重到 Megatron-Mcore 格式的转换,支持多种并行策略(如张量并行、流水并行等),确保转换后可以在 MindSpeed-LLM 框架下继续训练和推理。 |
| 73 | 73 | ||
| 74 | **注意**: | 74 | **注意**: |
| 75 | 75 | ||
| @@ -104,7 +104,7 @@ cd ../../ | |||
| 104 | <td>可选</td> | 104 | <td>可选</td> |
| 105 | </tr> | 105 | </tr> |
| 106 | <tr> | 106 | <tr> |
| 107 | - <td>--target-expert-model-parallel-size</td> | 107 | + <td>--target-expert-parallel-size</td> |
| 108 | <td>专家并行,指定专家并行卡数,默认为1</td> | 108 | <td>专家并行,指定专家并行卡数,默认为1</td> |
| 109 | <td>可选</td> | 109 | <td>可选</td> |
| 110 | </tr> | 110 | </tr> |
| @@ -174,9 +174,9 @@ MindSpeed-LLM Huggingface到Megatron-Mcore权重转换脚本命名风格及启 | |||
| 174 | bash examples/mcore/llama2/ckpt_convert_llama2_hf2mcore.sh | 174 | bash examples/mcore/llama2/ckpt_convert_llama2_hf2mcore.sh |
| 175 | ``` | 175 | ``` |
| 176 | 176 | ||
| 177 | -### 2.2 Megatron-LM权重转换到Huggingface格式 | 177 | +### 2.2 Megatron-Mcore权重转换到Huggingface格式 |
| 178 | 178 | ||
| 179 | -权重转换实现了 Megatron-LM 权重到 HuggingFace 格式的转换,支持多种并行策略(如张量并行、流水并行等)。转换过程中,模型的权重会被适配为 HuggingFace 的标准格式,确保可以在 HuggingFace 环境下继续进行训练和推理。 | 179 | +权重转换实现了 Megatron-Mcore 权重到 Huggingface 格式的转换,支持多种并行策略(如张量并行、流水并行等)。转换过程中,模型的权重会被适配为 Huggingface 的标准格式,确保可以在 Huggingface 环境下继续进行训练和推理。 |
| 180 | 180 | ||
| 181 | **注意**: | 181 | **注意**: |
| 182 | 182 | ||
| @@ -184,9 +184,9 @@ bash examples/mcore/llama2/ckpt_convert_llama2_hf2mcore.sh | |||
| 184 | 184 | ||
| 185 | 2、转换成功后的权重保存目录下仅包含模型权重文件,不会生成config.json模型配置文件和tokenizer.model、vocab.json等词表文件。 | 185 | 2、转换成功后的权重保存目录下仅包含模型权重文件,不会生成config.json模型配置文件和tokenizer.model、vocab.json等词表文件。 |
| 186 | 186 | ||
| 187 | -3、`--save-dir` 必须要填原始HuggingFace模型路径,并且路径下需要包括完整的HuggingFace模型文件,包括权重和配置文件。 | 187 | +3、`--save-dir` 必须要填原始Huggingface模型路径,并且路径下需要包括完整的Huggingface模型文件,包括权重和配置文件。 |
| 188 | 188 | ||
| 189 | -4、如果Megatron-LM 权重配置了空层,在Megatron-LM权重转换到Huggingface格式时,也需要在命令行加上`相同的空层配置`,并加参数 `--load-checkpoint-loosely` | 189 | +4、如果 Megatron-Mcore 权重配置了空层,在 Megatron-Mcore 权重转换到Huggingface格式时,也需要在命令行加上`相同的空层配置`,并加参数 `--load-checkpoint-loosely` |
| 190 | 190 | ||
| 191 | 下面提供一个Llama2-7b模型的mg-hf权重转换脚本仅供参考: | 191 | 下面提供一个Llama2-7b模型的mg-hf权重转换脚本仅供参考: |
| 192 | 192 | ||
| @@ -414,7 +414,7 @@ bash examples/mcore/llama2/ckpt_convert_llama2_lora2hf.sh | |||
| 414 | 414 | ||
| 415 | ### 权重转换特性清单 | 415 | ### 权重转换特性清单 |
| 416 | 416 | ||
| 417 | -MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转,具体功能列表如下: | 417 | +MindSpeed-LLM 支持 Huggingface 和 Megatron-Mcore 之间的权重格式互转,具体功能列表如下: |
| 418 | 418 | ||
| 419 | <table> | 419 | <table> |
| 420 | <thead> | 420 | <thead> |
| @@ -427,8 +427,8 @@ MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转 | |||
| 427 | </thead> | 427 | </thead> |
| 428 | <tbody> | 428 | <tbody> |
| 429 | <tr> | 429 | <tr> |
| 430 | - <td rowspan="7">HuggingFace </td> | 430 | + <td rowspan="7">Huggingface </td> |
| 431 | - <td rowspan="7">Megatron-Core</td> | 431 | + <td rowspan="7">Megatron-Mcore</td> |
| 432 | <td>张量并行</td> | 432 | <td>张量并行</td> |
| 433 | <td>--target-tensor-parallel-size</td> | 433 | <td>--target-tensor-parallel-size</td> |
| 434 | </tr> | 434 | </tr> |
| @@ -446,7 +446,7 @@ MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转 | |||
| 446 | </tr> | 446 | </tr> |
| 447 | <tr> | 447 | <tr> |
| 448 | <td>专家并行</td> | 448 | <td>专家并行</td> |
| 449 | - <td>--target-expert-model-parallel-size</td> | 449 | + <td>--target-expert-parallel-size</td> |
| 450 | </tr> | 450 | </tr> |
| 451 | <tr> | 451 | <tr> |
| 452 | <td>专家张量并行</td> | 452 | <td>专家张量并行</td> |
| @@ -459,7 +459,7 @@ MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转 | |||
| 459 | </tbody> | 459 | </tbody> |
| 460 | <tbody> | 460 | <tbody> |
| 461 | <tr> | 461 | <tr> |
| 462 | - <td rowspan="24">Megatron-Core </td> | 462 | + <td rowspan="24">Megatron-Mcore </td> |
| 463 | <td rowspan="8">Huggingface</td> | 463 | <td rowspan="8">Huggingface</td> |
| 464 | <td>张量并行</td> | 464 | <td>张量并行</td> |
| 465 | <td>--target-tensor-parallel-size</td> | 465 | <td>--target-tensor-parallel-size</td> |
| @@ -470,7 +470,7 @@ MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转 | |||
| 470 | </tr> | 470 | </tr> |
| 471 | <tr> | 471 | <tr> |
| 472 | <td>专家并行</td> | 472 | <td>专家并行</td> |
| 473 | - <td>--target-expert-model-parallel-size</td> | 473 | + <td>--target-expert-parallel-size</td> |
| 474 | </tr> | 474 | </tr> |
| 475 | <tr> | 475 | <tr> |
| 476 | <td>专家张量并行</td> | 476 | <td>专家张量并行</td> |
| @@ -493,7 +493,7 @@ MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转 | |||
| 493 | <td>--lora-alpha</td> | 493 | <td>--lora-alpha</td> |
| 494 | </tr> | 494 | </tr> |
| 495 | <tr> | 495 | <tr> |
| 496 | - <td rowspan="10">Megatron-Core</td> | 496 | + <td rowspan="10">Megatron-Mcore</td> |
| 497 | <td>张量并行</td> | 497 | <td>张量并行</td> |
| 498 | <td>--target-tensor-parallel-size</td> | 498 | <td>--target-tensor-parallel-size</td> |
| 499 | </tr> | 499 | </tr> |
| @@ -503,7 +503,7 @@ MindSpeed-LLM 支持 Huggingface 和 Megatron-Core 之间的权重格式互转 | |||
| 503 | </tr> | 503 | </tr> |
| 504 | <tr> | 504 | <tr> |
| 505 | <td>专家并行</td> | 505 | <td>专家并行</td> |
| 506 | - <td>--target-expert-model-parallel-size</td> | 506 | + <td>--target-expert-parallel-size</td> |
| 507 | </tr> | 507 | </tr> |
| 508 | <tr> | 508 | <tr> |
| 509 | <td>流水并行动态划分</td> | 509 | <td>流水并行动态划分</td> |
| @@ -2,24 +2,24 @@ | |||
| 2 | 2 | ||
| 3 | ## 权重转换背景 | 3 | ## 权重转换背景 |
| 4 | 4 | ||
| 5 | -随着模型规模从亿级向万亿级跃迁,TB级别参数模型在实际部署与迁移过程中对系统资源提出了极高的要求,单一设备无法容纳完整模型参数。MindSpeed LLM的权重转换方案提出了一种支持按需加载并具备内存高效性的权重转换方案,以解决大参数规模模型在转换阶段易崩溃的问题,为超大模型的高效训练与应用提供基础技术支持。 | 5 | +随着模型规模从亿级向万亿级跃迁,TB级别参数模型在实际部署与迁移过程中对系统资源提出了极高的要求,单一设备无法容纳完整模型参数。MindSpeed-LLM使用了一种支持按需加载并具备内存高效性的权重转换方案,以解决大参数规模模型在转换阶段易崩溃的问题,为超大模型的高效训练与应用提供基础技术支持。 |
| 6 | 6 | ||
| 7 | 7 | ||
| 8 | - [权重下载](#1-权重下载) | 8 | - [权重下载](#1-权重下载) |
| 9 | 9 | ||
| 10 | 从Huggingface等网站下载开源模型权重,支持命令行和网页下载。 | 10 | 从Huggingface等网站下载开源模型权重,支持命令行和网页下载。 |
| 11 | - [权重转换](#2-权重转换) | 11 | - [权重转换](#2-权重转换) |
| 12 | - - [Huggingface权重转换到Megatron-LM格式](#21-huggingface权重转换到megatron-lm格式) | 12 | + - [Huggingface权重转换到Megatron-Mcore](#21-huggingface权重转换到megatron-mcore格式) |
| 13 | 13 | ||
| 14 | - 将Huggingface模型权重转换为Megatron-LM格式,支持多种并行切分。 | 14 | + 将Huggingface模型权重转换为Megatron-Mcore格式,支持多种并行切分。 |
| 15 | 15 | ||
| 16 | - - [Megatron-LM权重转换到Huggingface格式](#22-megatron-lm权重转换到huggingface格式) | 16 | + - [Megatron-Mcore权重转换到Huggingface格式](#22-megatron-mcore权重转换到huggingface格式) |
| 17 | 17 | ||
| 18 | - 将Megatron-LM模型权重转换为Huggingface格式,适用于不同框架间的模型迁移。 | 18 | + 将Megatron-Mcore模型权重转换为Huggingface格式,适用于不同框架间的模型迁移。 |
| 19 | 19 | ||
| 20 | - - [【调试功能】Huggingface权重减层转换到Megatron-LM格式](#23-调试功能huggingface权重减层转换到megatron-lm格式) | 20 | + - [【调试功能】Huggingface权重减层转换到Megatron-Mcore格式](#23-调试功能huggingface权重减层转换到megatron-mcore格式) |
| 21 | 21 | ||
| 22 | - 支持将Huggingface模型权重减层转换为Megatron-LM格式,支持多种并行切分。 | 22 | + 支持将Huggingface模型权重减层转换为Megatron-Mcore格式,支持多种并行切分。 |
| 23 | 23 | ||
| 24 | 24 | ||
| 25 | - [大参数权重转换特性清单](#权重转换特性清单) | 25 | - [大参数权重转换特性清单](#权重转换特性清单) |
| @@ -28,7 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | 权重转换旨在解决不同深度学习框架和训练策略下模型权重的兼容性问题,支持在多个模型和训练配置之间进行高效的权重互转。核心功能包括: | 29 | 权重转换旨在解决不同深度学习框架和训练策略下模型权重的兼容性问题,支持在多个模型和训练配置之间进行高效的权重互转。核心功能包括: |
| 30 | 30 | ||
| 31 | -**权重互转**:能够在 Hugging Face、Megatron-LM主流框架之间,实现任意并行切分策略的权重格式互转。 | 31 | +**权重互转**:能够在 HuggingFace、Megatron-LM主流框架之间,实现任意并行切分策略的权重格式互转。 |
| 32 | 32 | ||
| 33 | **训练并行策略权重转换**:支持多种训练并行策略之间的权重转换,包括 张量并行(TP)、流水线并行(PP)、专家并行(EP)、专家张量并行(ETP) 和 虚拟流水并行(VPP) 等。无论是针对不同并行策略的训练,还是需要在不同策略之间切换的场景,都能实现灵活的权重转换,以适应各种训练和推理需求。 | 33 | **训练并行策略权重转换**:支持多种训练并行策略之间的权重转换,包括 张量并行(TP)、流水线并行(PP)、专家并行(EP)、专家张量并行(ETP) 和 虚拟流水并行(VPP) 等。无论是针对不同并行策略的训练,还是需要在不同策略之间切换的场景,都能实现灵活的权重转换,以适应各种训练和推理需求。 |
| 34 | 34 | ||
| @@ -83,9 +83,9 @@ ModelScope 下载指南:https://modelscope.cn/docs/models/download | |||
| 83 | 83 | ||
| 84 | ## 2. 权重转换 | 84 | ## 2. 权重转换 |
| 85 | 85 | ||
| 86 | -### 2.1 Huggingface权重转换到Megatron-LM格式 | 86 | +### 2.1 Huggingface权重转换到Megatron-Mcore格式 |
| 87 | 87 | ||
| 88 | -权重转换实现了 HuggingFace 权重到 Megatron-LM 格式的转换,支持多种并行策略(如张量并行、流水并行等),确保转换后可以在 MindSpeed-LLM 框架下继续训练和推理。 | 88 | +权重转换实现了 HuggingFace 权重到 Megatron-Mcore 格式的转换,支持多种并行策略(如张量并行、流水并行等),确保转换后可以在 MindSpeed-LLM 框架下继续训练和推理。 |
| 89 | 89 | ||
| 90 | **注意**: | 90 | **注意**: |
| 91 | 91 | ||
| @@ -135,7 +135,7 @@ ModelScope 下载指南:https://modelscope.cn/docs/models/download | |||
| 135 | <td>✅</td> | 135 | <td>✅</td> |
| 136 | </tr> | 136 | </tr> |
| 137 | <tr> | 137 | <tr> |
| 138 | - <td>--target-expert-model-parallel-size</td> | 138 | + <td>--target-expert-parallel-size</td> |
| 139 | <td>EP,指定专家并行数量,默认为1</td> | 139 | <td>EP,指定专家并行数量,默认为1</td> |
| 140 | <td>✅</td> | 140 | <td>✅</td> |
| 141 | </tr> | 141 | </tr> |
| @@ -225,17 +225,17 @@ bash examples/mcore/qwen3_moe/ckpt_convert_qwen3_moe_235b_hf2mcore.sh | |||
| 225 | ``` | 225 | ``` |
| 226 | 226 | ||
| 227 | 227 | ||
| 228 | -### 2.2 Megatron-LM权重转换到Huggingface格式 | 228 | +### 2.2 Megatron-Mcore权重转换到Huggingface格式 |
| 229 | 229 | ||
| 230 | -权重转换实现了 Megatron-LM 权重到 HuggingFace 格式的转换,支持多种并行策略(如张量并行、流水并行等)。转换过程中,模型的权重会被适配为 HuggingFace 的标准格式,确保可以在 HuggingFace 环境下继续进行训练和推理。 | 230 | +权重转换实现了 Megatron-Mcore 权重到 HuggingFace 格式的转换,支持多种并行策略(如张量并行、流水并行等)。转换过程中,模型的权重会被适配为 HuggingFace 的标准格式,确保可以在 HuggingFace 环境下继续进行训练和推理。 |
| 231 | 231 | ||
| 232 | **注意**: | 232 | **注意**: |
| 233 | 233 | ||
| 234 | -1、转到Huggingface权重**无需设置--target-tensor-parallel-size 、--target-pipeline-parallel-size、--target-expert-model-parallel-size、--expert-tensor-parallel-size、--num-layers-per-virtual-pipeline-stage** ,因为Huggingface权重不涉及并行切分。 | 234 | +1、转到Huggingface权重**无需设置--target-tensor-parallel-size 、--target-pipeline-parallel-size、--target-expert-parallel-size、--expert-tensor-parallel-size、--num-layers-per-virtual-pipeline-stage** ,因为Huggingface权重不涉及并行切分。 |
| 235 | 235 | ||
| 236 | 2、转换成功后的权重保存目录下仅包含模型权重文件,不会生成config.json模型配置文件和tokenizer.model、vocab.json等词表文件。 | 236 | 2、转换成功后的权重保存目录下仅包含模型权重文件,不会生成config.json模型配置文件和tokenizer.model、vocab.json等词表文件。 |
| 237 | 237 | ||
| 238 | -3、如果Megatron-LM 权重配置了空层,在Megatron-LM权重转换到Huggingface格式时,也需要在命令行加上相同的空层配置。 | 238 | +3、如果Megatron-Mcore权重配置了空层,在Megatron-Mcore权重转换到Huggingface格式时,也需要在命令行加上相同的空层配置。 |
| 239 | 239 | ||
| 240 | 下面提供一个Qwen3-235b模型的mg-hf权重转换脚本仅供参考: | 240 | 下面提供一个Qwen3-235b模型的mg-hf权重转换脚本仅供参考: |
| 241 | 241 | ||
| @@ -264,9 +264,9 @@ bash examples/mcore/qwen3_moe/ckpt_convert_qwen3_moe_235b_mcore2hf.sh | |||
| 264 | ``` | 264 | ``` |
| 265 | 265 | ||
| 266 | 266 | ||
| 267 | -### 2.3 【调试功能】Huggingface权重减层转换到Megatron-LM格式 | 267 | +### 2.3 【调试功能】Huggingface权重减层转换到Megatron-Mcore格式 |
| 268 | 268 | ||
| 269 | -本框架支持Huggingface权重转换到Megatron-LM格式时**减层调试**,并且**无需更改模型的配置文件**,通过以下命令行参数进行减层配置。 | 269 | +本框架支持Huggingface权重转换到Megatron-Mcore格式时**减层调试**,并且**无需更改模型的配置文件**,通过以下命令行参数进行减层配置。 |
| 270 | 270 | ||
| 271 | 【--num-layers】 | 271 | 【--num-layers】 |
| 272 | 272 | ||
| @@ -21,7 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #### 使用影响 | 22 | #### 使用影响 |
| 23 | 23 | ||
| 24 | - - 此模式将会直接将[模版提示](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/AGI_fewshot.json)和需要回答的问题连接起来输入到模型中,进行评估 | 24 | + - 此模式将会直接将[模板提示](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/AGI_fewshot.json)和需要回答的问题连接起来输入到模型中,进行评估 |
| 25 | 25 | ||
| 26 | #### 推荐参数配置 | 26 | #### 推荐参数配置 |
| 27 | 27 | ||
| @@ -29,17 +29,17 @@ | |||
| 29 | 29 | ||
| 30 | 设置为3 | 30 | 设置为3 |
| 31 | 31 | ||
| 32 | -### 2. 模版平替输出模式 | 32 | +### 2. 平替模板输出模式 |
| 33 | 33 | ||
| 34 | #### 使用影响 | 34 | #### 使用影响 |
| 35 | 35 | ||
| 36 | -- 与`直接评估模式`不相同的是,该模式也会使用[agi_utils](../../../../../mindspeed_llm/tasks/evaluation/eval_utils/agi_utils.py)中的`template_mapping`中的固定模版和需要回答的问题连接起来输入到模型中,进行评估 | 36 | +- 与`直接评估模式`不相同的是,该模式也会使用[agi_utils](../../../../../mindspeed_llm/tasks/evaluation/eval_utils/agi_utils.py)中的`template_mapping`中的固定模板和需要回答的问题连接起来输入到模型中,进行评估 |
| 37 | 37 | ||
| 38 | #### 推荐参数配置 | 38 | #### 推荐参数配置 |
| 39 | 39 | ||
| 40 | 【--max-new-tokens】 | 40 | 【--max-new-tokens】 |
| 41 | 41 | ||
| 42 | -设置为5或者以上,确保任务可以输出完全。 | 42 | +设置为5或者以上 |
| 43 | 43 | ||
| 44 | 【--alternative-prompt】 | 44 | 【--alternative-prompt】 |
| 45 | 45 | ||
| @@ -24,7 +24,7 @@ BBH评估集专注于以下几个方面: | |||
| 24 | 24 | ||
| 25 | #### 使用影响 | 25 | #### 使用影响 |
| 26 | 26 | ||
| 27 | - - 此模式将会直接将需要回答的问题直接输入到模型中,进行评估 | 27 | + - 此模式将会把需要回答的问题直接输入到模型中,进行评估 |
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | #### 推荐参数配置 | 30 | #### 推荐参数配置 |
| @@ -39,7 +39,7 @@ BBH评估集专注于以下几个方面: | |||
| 39 | 39 | ||
| 40 | - 此模式将会读取bbh评估的[模板的文件](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/bbh_template.json)作为评估模板,在与需要模型回答的问题连接后,输入到模型中,直接进行评估。 | 40 | - 此模式将会读取bbh评估的[模板的文件](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/bbh_template.json)作为评估模板,在与需要模型回答的问题连接后,输入到模型中,直接进行评估。 |
| 41 | 41 | ||
| 42 | - - 请注意该模式使用的模版,不是思维链(chain of thought)的模版风格 | 42 | + - 请注意该模式使用的模板,不是思维链(chain of thought)的模板风格 |
| 43 | 43 | ||
| 44 | 44 | ||
| 45 | #### 推荐参数配置 | 45 | #### 推荐参数配置 |
| @@ -50,14 +50,14 @@ BBH评估集专注于以下几个方面: | |||
| 50 | 50 | ||
| 51 | 【--prompt-type】 | 51 | 【--prompt-type】 |
| 52 | 52 | ||
| 53 | -设置--prompt-type为您在使用MindSpeed-LLM进行微调时的使用的prompt-type名称。 | 53 | +该参数用于指定模型模板类型,应与您在使用MindSpeed-LLM仓进行微调时配置的`--prompt-type`参数保持一致。 |
| 54 | 54 | ||
| 55 | -### 3. 思维链(COT)评估模式 | 55 | +### 3. 思维链(CoT)评估模式 |
| 56 | 56 | ||
| 57 | #### 使用影响 | 57 | #### 使用影响 |
| 58 | 58 | ||
| 59 | - 该模式会将思维链 (CoT) 提示应用于 BBH 任务。 | 59 | - 该模式会将思维链 (CoT) 提示应用于 BBH 任务。 |
| 60 | -- 此模式将会读取bbh评估的[COT模板的文件](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/bbh_cot_template.json)作为评估模板,在与需要模型回答的问题连接后,输入到模型中,进行评估。 | 60 | +- 此模式将会读取bbh评估的[CoT模板的文件](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/bbh_cot_template.json)作为评估模板,在与需要模型回答的问题连接后,输入到模型中,进行评估。 |
| 61 | 61 | ||
| 62 | #### 推荐参数配置 | 62 | #### 推荐参数配置 |
| 63 | 63 | ||
| @@ -65,9 +65,9 @@ BBH评估集专注于以下几个方面: | |||
| 65 | 65 | ||
| 66 | 设置为512或者以上 | 66 | 设置为512或者以上 |
| 67 | 67 | ||
| 68 | -【--chain-of-tought】 | 68 | +【--chain-of-thought】 |
| 69 | 69 | ||
| 70 | -使能`思维链(COT)评估模式` | 70 | +使能`思维链(CoT)评估模式` |
| 71 | 71 | ||
| 72 | ## 参考文献 | 72 | ## 参考文献 |
| 73 | 73 | ||
| @@ -21,7 +21,7 @@ BoolQ 数据集版本由三个 `.jsonl` 文件组成,其中每行是具有以 | |||
| 21 | ```json | 21 | ```json |
| 22 | { | 22 | { |
| 23 | "question": "is france the same timezone as the uk", | 23 | "question": "is france the same timezone as the uk", |
| 24 | - "passage": "At the Liberation of France in the summer of 1944, Metropolitan France kept GMT+2 as it was the time then used by the Allies (British Double Summer Time). In the winter of 1944--1945, Metropolitan France switched to GMT+1, same as in the United Kingdom, and switched again to GMT+2 in April 1945 like its British ally. In September 1945, Metropolitan France returned to GMT+1 (pre-war summer time), which the British had already done in July 1945. Metropolitan France was officially scheduled to return to GMT+0 on November 18, 1945 (the British returned to GMT+0 in on October 7, 1945), but the French government canceled the decision on November 5, 1945, and GMT+1 has since then remained the official time of Metropolitan France.", | 24 | + "passage": "At the Liberation of France in the summer of 1944, Metropolitan France kept GMT+2 as it was the time then used by the Allies (British Double Summer Time). In the winter of 1944--1945, Metropolitan France switched to GMT+1, same as in the United Kingdom, and switched again to GMT+2 in April 1945 like its British ally. In September 1945, Metropolitan France returned to GMT+1 (pre-war summer time), which the British had already done in July 1945. Metropolitan France was officially scheduled to return to GMT+0 on November 18, 1945 (the British returned to GMT+0 on October 7, 1945), but the French government canceled the decision on November 5, 1945, and GMT+1 has since then remained the official time of Metropolitan France.", |
| 25 | "answer": false, | 25 | "answer": false, |
| 26 | "title": "Time in France" | 26 | "title": "Time in France" |
| 27 | } | 27 | } |
| @@ -41,7 +41,7 @@ MindSpeed-LLM 会对`dev`问题集中的内容进行评估。 | |||
| 41 | 41 | ||
| 42 | #### 使用影响 | 42 | #### 使用影响 |
| 43 | 43 | ||
| 44 | - - MindSpeed-LLM 对Boolq的评估不会使用任何的提示模版,而是直接对目标问题进行评估和输出最终答案。即模型直接接收问题-段落对,无需任何提示模板。 | 44 | + - MindSpeed-LLM 对BoolQ的评估不会使用任何的提示板,而是直接对目标问题进行评估和输出最终答案。即模型直接接收问题-段落对,无需任何提示模板。 |
| 45 | 45 | ||
| 46 | - 输出层计算"Yes"/"No"的token概率,通过概率比较确定最终预测:P(Yes) > P(No) → 标记为 True | 其他情况 → 标记为 False。 | 46 | - 输出层计算"Yes"/"No"的token概率,通过概率比较确定最终预测:P(Yes) > P(No) → 标记为 True | 其他情况 → 标记为 False。 |
| 47 | 47 | ||
| @@ -15,7 +15,7 @@ | |||
| 15 | - **学科分布**:覆盖人文科学、社会科学、STEM(科学/技术/工程/数学)和交叉学科四大门类 | 15 | - **学科分布**:覆盖人文科学、社会科学、STEM(科学/技术/工程/数学)和交叉学科四大门类 |
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | -MindSpeed-LLM 会对`val`题目集中的内容进行评估。 | 18 | +MindSpeed-LLM 会对`CEval`题目集中的内容进行评估。 |
| 19 | 19 | ||
| 20 | ## 使用方法 | 20 | ## 使用方法 |
| 21 | 21 | ||
| @@ -39,7 +39,7 @@ MindSpeed-LLM 会对`val`题目集中的内容进行评估。 | |||
| 39 | 39 | ||
| 40 | #### 使用影响 | 40 | #### 使用影响 |
| 41 | 41 | ||
| 42 | -此模式将会读取您的启动脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以dev_csv结尾的文件,作为模板问题,经处理后输入到模型中。 | 42 | +此模式将会读取您的启动脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,作为模板问题,经处理后输入到模型中。 |
| 43 | 43 | ||
| 44 | 与直接评估模式不同的是,该模式会根据种子数,打乱dev文件中的模板问题的顺序。再与需要模型回答的问题连接后,再进行对话模板处理后,将得到的对话字典输入到模型中进行评估。 | 44 | 与直接评估模式不同的是,该模式会根据种子数,打乱dev文件中的模板问题的顺序。再与需要模型回答的问题连接后,再进行对话模板处理后,将得到的对话字典输入到模型中进行评估。 |
| 45 | 45 | ||
| @@ -53,15 +53,15 @@ MindSpeed-LLM 会对`val`题目集中的内容进行评估。 | |||
| 53 | 53 | ||
| 54 | 【--prompt-type】 | 54 | 【--prompt-type】 |
| 55 | 55 | ||
| 56 | -设置--prompt-type为您在使用MindSpeed-LLM进行微调时的使用的prompt-type名称。 | 56 | +该参数用于指定模型模板类型,应与您在使用MindSpeed-LLM仓进行微调时配置的`--prompt-type`参数保持一致。 |
| 57 | 57 | ||
| 58 | ### 3. 平替模板输出模式 | 58 | ### 3. 平替模板输出模式 |
| 59 | 59 | ||
| 60 | #### 使用影响 | 60 | #### 使用影响 |
| 61 | 61 | ||
| 62 | -与`微调模板评估模式`相同的是,该模式也会使用您评估脚本中的`DATA_PATH`路径中`dev`文件夹中对应问题的以dev_csv的文件,并作为模板问题。 | 62 | +与`微调模板评估模式`相同的是,该模式也会使用您评估脚本中的`DATA_PATH`路径中`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,并作为模板问题。 |
| 63 | 63 | ||
| 64 | -与其他模型不同的是,该模式不会打乱模板问题的顺序。模板问题与需要模型回答的问题连接后,不进行对话字典的处理,并输入到模型中,得到前向输出。 | 64 | +与其他评估模式不同的是,该模式不会打乱模板问题的顺序。模板问题与需要模型回答的问题连接后,不进行对话字典的处理,并输入到模型中,得到前向输出。 |
| 65 | 65 | ||
| 66 | 该模式的优势是可以使用与业界优秀评估方案相同的评估模板进行评估,并获得较好的评估分数。 | 66 | 该模式的优势是可以使用与业界优秀评估方案相同的评估模板进行评估,并获得较好的评估分数。 |
| 67 | 67 | ||
| @@ -40,7 +40,7 @@ CMMLU评估集专注于以下几个方面: | |||
| 40 | 40 | ||
| 41 | #### 使用影响 | 41 | #### 使用影响 |
| 42 | 42 | ||
| 43 | - - 此模式将会读取您的启动脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以dev_csv结尾的文件,作为模板问题,经处理后输入到模型中。 | 43 | + - 此模式将会读取您的启动脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,作为模板问题,经处理后输入到模型中。 |
| 44 | 44 | ||
| 45 | - 与直接评估模式不同的是,该模式会根据种子数,打乱dev文件中的模板问题的顺序。再与需要模型回答的问题连接后,再进行对话模板处理后,将得到的对话字典输入到模型中进行评估。 | 45 | - 与直接评估模式不同的是,该模式会根据种子数,打乱dev文件中的模板问题的顺序。再与需要模型回答的问题连接后,再进行对话模板处理后,将得到的对话字典输入到模型中进行评估。 |
| 46 | 46 | ||
| @@ -54,7 +54,7 @@ CMMLU评估集专注于以下几个方面: | |||
| 54 | 54 | ||
| 55 | 【--prompt-type】 | 55 | 【--prompt-type】 |
| 56 | 56 | ||
| 57 | -设置--prompt-type为您在使用MindSpeed-LLM进行微调时的使用的prompt-type名称。 | 57 | +该参数用于指定模型模板类型,应与您在使用MindSpeed-LLM仓进行微调时配置的`--prompt-type`参数保持一致。 |
| 58 | 58 | ||
| 59 | 【--eval-language】 | 59 | 【--eval-language】 |
| 60 | 60 | ||
| @@ -62,7 +62,7 @@ CMMLU评估集专注于以下几个方面: | |||
| 62 | 62 | ||
| 63 | ### 3. 平替模板输出模式 | 63 | ### 3. 平替模板输出模式 |
| 64 | 64 | ||
| 65 | -与`微调模板评估模式`相同的是,该模式也会使用您评估脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以dev_csv结尾的文件,并作为模板问题。 | 65 | +与`微调模板评估模式`相同的是,该模式也会使用您评估脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,并作为模板问题。 |
| 66 | 66 | ||
| 67 | 与其他模型不同的是,该模式不会打乱模板问题的顺序。模板问题与需要模型回答的问题连接后,不进行对话字典的处理,并输入到模型中,得到前向输出。 | 67 | 与其他模型不同的是,该模式不会打乱模板问题的顺序。模板问题与需要模型回答的问题连接后,不进行对话字典的处理,并输入到模型中,得到前向输出。 |
| 68 | 68 | ||
| @@ -22,13 +22,13 @@ GSM8K评估集专注于以下方面: | |||
| 22 | 22 | ||
| 23 | #### 使用影响 | 23 | #### 使用影响 |
| 24 | 24 | ||
| 25 | - - 此模式将会直接将[模版提示](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/gsm8k_3shot_template.json)和需要回答的问题输入到模型中,进行评估 | 25 | + - 此模式将会直接将[模板提示](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/gsm8k_3shot_template.json)和需要回答的问题输入到模型中,进行评估 |
| 26 | 26 | ||
| 27 | #### 推荐参数配置 | 27 | #### 推荐参数配置 |
| 28 | 28 | ||
| 29 | 【--max-new-tokens】 | 29 | 【--max-new-tokens】 |
| 30 | 30 | ||
| 31 | -设置为512,确保任务可以输出完全。 | 31 | +设置为512。 |
| 32 | 32 | ||
| 33 | ### 2. 思维链(COT)评估模式 | 33 | ### 2. 思维链(COT)评估模式 |
| 34 | 34 | ||
| @@ -41,9 +41,9 @@ GSM8K评估集专注于以下方面: | |||
| 41 | 41 | ||
| 42 | 【--max-new-tokens】 | 42 | 【--max-new-tokens】 |
| 43 | 43 | ||
| 44 | -设置为512或者以上,确保任务可以输出完全。 | 44 | +设置为512或者以上。 |
| 45 | 45 | ||
| 46 | -【--chain-of-tought】 | 46 | +【--chain-of-thought】 |
| 47 | 47 | ||
| 48 | 使能`思维链(COT)评估模式` | 48 | 使能`思维链(COT)评估模式` |
| 49 | 49 | ||
| @@ -1,14 +1,14 @@ | |||
| 1 | -# Hellaswag评估 | 1 | +# HellaSwag评估 |
| 2 | 2 | ||
| 3 | ## 使用场景 | 3 | ## 使用场景 |
| 4 | 4 | ||
| 5 | ### 问题描述 | 5 | ### 问题描述 |
| 6 | 6 | ||
| 7 | -Hellaswag评估集主要用于测试自然语言处理模型在常识推理任务中的表现。通过提供上下文和多个选项,模型需要选择最合理的后续事件或句子结尾。这种任务设计旨在评估模型对复杂情境的理解能力以及常识推理能力。 | 7 | +HellaSwag评估集主要用于测试自然语言处理模型在常识推理任务中的表现。通过提供上下文和多个选项,模型需要选择最合理的后续事件或句子结尾。这种任务设计旨在评估模型对复杂情境的理解能力以及常识推理能力。 |
| 8 | 8 | ||
| 9 | ### 特性介绍 | 9 | ### 特性介绍 |
| 10 | 10 | ||
| 11 | -Hellaswag评估集专注于以下几个方面: | 11 | +HellaSwag评估集专注于以下几个方面: |
| 12 | 1. **常识推理能力**:测试模型是否能够理解日常情境中的常识,并选择最合理的答案。 | 12 | 1. **常识推理能力**:测试模型是否能够理解日常情境中的常识,并选择最合理的答案。 |
| 13 | 2. **对抗性过滤**:通过对抗性过滤方法,确保数据集中的问题具有挑战性,能够揭示模型的弱点。 | 13 | 2. **对抗性过滤**:通过对抗性过滤方法,确保数据集中的问题具有挑战性,能够揭示模型的弱点。 |
| 14 | 3. **多样化场景**:数据集涵盖了多种生活场景,如体育、烹饪、家庭生活等,确保了数据的多样性和复杂性。 | 14 | 3. **多样化场景**:数据集涵盖了多种生活场景,如体育、烹饪、家庭生活等,确保了数据的多样性和复杂性。 |
| @@ -24,10 +24,10 @@ Hellaswag评估集专注于以下几个方面: | |||
| 24 | 24 | ||
| 25 | #### 使用影响 | 25 | #### 使用影响 |
| 26 | 26 | ||
| 27 | - - 此模式将会直接将需要回答的问题直接输入到模型中,进行评估 | 27 | + - 此模式将会把需要回答的问题直接输入到模型中,进行评估 |
| 28 | 28 | ||
| 29 | #### 推荐参数配置 | 29 | #### 推荐参数配置 |
| 30 | 30 | ||
| 31 | 【--max-new-tokens】 | 31 | 【--max-new-tokens】 |
| 32 | 32 | ||
| 33 | -设置为32,确保输出任务可以输出完全 | 33 | +设置为32,可以任务可以完整输出 |
| @@ -22,7 +22,7 @@ MindSpeed-LLM 会对`human_eval`问题集中的内容进行评估。 | |||
| 22 | 22 | ||
| 23 | #### 使用影响 | 23 | #### 使用影响 |
| 24 | 24 | ||
| 25 | - - MindSpeed-LLM 对`human_eval`的评估不会使用任何的提示模版,而是直接对目标问题进行评估和输出最终答案。即模型直接接收问题-段落对,无需任何提示模板。 | 25 | + - MindSpeed-LLM 对`human_eval`的评估不会使用任何的提示模板,而是直接对目标问题进行评估和输出最终答案。即模型直接接收问题-段落对,无需任何提示模板。 |
| 26 | 26 | ||
| 27 | - 该模式会使用束搜索的方法进行模型推理的输出 | 27 | - 该模式会使用束搜索的方法进行模型推理的输出 |
| 28 | 28 | ||
| @@ -13,7 +13,7 @@ MMLU(Massive Multitask Language Understanding)评估包含一系列多样化 | |||
| 13 | 13 | ||
| 14 | 每个领域下又包含多个具体的任务和问题,通过这些多样化的任务,MMLU能够评估模型在不同领域的知识掌握情况和跨领域的泛化能力。 | 14 | 每个领域下又包含多个具体的任务和问题,通过这些多样化的任务,MMLU能够评估模型在不同领域的知识掌握情况和跨领域的泛化能力。 |
| 15 | 15 | ||
| 16 | -其中,[STEM](#STEM),[人文学科](#人文学科)和[社会科学](#社会科学)和所包含的学科问题集会在文末说明。 | 16 | +其中,[STEM](#STEM),[人文学科](#人文学科)和[社会科学](#社会科学)所包含的学科问题集会在文末说明。 |
| 17 | 17 | ||
| 18 | 目前MindSpeed-LLM仓库对MMLU评估有三种评估模式: | 18 | 目前MindSpeed-LLM仓库对MMLU评估有三种评估模式: |
| 19 | 19 | ||
| @@ -23,7 +23,7 @@ MMLU(Massive Multitask Language Understanding)评估包含一系列多样化 | |||
| 23 | 23 | ||
| 24 | #### 使用影响 | 24 | #### 使用影响 |
| 25 | 25 | ||
| 26 | -此模式将会读取对外的mmlu评估的[模板的文件](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/mmlu_5shot_template.json)作为评估模板,在与需要模型回答的问题连接后,输入到模型中,直接进行评估。 | 26 | +此模式将会读取对外公开的[MMLU评估模板的文件](../../../../../mindspeed_llm/tasks/evaluation/eval_impl/fewshot_template/mmlu_5shot_template.json),在与需要模型回答的问题连接后,输入到模型中,直接进行评估。 |
| 27 | 27 | ||
| 28 | 此种模式下,模型的第一个输出将会作为答案。 | 28 | 此种模式下,模型的第一个输出将会作为答案。 |
| 29 | 29 | ||
| @@ -39,7 +39,7 @@ MMLU(Massive Multitask Language Understanding)评估包含一系列多样化 | |||
| 39 | 39 | ||
| 40 | #### 使用影响 | 40 | #### 使用影响 |
| 41 | 41 | ||
| 42 | -此模式将会读取您的启动脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以dev_csv结尾的文件,作为模板问题,经处理后输入到模型中。 | 42 | +此模式将会读取您的启动脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,作为模板问题,经处理后输入到模型中。 |
| 43 | 43 | ||
| 44 | 与直接评估模式不同的是,该模式会根据种子数,打乱dev文件中的模板问题的顺序。再与需要模型回答的问题连接后,再进行对话模板处理后,将得到的对话字典输入到模型中进行评估。 | 44 | 与直接评估模式不同的是,该模式会根据种子数,打乱dev文件中的模板问题的顺序。再与需要模型回答的问题连接后,再进行对话模板处理后,将得到的对话字典输入到模型中进行评估。 |
| 45 | 45 | ||
| @@ -53,13 +53,13 @@ MMLU(Massive Multitask Language Understanding)评估包含一系列多样化 | |||
| 53 | 53 | ||
| 54 | 【--prompt-type】 | 54 | 【--prompt-type】 |
| 55 | 55 | ||
| 56 | -设置--prompt-type为您在使用MindSpeed-LLM进行微调时使用的prompt-type名称。 | 56 | +该参数用于指定模型模板类型,应与您在使用MindSpeed-LLM仓进行微调时配置的`--prompt-type`参数保持一致。 |
| 57 | 57 | ||
| 58 | ### 3. 平替模板输出模式 | 58 | ### 3. 平替模板输出模式 |
| 59 | 59 | ||
| 60 | #### 使用影响 | 60 | #### 使用影响 |
| 61 | 61 | ||
| 62 | -与`微调模板评估模式`相同的是,该模式也会使用您评估脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以dev_csv的文件,并作为模板问题。 | 62 | +与`微调模板评估模式`相同的是,该模式也会使用您评估脚本中的`DATA_PATH`路径中的同级`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,并作为模板问题。 |
| 63 | 63 | ||
| 64 | 与其他模式不同的是,该模式不会打乱模板问题的顺序。模板问题与需要模型回答的问题连接后,不进行对话字典的处理,直接输入到模型,得到前向输出。 | 64 | 与其他模式不同的是,该模式不会打乱模板问题的顺序。模板问题与需要模型回答的问题连接后,不进行对话字典的处理,直接输入到模型,得到前向输出。 |
| 65 | 65 | ||
| @@ -79,7 +79,7 @@ MMLU(Massive Multitask Language Understanding)评估包含一系列多样化 | |||
| 79 | 79 | ||
| 80 | #### 使用影响 | 80 | #### 使用影响 |
| 81 | 81 | ||
| 82 | -`ppl` 是困惑度 (perplexity) 的缩写,是一种评价模型进行语言建模能力的指标。该模式也会使用您评估脚本中的`DATA_PATH`路径中`dev`文件夹中对应问题的以dev_csv的文件,并作为模板问题。此时,我们会将 n 个选项拼接上上下文后,形成 n 个序列,然后计算模型对这 n 个序列的 perplexity,我们认为其中 perplexity 最低的序列所对应的选项即为模型在这道题上面的推理结果,该种评测方法的后处理简单直接、确定性高。 | 82 | +`ppl` 是困惑度 (perplexity) 的缩写,是一种评价模型进行语言建模能力的指标。该模式也会使用您评估脚本中的`DATA_PATH`路径中`dev`文件夹中对应问题的以`_dev.csv`为后缀的文件,并作为模板问题。此时,我们会将 n 个选项拼接上上下文后,形成 n 个序列,然后计算模型对这 n 个序列的 perplexity,我们认为其中 perplexity 最低的序列所对应的选项即为模型在这道题上面的推理结果,该种评测方法的后处理简单直接、确定性高。 |
| 83 | 83 | ||
| 84 | #### 推荐参数配置 | 84 | #### 推荐参数配置 |
| 85 | 85 | ||
| @@ -1,4 +1,4 @@ | |||
| 1 | -## needlebench精度测试 | 1 | +## NeedleBench精度测试 |
| 2 | 2 | ||
| 3 | NeedleBench 是由上海人工智能实验室和清华大学的研究团队开发的一个用于评估大语言模型(LLMs)在处理超长文本(长达百万级上下文窗口)时的检索和推理能力的框架。它专门设计用于压力测试模型在中英双语环境下的长文本处理能力。 | 3 | NeedleBench 是由上海人工智能实验室和清华大学的研究团队开发的一个用于评估大语言模型(LLMs)在处理超长文本(长达百万级上下文窗口)时的检索和推理能力的框架。它专门设计用于压力测试模型在中英双语环境下的长文本处理能力。 |
| 4 | 4 | ||
| @@ -6,16 +6,14 @@ NeedleBench 是由上海人工智能实验室和清华大学的研究团队开 | |||
| 6 | 6 | ||
| 7 | 下载tiktoken所需要的缓存文件:https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken | 7 | 下载tiktoken所需要的缓存文件:https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken |
| 8 | 8 | ||
| 9 | -拷贝到/tmp/data-gym-cache/,重命名为 9b5ad71b2ce5302211f9c61530b329a4922fc6a4 | 9 | +拷贝到/tmp/data-gym-cache/, 重命名为 9b5ad71b2ce5302211f9c61530b329a4922fc6a4 |
| 10 | 10 | ||
| 11 | 目前MindSpeed-LLM仓库仅支持Single-Needle-Retrieval(S-RT)测试,脚本运行参照 examples/mcore/qwen2/evaluate_qwen2_7b_needle_bench_ptd.sh | 11 | 目前MindSpeed-LLM仓库仅支持Single-Needle-Retrieval(S-RT)测试,脚本运行参照 examples/mcore/qwen2/evaluate_qwen2_7b_needle_bench_ptd.sh |
| 12 | 12 | ||
| 13 | ## 参数配置 | 13 | ## 参数配置 |
| 14 | - --max-new-tokens 设置为64 | 14 | - --max-new-tokens 设置为64 |
| 15 | -- --seq-length, --max-position-embeddings, --max-tokens-to-oom 可设置为4096,8192,32768,131072,262144,524288,1048576,用于测试对应长度的needlebench精度 | 15 | +- --seq-length, --max-position-embeddings, --max-tokens-to-oom 可设置为4096, 8192, 32768, 131072, 262144, 524288, 1048576,用于测试对应长度的NeedleBench精度 |
| 16 | - | 16 | +- 开启yarn。yarn的配置参照[yarn](../../../features/yarn.md)的说明文档 |
| 17 | - | ||
| 18 | -开启yarn,以及yarn的配置参照[yarn](../../../features/yarn.md)的说明文档 | ||
| 19 | 17 | ||
| 20 | NeedleBench精度测试如下: | 18 | NeedleBench精度测试如下: |
| 21 | 19 | ||
| @@ -15,7 +15,7 @@ bash examples/mcore/llama2/evaluate_llama2_7b_mmlu_ptd.sh | |||
| 15 | 15 | ||
| 16 | ```shell | 16 | ```shell |
| 17 | # 修改模型参数路径和词表路径 | 17 | # 修改模型参数路径和词表路径 |
| 18 | -TOKENIZER_PATH="./model_from_hf/llama-2-hf/" #词表路径 | 18 | +TOKENIZER_PATH="./model_from_hf/llama-2-7b-hf/" #词表路径 |
| 19 | CHECKPOINT="./model_weights/llama-2-7b-mcore" #权重路径 | 19 | CHECKPOINT="./model_weights/llama-2-7b-mcore" #权重路径 |
| 20 | # 配置任务和数据集路径 | 20 | # 配置任务和数据集路径 |
| 21 | DATA_PATH="./mmlu/data/test/" | 21 | DATA_PATH="./mmlu/data/test/" |
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | - [单轮对话:Alpaca英文数据集](https://huggingface.co/datasets/tatsu-lab/alpaca) | 7 | - [单轮对话:Alpaca英文数据集](https://huggingface.co/datasets/tatsu-lab/alpaca) |
| 8 | - [单轮对话:Alpaca中文数据集](https://huggingface.co/datasets/llm-wizard/alpaca-gpt4-data-zh/tree/main) | 8 | - [单轮对话:Alpaca中文数据集](https://huggingface.co/datasets/llm-wizard/alpaca-gpt4-data-zh/tree/main) |
| 9 | -- [多轮对话:AlpacaHistroy数据集](https://huggingface.co/datasets/kimnt93/oaast-selected) | 9 | +- [多轮对话:AlpacaHistory数据集](https://huggingface.co/datasets/kimnt93/oaast-selected) |
| 10 | - [链式思维 (CoT):Alpaca数据集](https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/tree/main/Auto-CoT) | 10 | - [链式思维 (CoT):Alpaca数据集](https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/tree/main/Auto-CoT) |
| 11 | - [BELLE:指令微调数据集](https://huggingface.co/datasets/BelleGroup/train_0.5M_CN) | 11 | - [BELLE:指令微调数据集](https://huggingface.co/datasets/BelleGroup/train_0.5M_CN) |
| 12 | 12 | ||
| @@ -45,7 +45,7 @@ python ./preprocess_data.py \ | |||
| 45 | 45 | ||
| 46 | 【--input】 | 46 | 【--input】 |
| 47 | 47 | ||
| 48 | -可以直接输入到数据集目录或具体文件,如果是目录,则处理全部文件, 支持 .parquet \ .csv \ .json \ .jsonl \ .txt \ .arrow 格式, 同一个文件夹下的数据格式需要保持一致 | 48 | +可以直接输入到数据集目录或具体文件,如果是目录,则处理全部文件, 支持.parquet/.csv/.json/.jsonl/.txt/.arrow格式, 同一个文件夹下的数据格式需要保持一致 |
| 49 | 49 | ||
| 50 | 【--map-keys】 | 50 | 【--map-keys】 |
| 51 | 51 | ||
| @@ -78,7 +78,7 @@ | |||
| 78 | ``` | 78 | ``` |
| 79 | ## 使用方法 | 79 | ## 使用方法 |
| 80 | 80 | ||
| 81 | -本章节介绍如何基于预训练语言模型,使用单样本格式数据完成指令微调任务,其他数据格式请参考[多样本pack微调](./multi_sample_pack_finetune.md)和[多轮对话微调](./multi-turn_conversation.md)。该使用方法是基于Qwen3-8B模型和单台`Atlas 900 A2 PODc`(1x8集群)进行全参数微调。大模型微调主要包含以下流程: | 81 | +本章节介绍如何基于预训练语言模型,使用单样本格式数据完成指令微调任务,其他数据格式请参考[多样本pack微调](./multi_sample_pack_finetune.md)和[多轮对话微调](./multi-turn_conversation.md)。该使用方法是基于Qwen3-8B模型和单台`Atlas 900 A2 POD`(1x8集群)进行全参数微调。大模型微调主要包含以下流程: |
| 82 | 82 | ||
| 83 |  | 83 |  |
| 84 | 84 | ||
| @@ -143,8 +143,8 @@ source /usr/local/Ascend/ascend-toolkit/set_env.sh # 修改为真实的ascend-to | |||
| 143 | ``` | 143 | ``` |
| 144 | 数据预处理相关参数说明: | 144 | 数据预处理相关参数说明: |
| 145 | 145 | ||
| 146 | -- `handler-name`:指定数据集的处理类,常用的有`AlpacaStylePairwiseHandler`,`SharegptStyleInstructionHandler`,`AlpacaStylePairwiseHandler`等。 | 146 | +- `handler-name`:指定数据集的处理类,常用的有`AlpacaStyleInstructionHandler`,`SharegptStyleInstructionHandler`,`AlpacaStylePairwiseHandler`等。 |
| 147 | -- `tokenizer-type`:指定处理数据的tokenizer,常用是的`PretrainedFromHF`。 | 147 | +- `tokenizer-type`:指定处理数据的tokenizer,常用的是`PretrainedFromHF`。 |
| 148 | - `workers`:处理数据集的并行数。 | 148 | - `workers`:处理数据集的并行数。 |
| 149 | - `log-interval`:处理进度更新的间隔步数。 | 149 | - `log-interval`:处理进度更新的间隔步数。 |
| 150 | - `enable-thinking`:快慢思考模板开关,可设定为`[true,false,none]`,默认值是`none`。开启后,会在数据集的模型回复中添加`<think>`和`</think>`,并参与到loss计算,所有数据被当成慢思考数据;当关闭后,空的CoT标志将被添加到数据集的用户输入中,不参与loss计算,所有数据被当成快思考数据;设置为`none`时适合原始数据集是混合快慢思考数据的场景。**目前只支持Qwen3系列模型**。 | 150 | - `enable-thinking`:快慢思考模板开关,可设定为`[true,false,none]`,默认值是`none`。开启后,会在数据集的模型回复中添加`<think>`和`</think>`,并参与到loss计算,所有数据被当成慢思考数据;当关闭后,空的CoT标志将被添加到数据集的用户输入中,不参与loss计算,所有数据被当成快思考数据;设置为`none`时适合原始数据集是混合快慢思考数据的场景。**目前只支持Qwen3系列模型**。 |
| @@ -160,12 +160,12 @@ bash examples/mcore/qwen3/data_convert_qwen3_instruction.sh | |||
| 160 | 160 | ||
| 161 | ```shell | 161 | ```shell |
| 162 | # 单机配置 | 162 | # 单机配置 |
| 163 | -GPUS_PER_NODE=8 | 163 | +NPUS_PER_NODE=8 |
| 164 | -MASTER_ADDR=locahost | 164 | +MASTER_ADDR=localhost |
| 165 | MASTER_PORT=6000 | 165 | MASTER_PORT=6000 |
| 166 | NNODES=1 | 166 | NNODES=1 |
| 167 | NODE_RANK=0 | 167 | NODE_RANK=0 |
| 168 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 168 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 169 | ``` | 169 | ``` |
| 170 | 170 | ||
| 171 | 环境变量确认无误后,需要修改相关路径参数和模型切分配置: | 171 | 环境变量确认无误后,需要修改相关路径参数和模型切分配置: |
| @@ -196,15 +196,15 @@ bash examples/mcore/qwen3/tune_qwen3_8b_4K_full_ptd.sh | |||
| 196 | ```shell | 196 | ```shell |
| 197 | # 多机配置 | 197 | # 多机配置 |
| 198 | # 根据分布式集群实际情况配置分布式参数 | 198 | # 根据分布式集群实际情况配置分布式参数 |
| 199 | -GPUS_PER_NODE=8 # 每个节点的卡数 | 199 | +NPUS_PER_NODE=8 # 每个节点的卡数 |
| 200 | MASTER_ADDR="your master node IP" # 都需要修改为主节点的IP地址(不能为localhost) | 200 | MASTER_ADDR="your master node IP" # 都需要修改为主节点的IP地址(不能为localhost) |
| 201 | MASTER_PORT=6000 | 201 | MASTER_PORT=6000 |
| 202 | NNODES=2 # 集群里的节点数,以实际情况填写, | 202 | NNODES=2 # 集群里的节点数,以实际情况填写, |
| 203 | NODE_RANK="current node id" # 当前节点的RANK,多个节点不能重复,主节点为0, 其他节点可以是1,2.. | 203 | NODE_RANK="current node id" # 当前节点的RANK,多个节点不能重复,主节点为0, 其他节点可以是1,2.. |
| 204 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 204 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 205 | ``` | 205 | ``` |
| 206 | 206 | ||
| 207 | -最后确保每台机器上的模型路径和数据集路径等无误后,在多个终端上同时启动预训练脚本即可开始训练。 | 207 | +最后确保每台机器上的模型路径和数据集路径等无误后,在多个终端上同时启动微调脚本即可开始训练。 |
| 208 | 208 | ||
| 209 | 第七步,进行模型验证。完成微调后,需要进一步验证模型是否具备了预期的输出能力。我们提供了简单的模型生成脚本,只需要加载微调后的模型权重,便可观察模型在不同生成参数配置下的回复,详细配置请参考[Qwen3-8B推理脚本](../../../../examples/mcore/qwen3/generate_qwen3_8b_ptd.sh)。需要在脚本中修改以下参数: | 209 | 第七步,进行模型验证。完成微调后,需要进一步验证模型是否具备了预期的输出能力。我们提供了简单的模型生成脚本,只需要加载微调后的模型权重,便可观察模型在不同生成参数配置下的回复,详细配置请参考[Qwen3-8B推理脚本](../../../../examples/mcore/qwen3/generate_qwen3_8b_ptd.sh)。需要在脚本中修改以下参数: |
| 210 | 210 | ||
| @@ -19,7 +19,7 @@ $ | |||
| 19 | 19 | ||
| 20 | ## 使用说明 | 20 | ## 使用说明 |
| 21 | 21 | ||
| 22 | -MindSpeed-LLM支持在微调、偏好对齐、奖励模型等任务上,使用LoRA进行低参训练。使用方法为在基准任务上加上lora参数进行使能。这里以微调任务为例,说明如何在基准任务上使用lora。 | 22 | +MindSpeed-LLM支持在微调、偏好对齐、奖励模型等任务上,使用LoRA进行低参数训练。使用方法为在基准任务上加上lora参数进行使能。这里以微调任务为例,说明如何在基准任务上使用lora。 |
| 23 | 23 | ||
| 24 | ### 数据预处理示例 | 24 | ### 数据预处理示例 |
| 25 | 25 | ||
| @@ -136,7 +136,7 @@ python convert_ckpt.py \ | |||
| 136 | --model-type GPT \ | 136 | --model-type GPT \ |
| 137 | --load-model-type mg \ | 137 | --load-model-type mg \ |
| 138 | --save-model-type mg \ | 138 | --save-model-type mg \ |
| 139 | - --load-dir ./model_weights/llama-2-7b-mcor \ | 139 | + --load-dir ./model_weights/llama-2-7b-mcore \ |
| 140 | --lora-load ./ckpt/llama-7b-lora-mcore-tp1pp1 \ | 140 | --lora-load ./ckpt/llama-7b-lora-mcore-tp1pp1 \ |
| 141 | --save-dir ./model_weights/llama2-7b-lora2mcore \ | 141 | --save-dir ./model_weights/llama2-7b-lora2mcore \ |
| 142 | --lora-r 16 \ | 142 | --lora-r 16 \ |
| @@ -201,7 +201,7 @@ source /usr/local/Ascend/nnal/atb/set_env.sh | |||
| 201 | ```shell | 201 | ```shell |
| 202 | CHECKPOINT="./model_weights/llama-2-7b-mcore" | 202 | CHECKPOINT="./model_weights/llama-2-7b-mcore" |
| 203 | CHECKPOINT_LORA="./ckpt/llama-2-7b-lora/" | 203 | CHECKPOINT_LORA="./ckpt/llama-2-7b-lora/" |
| 204 | -TOKENIZER_PATH="./model_from_hf/llama-2-hf/" | 204 | +TOKENIZER_PATH="./model_from_hf/llama-2-7b-hf/" |
| 205 | 205 | ||
| 206 | # 启动任务 | 206 | # 启动任务 |
| 207 | bash examples/mcore/llama2/generate_llama2_7b_lora_ptd.sh | 207 | bash examples/mcore/llama2/generate_llama2_7b_lora_ptd.sh |
| @@ -85,7 +85,7 @@ python convert_ckpt.py \ | |||
| 85 | --model-type GPT \ | 85 | --model-type GPT \ |
| 86 | --load-model-type mg \ | 86 | --load-model-type mg \ |
| 87 | --save-model-type mg \ | 87 | --save-model-type mg \ |
| 88 | - --load-dir ./model_weights/llama-2-7b-mcor \ | 88 | + --load-dir ./model_weights/llama-2-7b-mcore \ |
| 89 | --lora-load ./ckpt/llama-7b-lora-mcore-tp1pp1 \ | 89 | --lora-load ./ckpt/llama-7b-lora-mcore-tp1pp1 \ |
| 90 | --save-dir ./model_weights/llama2-7b-lora2mcore \ | 90 | --save-dir ./model_weights/llama2-7b-lora2mcore \ |
| 91 | --lora-r 16 \ | 91 | --lora-r 16 \ |
| @@ -149,7 +149,7 @@ source /usr/local/Ascend/nnal/atb/set_env.sh | |||
| 149 | ```shell | 149 | ```shell |
| 150 | CHECKPOINT="./model_weights/llama-2-7b-mcore" | 150 | CHECKPOINT="./model_weights/llama-2-7b-mcore" |
| 151 | CHECKPOINT_LORA="./ckpt/llama-2-7b-lora/" | 151 | CHECKPOINT_LORA="./ckpt/llama-2-7b-lora/" |
| 152 | -TOKENIZER_PATH="./model_from_hf/llama-2-hf/" | 152 | +TOKENIZER_PATH="./model_from_hf/llama-2-7b-hf/" |
| 153 | 153 | ||
| 154 | #启动任务 | 154 | #启动任务 |
| 155 | bash examples/mcore/llama2/generate_llama2_7b_lora_ptd.sh | 155 | bash examples/mcore/llama2/generate_llama2_7b_lora_ptd.sh |
| @@ -110,9 +110,9 @@ bash examples/mcore/gemma2/chat_gemma2_9b_ptd.sh | |||
| 110 | 110 | ||
| 111 | 填写相关路径 | 111 | 填写相关路径 |
| 112 | 112 | ||
| 113 | -`TOKENIZER_MODEL`:指定模型的分词器路径(例如`tokenizer.model`)。 | 113 | +`TOKENIZER_PATH`:指定模型的分词器路径(例如`tokenizer.model`)。 |
| 114 | 114 | ||
| 115 | -`CKPT_LOAD_DIR`:指向多轮对话微调后保存的路径。 | 115 | +`CHECKPOINT`:指向多轮对话微调后保存权重的路径。 |
| 116 | 116 | ||
| 117 | ```shell | 117 | ```shell |
| 118 | TOKENIZER_PATH="./model_from_hf/gemma2_hf/" | 118 | TOKENIZER_PATH="./model_from_hf/gemma2_hf/" |
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | ### 问题描述 | 5 | ### 问题描述 |
| 6 | 6 | ||
| 7 | -由于计算资源紧缺,训练过程中加载的每个批次的样本长度不一,大部分的数据都需要在结尾padding到 `seq_length` 的长度,训练效率低,造成计算资源浪费; | 7 | +由于计算资源紧缺,训练过程中加载的每个批次的样本长度不一,大部分的数据都需要在结尾padding到 `seq-length` 的长度,训练效率低,造成计算资源浪费; |
| 8 | 8 | ||
| 9 | ### 特性介绍 | 9 | ### 特性介绍 |
| 10 | 10 | ||
| @@ -57,7 +57,7 @@ | |||
| 57 | 57 | ||
| 58 | * `--input` | 58 | * `--input` |
| 59 | 59 | ||
| 60 | - 可以直接输入到数据集目录或具体文件,如果是目录,则处理全部文件, 支持 .parquet \ .csv \ .json \ .jsonl \ .txt \ .arrow 格式, 同一个文件夹下的数据格式需要保持一致 | 60 | + 设置数据集路径,可以填写数据集目录或具体文件,如果是目录,则处理全部文件, 支持.parquet/.csv/.json/.jsonl/.txt/.arrow 格式, 同一个文件夹下的数据格式需要保持一致 |
| 61 | 61 | ||
| 62 | * `--map-keys` | 62 | * `--map-keys` |
| 63 | 63 | ||
| @@ -26,13 +26,13 @@ $$ | |||
| 26 | 在前向传播时,增加了LoRA的线性层(矩阵部分)变成了计算: | 26 | 在前向传播时,增加了LoRA的线性层(矩阵部分)变成了计算: |
| 27 | 27 | ||
| 28 | $$ | 28 | $$ |
| 29 | -y = xW_0^T + x A^T B^T | 29 | +y = xW_0^T + x B^T A^T |
| 30 | $$ | 30 | $$ |
| 31 | 31 | ||
| 32 | 反向传播的输入是Loss对当前层的输出 $y$ 的梯度 $\frac{\partial \mathcal{L}}{\partial y}$,需要更新旁路矩阵 $A, B$ 的参数,所以需要计算 $A, B$ 的梯度 $\frac{\partial \mathcal{L}}{\partial A}, \frac{\partial \mathcal{L}}{\partial B}$,仅对$A$或$B$求偏导可以将 $xW_0^T$ 看做常数项,这个过程不涉及$W_0$,但为了继续反向传播,当前层还需要返回 $\mathcal{L}$ 对输入的的梯度: | 32 | 反向传播的输入是Loss对当前层的输出 $y$ 的梯度 $\frac{\partial \mathcal{L}}{\partial y}$,需要更新旁路矩阵 $A, B$ 的参数,所以需要计算 $A, B$ 的梯度 $\frac{\partial \mathcal{L}}{\partial A}, \frac{\partial \mathcal{L}}{\partial B}$,仅对$A$或$B$求偏导可以将 $xW_0^T$ 看做常数项,这个过程不涉及$W_0$,但为了继续反向传播,当前层还需要返回 $\mathcal{L}$ 对输入的的梯度: |
| 33 | 33 | ||
| 34 | $$ | 34 | $$ |
| 35 | -\frac{\partial \mathcal{L}}{\partial x}=\frac{\partial \mathcal{L}}{\partial y} \frac{\partial y}{\partial x} = \frac{\partial \mathcal{L}}{\partial y} W_0 + \frac{\partial \mathcal{L}}{\partial y} BA | 35 | +\frac{\partial \mathcal{L}}{\partial x}=\frac{\partial \mathcal{L}}{\partial y} \frac{\partial y}{\partial x} = \frac{\partial \mathcal{L}}{\partial y} W_0 + \frac{\partial \mathcal{L}}{\partial y} AB |
| 36 | $$ | 36 | $$ |
| 37 | 37 | ||
| 38 | 因此,$W_0$的参数不需要更新,但是仍需要在前向和反向时各参与一次矩阵乘运算。 | 38 | 因此,$W_0$的参数不需要更新,但是仍需要在前向和反向时各参与一次矩阵乘运算。 |
| @@ -77,7 +77,7 @@ QLoRA在LoRA的基础上,对主干部分的权重进行量化,大幅降低 | |||
| 77 | 77 | ||
| 78 | ### 1、权重转换 | 78 | ### 1、权重转换 |
| 79 | 79 | ||
| 80 | -将原精度的hf权重转换为的mg权重时,可以通过增加`--qlora-nf4`选项开启QLoRA的NF4量化,会得到量化压缩后的mg权重,目前不支持其它量化方式。 | 80 | +将原精度的hf权重转换为mg权重时,可以通过增加`--qlora-nf4`选项开启QLoRA的NF4量化,会得到量化压缩后的mg权重,目前不支持其它量化方式。 |
| 81 | 81 | ||
| 82 | > (新版本问题修复中,暂不推荐开启该特性)目前QLoRA特性支持开启 `--moe-grouped-gemm` GMM算子以及 `--moe-alltoall-overlap-comm` 特性。 | 82 | > (新版本问题修复中,暂不推荐开启该特性)目前QLoRA特性支持开启 `--moe-grouped-gemm` GMM算子以及 `--moe-alltoall-overlap-comm` 特性。 |
| 83 | 83 | ||
| @@ -38,7 +38,7 @@ HuggingFace: "I hope you are doing well. I am writing to ask for your help with | |||
| 38 | 38 | ||
| 39 | #### 填写相关路径 | 39 | #### 填写相关路径 |
| 40 | 40 | ||
| 41 | -`CKPT_LOAD_DIR`:指向权重转换后保存的路径。 | 41 | +`CHECKPOINT`:指向权重转换后保存的路径。 |
| 42 | 42 | ||
| 43 | `TOKENIZER_PATH`:指定模型的分词器所在文件夹路径。 | 43 | `TOKENIZER_PATH`:指定模型的分词器所在文件夹路径。 |
| 44 | 44 | ||
| @@ -32,7 +32,7 @@ python ./preprocess_data.py \ | |||
| 32 | 32 | ||
| 33 | dpo训练脚本参照:[dpo_llama3_8b_full_ptd.sh](../../../../examples/mcore/llama3/dpo_llama3_8b_full_ptd.sh) | 33 | dpo训练脚本参照:[dpo_llama3_8b_full_ptd.sh](../../../../examples/mcore/llama3/dpo_llama3_8b_full_ptd.sh) |
| 34 | 34 | ||
| 35 | -相较于普通预训练,dpo需要增加一些几个参数: | 35 | +相较于普通预训练,dpo需要增加以下几个参数: |
| 36 | 36 | ||
| 37 | - **`--stage`** | 37 | - **`--stage`** |
| 38 | 38 | ||
| @@ -60,11 +60,11 @@ dpo训练脚本参照:[dpo_llama3_8b_full_ptd.sh](../../../../examples/mcore/l | |||
| 60 | 60 | ||
| 61 | - **`--ref-model`** | 61 | - **`--ref-model`** |
| 62 | 62 | ||
| 63 | - 可选参数,指定参考模型路径, 默认为None,即与训练模型相同 | 63 | + 可选参数,指定参考模型路径,默认为None,即与训练模型相同 |
| 64 | 64 | ||
| 65 | - **`--refer-model-iter`** | 65 | - **`--refer-model-iter`** |
| 66 | 66 | ||
| 67 | - 可选参数,指定参考模型初始权重的迭代步数,默认为1。在DPO的断点续训场景中指定此参数以区分续训时参考模型和训练模型导入的权重,训练模型将导入训练中断前保存的权重,参考模型将导入refer_model_iter指定迭代步数的权重,以保证断点续训时导入的参考模型权重是初始的,而不是训练过的。 | 67 | + 可选参数,指定参考模型初始权重的迭代步数,默认为1。在DPO的断点续训场景中指定此参数以区分续训时参考模型和训练模型导入的权重,训练模型将导入训练中断前保存的权重,参考模型将导入`refer-model-iter`指定迭代步数的权重,以保证断点续训时导入的参考模型权重是初始的,而不是训练过的。 |
| 68 | 68 | ||
| 69 | ### DPO-LORA | 69 | ### DPO-LORA |
| 70 | 70 | ||
| @@ -61,7 +61,7 @@ source /usr/local/Ascend/ascend-toolkit/set_env.sh # 修改为真实的ascend-to | |||
| 61 | ```shell | 61 | ```shell |
| 62 | --json-keys text input output | 62 | --json-keys text input output |
| 63 | ``` | 63 | ``` |
| 64 | -- `n-subs`:数据预处理并行加速参数。当需要预处理的数据集比较大时,可以通过并行处理进行加速,方法为设置参数`--n-subs`,通过该参数设置并行处理数量。在数据预处理过程会将原始数据集切分为`n_sub`个子集,对子集进行并行处理,然后合并,从而实现加速。建议预处理数据集超过GB级别时加上该参数。 | 64 | +- `n-subs`:数据预处理并行加速参数。当需要预处理的数据集比较大时,可以通过并行处理进行加速,方法为设置参数`--n-subs`,通过该参数设置并行处理数量。在数据预处理过程会将原始数据集切分为`n-subs`个子集,对子集进行并行处理,然后合并,从而实现加速。建议预处理数据集超过GB级别时加上该参数。 |
| 65 | 65 | ||
| 66 | 相关参数设置完毕后,运行数据预处理脚本: | 66 | 相关参数设置完毕后,运行数据预处理脚本: |
| 67 | 67 | ||
| @@ -72,12 +72,12 @@ bash examples/mcore/qwen3/data_convert_qwen3_pretrain.sh | |||
| 72 | 第三步,配置模型预训练脚本,详细的参数配置请参考[Qwen3-8B预训练脚本](../../../../examples/mcore/qwen3/pretrain_qwen3_8b_4K_ptd.sh)。脚本中的环境变量配置见[环境变量说明](../../features/environment_variable.md)。单机运行的配置说明如下: | 72 | 第三步,配置模型预训练脚本,详细的参数配置请参考[Qwen3-8B预训练脚本](../../../../examples/mcore/qwen3/pretrain_qwen3_8b_4K_ptd.sh)。脚本中的环境变量配置见[环境变量说明](../../features/environment_variable.md)。单机运行的配置说明如下: |
| 73 | 73 | ||
| 74 | ```shell | 74 | ```shell |
| 75 | -GPUS_PER_NODE=8 # 节点的卡数 | 75 | +NPUS_PER_NODE=8 # 节点的卡数 |
| 76 | -MASTER_ADDR=locahost | 76 | +MASTER_ADDR=localhost |
| 77 | MASTER_PORT=6000 | 77 | MASTER_PORT=6000 |
| 78 | NNODES=1 | 78 | NNODES=1 |
| 79 | NODE_RANK=0 | 79 | NODE_RANK=0 |
| 80 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 80 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 81 | ``` | 81 | ``` |
| 82 | 82 | ||
| 83 | 环境变量确认无误后,需要在脚本中修改相关路径参数和模型切分配置: | 83 | 环境变量确认无误后,需要在脚本中修改相关路径参数和模型切分配置: |
| @@ -85,9 +85,9 @@ WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | |||
| 85 | ```shell | 85 | ```shell |
| 86 | # 注意:提供的路径需要加双引号 | 86 | # 注意:提供的路径需要加双引号 |
| 87 | CKPT_SAVE_DIR="your model save ckpt path" # 训练完成后的权重保存路径 | 87 | CKPT_SAVE_DIR="your model save ckpt path" # 训练完成后的权重保存路径 |
| 88 | -CKPT_LOAD_DIR="your data path" # 权重加载路径,填入权重转换时保存的权重路径 | 88 | +DATA_PATH="your data path" # 数据集路径,填入数据预处理时保存的数据路径 |
| 89 | TOKENIZER_PATH="your tokenizer path" # 词表路径,填入下载的开源权重词表路径 | 89 | TOKENIZER_PATH="your tokenizer path" # 词表路径,填入下载的开源权重词表路径 |
| 90 | -DATA_PATH="your model ckpt path" # 数据集路径,填入数据预处理时保存的数据路径 | 90 | +CKPT_LOAD_DIR="your model ckpt path" # 权重加载路径,填入权重转换时保存的权重路径 |
| 91 | 91 | ||
| 92 | TP=1 # 模型权重转换的tp大小,在本例中是1 | 92 | TP=1 # 模型权重转换的tp大小,在本例中是1 |
| 93 | PP=4 # 模型权重转换的pp大小,在本例中是4 | 93 | PP=4 # 模型权重转换的pp大小,在本例中是4 |
| @@ -120,12 +120,12 @@ bash examples/mcore/qwen3/pretrain_qwen3_8b_4K_ptd.sh | |||
| 120 | 120 | ||
| 121 | ```shell | 121 | ```shell |
| 122 | # 根据分布式集群实际情况配置分布式参数 | 122 | # 根据分布式集群实际情况配置分布式参数 |
| 123 | -GPUS_PER_NODE=8 # 每个节点的卡数 | 123 | +NPUS_PER_NODE=8 # 每个节点的卡数 |
| 124 | MASTER_ADDR="your master node IP" # 都需要修改为主节点的IP地址(不能为localhost) | 124 | MASTER_ADDR="your master node IP" # 都需要修改为主节点的IP地址(不能为localhost) |
| 125 | MASTER_PORT=6000 | 125 | MASTER_PORT=6000 |
| 126 | NNODES=2 # 集群里的节点数,以实际情况填写, | 126 | NNODES=2 # 集群里的节点数,以实际情况填写, |
| 127 | NODE_RANK="current node id" # 当前节点的RANK,多个节点不能重复,主节点为0, 其他节点可以是1,2.. | 127 | NODE_RANK="current node id" # 当前节点的RANK,多个节点不能重复,主节点为0, 其他节点可以是1,2.. |
| 128 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 128 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 129 | ``` | 129 | ``` |
| 130 | 130 | ||
| 131 | 最后确保每台机器上的模型路径和数据集路径等无误后,在多个终端上同时启动预训练脚本即可开始训练。如果使用多机训练,且没有设置数据共享,需要在训练启动脚本中增加`no-shared-storage`参数。设置此参数之后将会根据布式参数判断非主节点是否需要load数据,并检查相应缓存和生成数据。 | 131 | 最后确保每台机器上的模型路径和数据集路径等无误后,在多个终端上同时启动预训练脚本即可开始训练。如果使用多机训练,且没有设置数据共享,需要在训练启动脚本中增加`no-shared-storage`参数。设置此参数之后将会根据布式参数判断非主节点是否需要load数据,并检查相应缓存和生成数据。 |
| @@ -49,7 +49,7 @@ bash examples/mcore/llama2/data_convert_llama2_pretrain.sh | |||
| 49 | 49 | ||
| 50 | 【--input】 | 50 | 【--input】 |
| 51 | 51 | ||
| 52 | -可以直接输入到数据集目录或具体文件,如果是目录,则处理全部文件, 支持 .parquet \ .csv \ .json \ .jsonl \ .txt \ .arrow 格式, 同一个文件夹下的数据格式需要保持一致 | 52 | +可以直接输入到数据集目录或具体文件,如果是目录,则处理全部文件, 支持.parquet/.csv/.json/.jsonl/.txt/.arrow格式, 同一个文件夹下的数据格式需要保持一致 |
| 53 | 53 | ||
| 54 | 【--tokenizer-type】 | 54 | 【--tokenizer-type】 |
| 55 | 55 | ||
| @@ -90,7 +90,7 @@ bash examples/mcore/llama2/data_convert_llama2_pretrain.sh | |||
| 90 | 90 | ||
| 91 | 【--n-subs】 | 91 | 【--n-subs】 |
| 92 | 92 | ||
| 93 | -数据预处理并行加速参数。当需要预处理的数据集比较大时,可以通过并行处理进行加速,方法为设置参数`--n-subs`,通过该参数设置并行处理数量。在数据预处理过程会将原始数据集切分为`n_sub`个子集,对子集进行并行处理,然后合并,从而实现加速。建议预处理数据集超过GB级别时加上该参数。 | 93 | +数据预处理并行加速参数。当需要预处理的数据集比较大时,可以通过并行处理进行加速,方法为设置参数`--n-subs`,通过该参数设置并行处理数量。在数据预处理过程会将原始数据集切分为`n-subs`个子集,对子集进行并行处理,然后合并,从而实现加速。建议预处理数据集超过GB级别时加上该参数。 |
| 94 | 94 | ||
| 95 | ### 处理结果 | 95 | ### 处理结果 |
| 96 | 96 | ||
| @@ -31,7 +31,7 @@ source /usr/local/Ascend/ascend-toolkit/set_env.sh # 修改为真实的ascend-to | |||
| 31 | ...... | 31 | ...... |
| 32 | --input ./dataset/train-00000-of-00042-d964455e17e96d5a.parquet # 原始数据集路径 | 32 | --input ./dataset/train-00000-of-00042-d964455e17e96d5a.parquet # 原始数据集路径 |
| 33 | --tokenizer-name-or-path ./model_from_hf/qwen3_hf # HF的tokenizer路径 | 33 | --tokenizer-name-or-path ./model_from_hf/qwen3_hf # HF的tokenizer路径 |
| 34 | ---output-prefix ./finetune_dataset/alpaca # 保存路径 | 34 | +--output-prefix ./finetune_dataset/enwiki # 保存路径 |
| 35 | --append-eod # 添加此参数开启pack模式数据预处理 | 35 | --append-eod # 添加此参数开启pack模式数据预处理 |
| 36 | ...... | 36 | ...... |
| 37 | ``` | 37 | ``` |
| @@ -51,7 +51,7 @@ source /usr/local/Ascend/ascend-toolkit/set_env.sh # 修改为真实的ascend-to | |||
| 51 | ```shell | 51 | ```shell |
| 52 | --json-keys text input output | 52 | --json-keys text input output |
| 53 | ``` | 53 | ``` |
| 54 | -- `n-subs`:数据预处理并行加速参数。当需要预处理的数据集比较大时,可以通过并行处理进行加速,方法为设置参数`--n-subs`,通过该参数设置并行处理数量。在数据预处理过程会将原始数据集切分为`n_sub`个子集,对子集进行并行处理,然后合并,从而实现加速。建议预处理数据集超过GB级别时加上该参数。 | 54 | +- `n-subs`:数据预处理并行加速参数。当需要预处理的数据集比较大时,可以通过并行处理进行加速,方法为设置参数`--n-subs`,通过该参数设置并行处理数量。在数据预处理过程会将原始数据集切分为`n-subs`个子集,对子集进行并行处理,然后合并,从而实现加速。建议预处理数据集超过GB级别时加上该参数。 |
| 55 | - `append-eod`:该参数的作用是将文档结束标记`EOD`显示地添加到每条数据的末尾,防止模型学习无意义的关联。该参数使能后的效果如下: | 55 | - `append-eod`:该参数的作用是将文档结束标记`EOD`显示地添加到每条数据的末尾,防止模型学习无意义的关联。该参数使能后的效果如下: |
| 56 |  | 56 |  |
| 57 | 57 | ||
| @@ -64,12 +64,12 @@ bash examples/mcore/qwen3/data_convert_qwen3_pretrain.sh | |||
| 64 | 第三步,配置模型预训练脚本,详细的参数配置请参考[Qwen3-8B预训练脚本](../../../../examples/mcore/qwen3/pretrain_qwen3_8b_4K_ptd.sh)。脚本中的环境变量配置见[环境变量说明](../../features/environment_variable.md)。单机运行的配置说明如下: | 64 | 第三步,配置模型预训练脚本,详细的参数配置请参考[Qwen3-8B预训练脚本](../../../../examples/mcore/qwen3/pretrain_qwen3_8b_4K_ptd.sh)。脚本中的环境变量配置见[环境变量说明](../../features/environment_variable.md)。单机运行的配置说明如下: |
| 65 | 65 | ||
| 66 | ```shell | 66 | ```shell |
| 67 | -GPUS_PER_NODE=8 # 节点的卡数 | 67 | +NPUS_PER_NODE=8 # 节点的卡数 |
| 68 | -MASTER_ADDR=locahost | 68 | +MASTER_ADDR=localhost |
| 69 | MASTER_PORT=6000 | 69 | MASTER_PORT=6000 |
| 70 | NNODES=1 | 70 | NNODES=1 |
| 71 | NODE_RANK=0 | 71 | NODE_RANK=0 |
| 72 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 72 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 73 | ``` | 73 | ``` |
| 74 | 74 | ||
| 75 | 环境变量确认无误后,需要在脚本中修改相关路径参数和模型切分配置: | 75 | 环境变量确认无误后,需要在脚本中修改相关路径参数和模型切分配置: |
| @@ -77,9 +77,9 @@ WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | |||
| 77 | ```shell | 77 | ```shell |
| 78 | # 注意:提供的路径需要加双引号 | 78 | # 注意:提供的路径需要加双引号 |
| 79 | CKPT_SAVE_DIR="your model save ckpt path" # 训练完成后的权重保存路径 | 79 | CKPT_SAVE_DIR="your model save ckpt path" # 训练完成后的权重保存路径 |
| 80 | -CKPT_LOAD_DIR="your data path" # 权重加载路径,填入权重转换时保存的权重路径 | 80 | +DATA_PATH="your data path" # 数据集路径,填入数据预处理时保存的数据路径 |
| 81 | TOKENIZER_PATH="your tokenizer path" # 词表路径,填入下载的开源权重词表路径 | 81 | TOKENIZER_PATH="your tokenizer path" # 词表路径,填入下载的开源权重词表路径 |
| 82 | -DATA_PATH="your model ckpt path" # 数据集路径,填入数据预处理时保存的数据路径 | 82 | +CKPT_LOAD_DIR="your model ckpt path" # 权重加载路径,填入权重转换时保存的权重路径 |
| 83 | 83 | ||
| 84 | TP=1 # 模型权重转换的tp大小,在本例中是1 | 84 | TP=1 # 模型权重转换的tp大小,在本例中是1 |
| 85 | PP=4 # 模型权重转换的pp大小,在本例中是4 | 85 | PP=4 # 模型权重转换的pp大小,在本例中是4 |
| @@ -91,7 +91,7 @@ PP=4 # 模型权重转换的pp大小,在本例中是4 | |||
| 91 | 91 | ||
| 92 | 脚本内的其他相关参数说明: | 92 | 脚本内的其他相关参数说明: |
| 93 | 93 | ||
| 94 | -- `DATA_PATH`:数据集路径。请注意实际数据预处理生成文件末尾会增加`_text_document`,该参数填写到数据集的前缀即可。例如实际的数据集相对路径是`./finetune_dataset/alpaca/alpaca_text_document.bin`等,那么只需要填`./finetune_dataset/alpaca/alpaca_text_document`即可。 | 94 | +- `DATA_PATH`:数据集路径。请注意实际数据预处理生成文件末尾会增加`_text_document`,该参数填写到数据集的前缀即可。例如实际的数据集相对路径是`./finetune_dataset/enwiki_text_document.bin`等,那么只需要填`./finetune_dataset/enwiki_text_document`即可。 |
| 95 | - `tokenizer-type`:参数值为PretrainedFromHF时, 词表路径仅需要填到模型文件夹即可,不需要到tokenizer.model文件;参数值不为PretrainedFromHF时,例如Qwen3Tokenizer,需要指定到tokenizer.model文件。示例如下 | 95 | - `tokenizer-type`:参数值为PretrainedFromHF时, 词表路径仅需要填到模型文件夹即可,不需要到tokenizer.model文件;参数值不为PretrainedFromHF时,例如Qwen3Tokenizer,需要指定到tokenizer.model文件。示例如下 |
| 96 | 96 | ||
| 97 | ```shell | 97 | ```shell |
| @@ -114,12 +114,12 @@ bash examples/mcore/qwen3/pretrain_qwen3_8b_4K_ptd.sh | |||
| 114 | 114 | ||
| 115 | ```shell | 115 | ```shell |
| 116 | # 根据分布式集群实际情况配置分布式参数 | 116 | # 根据分布式集群实际情况配置分布式参数 |
| 117 | -GPUS_PER_NODE=8 # 每个节点的卡数 | 117 | +NPUS_PER_NODE=8 # 每个节点的卡数 |
| 118 | MASTER_ADDR="your master node IP" # 都需要修改为主节点的IP地址(不能为localhost) | 118 | MASTER_ADDR="your master node IP" # 都需要修改为主节点的IP地址(不能为localhost) |
| 119 | MASTER_PORT=6000 | 119 | MASTER_PORT=6000 |
| 120 | -NNODES=2 # 集群里的节点数,以实际情况填写, | 120 | +NNODES=2 # 集群里的节点数,以实际情况填写 |
| 121 | NODE_RANK="current node id" # 当前节点的RANK,多个节点不能重复,主节点为0, 其他节点可以是1,2.. | 121 | NODE_RANK="current node id" # 当前节点的RANK,多个节点不能重复,主节点为0, 其他节点可以是1,2.. |
| 122 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 122 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 123 | ``` | 123 | ``` |
| 124 | 124 | ||
| 125 | 最后确保每台机器上的模型路径和数据集路径等无误后,在多个终端上同时启动预训练脚本即可开始训练。如果使用多机训练,且没有设置数据共享,需要在训练启动脚本中增加`no-shared-storage`参数。设置此参数之后将会根据布式参数判断非主节点是否需要load数据,并检查相应缓存和生成数据。 | 125 | 最后确保每台机器上的模型路径和数据集路径等无误后,在多个终端上同时启动预训练脚本即可开始训练。如果使用多机训练,且没有设置数据共享,需要在训练启动脚本中增加`no-shared-storage`参数。设置此参数之后将会根据布式参数判断非主节点是否需要load数据,并检查相应缓存和生成数据。 |
| @@ -137,8 +137,8 @@ sha256sum model-00004-of-00004.safetensors | |||
| 137 | 137 | ||
| 138 | ## 3.1 权重转换 | 138 | ## 3.1 权重转换 |
| 139 | 139 | ||
| 140 | -昇腾MindSpeed-LLM要求模型权重采用Megatron-LM格式,在这里我们将原始HuggingFace权重格式转换为Megatron-Mcore格式。 | 140 | +昇腾MindSpeed-LLM要求模型权重采用Megatron-Mcore格式,在这里我们将原始HuggingFace权重格式转换为Megatron-Mcore格式。 |
| 141 | -详见[hf2mg权重转换](./pytorch/solutions/checkpoint/checkpoint_convert.md#21-huggingface权重转换到megatron-lm格式) | 141 | +详见[hf2mg权重转换](./pytorch/solutions/checkpoint/checkpoint_convert.md#21-huggingface权重转换到megatron-mcore格式) |
| 142 | 142 | ||
| 143 | 使用官方提供的转换脚本,获取对应切分的mg权重。 | 143 | 使用官方提供的转换脚本,获取对应切分的mg权重。 |
| 144 | 144 | ||
| @@ -160,7 +160,7 @@ python convert_ckpt.py \ | |||
| 160 | --load-model-type hf \ | 160 | --load-model-type hf \ |
| 161 | --save-model-type mg \ | 161 | --save-model-type mg \ |
| 162 | --target-tensor-parallel-size 1 \ # 通过这里将切分调整为tp1pp4 | 162 | --target-tensor-parallel-size 1 \ # 通过这里将切分调整为tp1pp4 |
| 163 | - --target-pipeline-parallel-size 4 \ # | 163 | + --target-pipeline-parallel-size 4 \ |
| 164 | --add-qkv-bias \ | 164 | --add-qkv-bias \ |
| 165 | --load-dir ./model_from_hf/qwen2.5-7b-hf/ \ | 165 | --load-dir ./model_from_hf/qwen2.5-7b-hf/ \ |
| 166 | --save-dir ./model_weights/qwen2.5_mcore/ \ | 166 | --save-dir ./model_weights/qwen2.5_mcore/ \ |
| @@ -330,8 +330,8 @@ TOKENIZER_PATH="./model_from_hf/qwen2.5-7b-hf/" | |||
| 330 | 330 | ||
| 331 | ## 4.1 权重转换 | 331 | ## 4.1 权重转换 |
| 332 | 332 | ||
| 333 | -昇腾MindSpeed-LLM要求模型权重采用Megatron-LM格式,在这里我们将原始HuggingFace权重格式转换为Megatron-Mcore格式。 | 333 | +昇腾MindSpeed-LLM要求模型权重采用Megatron-Mcore格式,在这里我们将原始HuggingFace权重格式转换为Megatron-Mcore格式。 |
| 334 | -详见[hf2mg权重转换](./pytorch/solutions/checkpoint/checkpoint_convert.md#21-huggingface权重转换到megatron-lm格式) | 334 | +详见[hf2mg权重转换](./pytorch/solutions/checkpoint/checkpoint_convert.md#21-huggingface权重转换到megatron-mcore格式) |
| 335 | 335 | ||
| 336 | 使用官方提供的转换脚本,获取对应切分的mg权重。 | 336 | 使用官方提供的转换脚本,获取对应切分的mg权重。 |
| 337 | 337 | ||
| @@ -395,7 +395,7 @@ torch.configs.set_pyboost(False) | |||
| 395 | 395 | ||
| 396 | ## 4.2 预训练数据集处理 | 396 | ## 4.2 预训练数据集处理 |
| 397 | 397 | ||
| 398 | -通过对各种格式的数据做提前预处理,避免原始数据的反复处理加载,将所有的数据都统一存储到为.bin和.idx两个文件中,详见[预训练数据处理](./pytorch/solutions/pretrain/pretrain_dataset.md)。 | 398 | +通过对各种格式的数据做提前预处理,避免原始数据的反复处理加载,将所有的数据都统一存储到后缀为.bin和.idx两个文件中,详见[预训练数据处理](./pytorch/solutions/pretrain/pretrain_dataset.md)。 |
| 399 | 399 | ||
| 400 | 常用的预训练数据集包括Alpaca、enwiki、C4等,链接中提供了数据集下载地址。 | 400 | 常用的预训练数据集包括Alpaca、enwiki、C4等,链接中提供了数据集下载地址。 |
| 401 | 401 | ||
| @@ -125,7 +125,7 @@ python examples/mcore/deepseek3/convert_ckpt_deepseek3_mcore2hf.py \ | |||
| 125 | --first-k-dense-replace 3 \ | 125 | --first-k-dense-replace 3 \ |
| 126 | --num-layer-list 16,15,15,15 \ | 126 | --num-layer-list 16,15,15,15 \ |
| 127 | --lora-r 8 \ | 127 | --lora-r 8 \ |
| 128 | - --lora-alpha 16 \ | 128 | + --lora-alpha 16 |
| 129 | ``` | 129 | ``` |
| 130 | 130 | ||
| 131 | 【--load-dir】填写lora权重路径,该权重包括base权重和lora权重 | 131 | 【--load-dir】填写lora权重路径,该权重包括base权重和lora权重 |
| @@ -153,7 +153,7 @@ python examples/mcore/deepseek3/convert_ckpt_deepseek3_mcore2hf.py \ | |||
| 153 | --first-k-dense-replace 3 \ | 153 | --first-k-dense-replace 3 \ |
| 154 | --num-layer-list 16,15,15,15 \ | 154 | --num-layer-list 16,15,15,15 \ |
| 155 | --lora-r 8 \ | 155 | --lora-r 8 \ |
| 156 | - --lora-alpha 16 \ | 156 | + --lora-alpha 16 |
| 157 | # --num-layer-list, --noop-layers, --num-layers-per-virtual-pipeline-stage等参数根据任务需要进行配置 | 157 | # --num-layer-list, --noop-layers, --num-layers-per-virtual-pipeline-stage等参数根据任务需要进行配置 |
| 158 | ``` | 158 | ``` |
| 159 | 159 | ||
| @@ -180,7 +180,7 @@ python examples/mcore/deepseek3/convert_ckpt_deepseek3_mcore2hf.py \ | |||
| 180 | --save-lora-to-hf \ | 180 | --save-lora-to-hf \ |
| 181 | --lora-r 8 \ | 181 | --lora-r 8 \ |
| 182 | --lora-alpha 16 \ | 182 | --lora-alpha 16 \ |
| 183 | - --lora-target-modules linear_qkv linear_proj linear_fc1 linear_fc2 \ | 183 | + --lora-target-modules linear_qkv linear_proj linear_fc1 linear_fc2 |
| 184 | ``` | 184 | ``` |
| 185 | 185 | ||
| 186 | 【--load-dir】指定lora权重路径,注意该权重仅为lora权重,在lora微调中加入'--lora-ckpt-filter',只保存lora权重 | 186 | 【--load-dir】指定lora权重路径,注意该权重仅为lora权重,在lora微调中加入'--lora-ckpt-filter',只保存lora权重 |
| @@ -195,7 +195,7 @@ python examples/mcore/deepseek3/convert_ckpt_deepseek3_mcore2hf.py \ | |||
| 195 | 195 | ||
| 196 | 如果 qlora 权重包含了 base 权重,并且需要将其合并到一起转为huggingface格式: | 196 | 如果 qlora 权重包含了 base 权重,并且需要将其合并到一起转为huggingface格式: |
| 197 | 197 | ||
| 198 | -在微调脚本中加入--qlora-save-dequantize,保存时将权重反量化。 | 198 | +在微调脚本中加入'--qlora-save-dequantize',保存时将权重反量化。 |
| 199 | 199 | ||
| 200 | 【适用场景】在lora微调时没有加参数'--lora-ckpt-filter',则保存的权重包括base权重和qlora权重 | 200 | 【适用场景】在lora微调时没有加参数'--lora-ckpt-filter',则保存的权重包括base权重和qlora权重 |
| 201 | 201 | ||
| @@ -218,18 +218,18 @@ python examples/mcore/deepseek3/convert_ckpt_deepseek3_mcore2hf.py \ | |||
| 218 | --first-k-dense-replace 3 \ | 218 | --first-k-dense-replace 3 \ |
| 219 | --num-layer-list 16,15,15,15 \ | 219 | --num-layer-list 16,15,15,15 \ |
| 220 | --lora-r 8 \ | 220 | --lora-r 8 \ |
| 221 | - --lora-alpha 16 \ | 221 | + --lora-alpha 16 |
| 222 | # --num-layer-list, --noop-layers, --num-layers-per-virtual-pipeline-stage等参数根据任务需要进行配置 | 222 | # --num-layer-list, --noop-layers, --num-layers-per-virtual-pipeline-stage等参数根据任务需要进行配置 |
| 223 | ``` | 223 | ``` |
| 224 | 224 | ||
| 225 | 【--load-dir】指定base权重路径,由于qlora微调加载的权重是量化过的,所以不能直接作为base权重,需要重新转出一份不加参数'--qlora-nf4'的mcore权重作为合并时的base权重 | 225 | 【--load-dir】指定base权重路径,由于qlora微调加载的权重是量化过的,所以不能直接作为base权重,需要重新转出一份不加参数'--qlora-nf4'的mcore权重作为合并时的base权重 |
| 226 | 226 | ||
| 227 | -【--lora-load】指定qlora权重路径,注意该权重仅为qlora权重,在微调脚本中加入'-qlora-save-dequantize',保存时将权重反量化,并加入'--lora-ckpt-filter',只保存qlora权重 | 227 | +【--lora-load】指定qlora权重路径,注意该权重仅为qlora权重,在微调脚本中加入'--qlora-save-dequantize',保存时将权重反量化,并加入'--lora-ckpt-filter',只保存qlora权重 |
| 228 | 228 | ||
| 229 | 【--lora-r】、【--lora-alpha】与lora微调时配置相同 | 229 | 【--lora-r】、【--lora-alpha】与lora微调时配置相同 |
| 230 | 230 | ||
| 231 | ### 3.3 只将qlora权重转为huggingface格式 | 231 | ### 3.3 只将qlora权重转为huggingface格式 |
| 232 | 232 | ||
| 233 | -如果需要将单独的qlora权重转为huggingface格式,在微调脚本中加入'-qlora-save-dequantize',保存时将权重反量化,并加入'--lora-ckpt-filter',只保存qlora权重。 | 233 | +如果需要将单独的qlora权重转为huggingface格式,在微调脚本中加入'--qlora-save-dequantize',保存时将权重反量化,并加入'--lora-ckpt-filter',只保存qlora权重。 |
| 234 | 234 | ||
| 235 | 转换脚本同`2.3 只将lora权重转为huggingface格式` | 235 | 转换脚本同`2.3 只将lora权重转为huggingface格式` |
| @@ -3,15 +3,15 @@ | |||
| 3 | export CUDA_DEVICE_MAX_CONNECTIONS=1 | 3 | export CUDA_DEVICE_MAX_CONNECTIONS=1 |
| 4 | export HCCL_DETERMINISTIC=True | 4 | export HCCL_DETERMINISTIC=True |
| 5 | 5 | ||
| 6 | -GPUS_PER_NODE=2 | 6 | +NPUS_PER_NODE=2 |
| 7 | MASTER_ADDR=localhost | 7 | MASTER_ADDR=localhost |
| 8 | MASTER_PORT=6005 | 8 | MASTER_PORT=6005 |
| 9 | NNODES=1 | 9 | NNODES=1 |
| 10 | NODE_RANK=0 | 10 | NODE_RANK=0 |
| 11 | -WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) | 11 | +WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES)) |
| 12 | 12 | ||
| 13 | DISTRIBUTED_ARGS=" | 13 | DISTRIBUTED_ARGS=" |
| 14 | - --nproc_per_node $GPUS_PER_NODE \ | 14 | + --nproc_per_node $NPUS_PER_NODE \ |
| 15 | --nnodes $NNODES \ | 15 | --nnodes $NNODES \ |
| 16 | --node_rank $NODE_RANK \ | 16 | --node_rank $NODE_RANK \ |
| 17 | --master_addr $MASTER_ADDR \ | 17 | --master_addr $MASTER_ADDR \ |
| @@ -44,14 +44,14 @@ | |||
| 44 | <td>Y</td> | 44 | <td>Y</td> |
| 45 | </tr> | 45 | </tr> |
| 46 | <tr> | 46 | <tr> |
| 47 | - <td>cp_ring,general_cp,double_ring, 分布式优化器,reuse_fp32_param,recompute_activation_function,fused_rmsnorm,fused_swiglu,fused_rope,overlap_grad_reduce, overlap_param_gather</td> | 47 | + <td>cp_ring,general_cp,double_ring,分布式优化器,reuse_fp32_param,recompute_activation_function,fused_rmsnorm,fused_swiglu,fused_rope,overlap_grad_reduce, overlap_param_gather</td> |
| 48 | <td><a href="st/shell_scripts/llama2_tp2_cp4_general_double_ring.sh">llama2_tp2_cp4_general_double_ring.sh</a></td> | 48 | <td><a href="st/shell_scripts/llama2_tp2_cp4_general_double_ring.sh">llama2_tp2_cp4_general_double_ring.sh</a></td> |
| 49 | <td>Y</td> | 49 | <td>Y</td> |
| 50 | <td>Y</td> | 50 | <td>Y</td> |
| 51 | <td>Y</td> | 51 | <td>Y</td> |
| 52 | </tr> | 52 | </tr> |
| 53 | <tr> | 53 | <tr> |
| 54 | - <td>n_group,seq_aux, gradient_accumulation_fusion, recompute_mtp_layer, recompute_mtp_norm</td> | 54 | + <td>n_group,seq_aux,gradient_accumulation_fusion,recompute_mtp_layer,recompute_mtp_norm</td> |
| 55 | <td><a href="st/shell_scripts/deepseek_v3_mcore_tp1_pp2_ep4.sh">deepseek_v3_mcore_tp1_pp2_ep4.sh</a></td> | 55 | <td><a href="st/shell_scripts/deepseek_v3_mcore_tp1_pp2_ep4.sh">deepseek_v3_mcore_tp1_pp2_ep4.sh</a></td> |
| 56 | <td>Y</td> | 56 | <td>Y</td> |
| 57 | <td>Y</td> | 57 | <td>Y</td> |
| @@ -527,7 +527,7 @@ | |||
| 527 | 527 | ||
| 528 | ② 建议按照功能特性进行文件夹命名区分,至多不超过两层目录,所有用例以 `test` 作为命名前缀; | 528 | ② 建议按照功能特性进行文件夹命名区分,至多不超过两层目录,所有用例以 `test` 作为命名前缀; |
| 529 | 529 | ||
| 530 | -③ 新增用例可以在原有用例基础上做 `test_xxx` 的补充,尽量保证测试功能的集成性;对于存在 .json 文件的用例,贡献时在 .json 中加入 `test_xxx` 配置,然后在 .py 中通过 `@pytest.mark.parameterize` 传入参数、构造用例,**请注意 .json 中的 key 值命名需与 .py 中的 test_xxx 保持统一**; | 530 | +③ 新增用例可以在原有用例基础上做 `test_xxx` 的补充,尽量保证测试功能的集成性;对于存在 .json 文件的用例,贡献时在 .json 中加入 `test_xxx` 配置,然后在 .py 中通过 `@pytest.mark.parametrize` 传入参数、构造用例,**请注意 .json 中的 key 值命名需与 .py 中的 test_xxx 保持统一**; |
| 531 | 531 | ||
| 532 | ④ 在贡献时候需要考虑最终校验的具体指标,精度(Acc.)、性能(Throu.)、显存(Mem.),在对应指标空白处填上 `Y`,如无校验的保留空白即可。 | 532 | ④ 在贡献时候需要考虑最终校验的具体指标,精度(Acc.)、性能(Throu.)、显存(Mem.),在对应指标空白处填上 `Y`,如无校验的保留空白即可。 |
| 533 | 533 | ||
| @@ -3,12 +3,12 @@ export CUDA_DEVICE_MAX_CONNECTIONS=1 | |||
| 3 | export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True | 3 | export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True |
| 4 | export HCCL_CONNECT_TIMEOUT=3600 | 4 | export HCCL_CONNECT_TIMEOUT=3600 |
| 5 | 5 | ||
| 6 | -GPUS_PER_NODE=8 | 6 | +NPUS_PER_NODE=8 |
| 7 | MASTER_ADDR=localhost | 7 | MASTER_ADDR=localhost |
| 8 | MASTER_PORT=6000 | 8 | MASTER_PORT=6000 |
| 9 | NNODES=1 | 9 | NNODES=1 |
| 10 | NODE_RANK=0 | 10 | NODE_RANK=0 |
| 11 | -WORLD_SIZE=$(($GPUS_PER_NODE*$NNODES)) | 11 | +WORLD_SIZE=$(($NPUS_PER_NODE*$NNODES)) |
| 12 | 12 | ||
| 13 | basepath=$(cd `dirname $0`; cd ../../../; pwd) | 13 | basepath=$(cd `dirname $0`; cd ../../../; pwd) |
| 14 | 14 | ||
| @@ -27,7 +27,7 @@ MBS=1 | |||
| 27 | GBS=8 | 27 | GBS=8 |
| 28 | 28 | ||
| 29 | DISTRIBUTED_ARGS=" | 29 | DISTRIBUTED_ARGS=" |
| 30 | - --nproc_per_node $GPUS_PER_NODE \ | 30 | + --nproc_per_node $NPUS_PER_NODE \ |
| 31 | --nnodes $NNODES \ | 31 | --nnodes $NNODES \ |
| 32 | --node_rank $NODE_RANK \ | 32 | --node_rank $NODE_RANK \ |
| 33 | --master_addr $MASTER_ADDR \ | 33 | --master_addr $MASTER_ADDR \ |
| @@ -5,12 +5,12 @@ export CUDA_DEVICE_MAX_CONNECTIONS=1 | |||
| 5 | export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True | 5 | export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True |
| 6 | export HCCL_CONNECT_TIMEOUT=3600 | 6 | export HCCL_CONNECT_TIMEOUT=3600 |
| 7 | 7 | ||
| 8 | -GPUS_PER_NODE=8 | 8 | +NPUS_PER_NODE=8 |
| 9 | MASTER_ADDR=localhost | 9 | MASTER_ADDR=localhost |
| 10 | MASTER_PORT=6000 | 10 | MASTER_PORT=6000 |
| 11 | NNODES=1 | 11 | NNODES=1 |
| 12 | NODE_RANK=0 | 12 | NODE_RANK=0 |
| 13 | -WORLD_SIZE=$(($GPUS_PER_NODE*$NNODES)) | 13 | +WORLD_SIZE=$(($NPUS_PER_NODE*$NNODES)) |
| 14 | 14 | ||
| 15 | basepath=$(cd `dirname $0`; cd ../../../; pwd) | 15 | basepath=$(cd `dirname $0`; cd ../../../; pwd) |
| 16 | 16 | ||
| @@ -29,7 +29,7 @@ MBS=1 | |||
| 29 | GBS=8 | 29 | GBS=8 |
| 30 | 30 | ||
| 31 | DISTRIBUTED_ARGS=" | 31 | DISTRIBUTED_ARGS=" |
| 32 | - --nproc_per_node $GPUS_PER_NODE \ | 32 | + --nproc_per_node $NPUS_PER_NODE \ |
| 33 | --nnodes $NNODES \ | 33 | --nnodes $NNODES \ |
| 34 | --node_rank $NODE_RANK \ | 34 | --node_rank $NODE_RANK \ |
| 35 | --master_addr $MASTER_ADDR \ | 35 | --master_addr $MASTER_ADDR \ |