From 25e83675c56594c190d9dfdf148cb85fa1e6f2ca Mon Sep 17 00:00:00 2001 From: xuzhen Date: Wed, 17 Sep 2025 17:24:50 +0800 Subject: [PATCH] modify mindformers doc --- .../training_template_instruction.md | 4 +- .../source_en/feature/pma_fused_checkpoint.md | 2 +- .../docs/source_en/feature/safetensors.md | 36 ++++++------- .../inference_precision_comparison.md | 20 +++---- .../training_template_instruction.md | 4 +- .../advanced_development/weight_transfer.md | 8 +-- .../docs/source_zh_cn/feature/ckpt.md | 4 +- .../source_zh_cn/feature/configuration.md | 14 ++--- .../docs/source_zh_cn/feature/dataset.md | 28 +++++----- .../docs/source_zh_cn/feature/evaluation.md | 8 +-- .../source_zh_cn/feature/high_availability.md | 52 +++++++++---------- .../feature/load_huggingface_config.md | 8 +-- .../docs/source_zh_cn/feature/logging.md | 8 +-- .../feature/memory_optimization.md | 18 +++---- .../docs/source_zh_cn/feature/monitor.md | 22 ++++---- .../feature/other_training_features.md | 12 ++--- .../source_zh_cn/feature/parallel_training.md | 12 ++--- .../feature/pma_fused_checkpoint.md | 6 +-- .../source_zh_cn/feature/resume_training.md | 4 +- .../docs/source_zh_cn/feature/safetensors.md | 45 ++++++++-------- .../skip_data_and_ckpt_health_monitor.md | 20 +++---- .../docs/source_zh_cn/feature/tokenizer.md | 14 ++--- .../feature/training_hyperparameters.md | 4 +- .../docs/source_zh_cn/introduction/models.md | 4 +- 24 files changed, 179 insertions(+), 178 deletions(-) diff --git a/docs/mindformers/docs/source_en/advanced_development/training_template_instruction.md b/docs/mindformers/docs/source_en/advanced_development/training_template_instruction.md index e73389c977..ee792e6625 100644 --- a/docs/mindformers/docs/source_en/advanced_development/training_template_instruction.md +++ b/docs/mindformers/docs/source_en/advanced_development/training_template_instruction.md @@ -58,7 +58,7 @@ The default configuration template uses 8 cards. | Qwen3 | | Qwen2_5 | -2. The generated model configuration shall be based on the YAML configuration first, and if no parameters are configured, the parameters in the config.json file under the pretrained-model-dir path shall be taken as the values. If you want to modify the custom model configuration, you only need to add the relevant configuration in mode_config. +2. The generated model configuration shall be based on the YAML configuration first, and if no parameters are configured, the parameters in the config.json file under the pretrained-model-dir path shall be taken as the values. If you want to modify the custom model configuration, you only need to add the relevant configuration in model_config. 3. For general configuration details, please refer to [Model Configuration](https://www.mindspore.cn/mindformers/docs/en/master/feature/configuration.html#basic-configuration). ## Advanced Configuration Modification @@ -86,4 +86,4 @@ When conducting pre-training, the generated weight format can be modified throug ### Resume Training -When performing resumable training after breakpoint, it is necessary to modify the load_checkpoint to the weight directory saved in the previous training task based on the YAML configuration file used in the previous training, that is, the checkpoint directory under the directory specified by the output_dir parameter, and set the resume_training to True. For details, please refer to [Resume training](https://www.mindspore.cn/mindformers/docs/en/master/feature/resume_training.html). \ No newline at end of file +When performing resumable training after breakpoint, it is necessary to modify the load_checkpoint to the weight directory saved in the previous training task based on the YAML configuration file used in the previous training, that is, the checkpoint directory under the directory specified by the output_dir parameter, and set the resume_training to True. For details, please refer to [Resume training](https://www.mindspore.cn/mindformers/docs/en/master/feature/resume_training.html). diff --git a/docs/mindformers/docs/source_en/feature/pma_fused_checkpoint.md b/docs/mindformers/docs/source_en/feature/pma_fused_checkpoint.md index 1701b00616..be8feddaab 100644 --- a/docs/mindformers/docs/source_en/feature/pma_fused_checkpoint.md +++ b/docs/mindformers/docs/source_en/feature/pma_fused_checkpoint.md @@ -12,7 +12,7 @@ EMA algorithm formula: $PMA_n = (1 - \alpha) \times PMA_{n-1} + \alpha \times W_ > The EMA algorithm allocates weights in an exponentially decreasing manner, making it more sensitive to the weights of the nearest model and able to quickly respond to changes in the model during the later stages of training. -SMA algorithm formula: $PMA_n = (W_1+ ... + Wn) / n$ +SMA algorithm formula: $PMA_n = (W_1+ ... + W_n) / n$ > The SMA algorithm evenly distributes weights across all model weights and treats each weight equally. diff --git a/docs/mindformers/docs/source_en/feature/safetensors.md b/docs/mindformers/docs/source_en/feature/safetensors.md index 9ef5f64599..41582bac54 100644 --- a/docs/mindformers/docs/source_en/feature/safetensors.md +++ b/docs/mindformers/docs/source_en/feature/safetensors.md @@ -21,7 +21,7 @@ Huggingface Safetensors example catalog structure is as follows: ```text qwen2_7b - └── hf_unified_safetenosrs + └── hf_unified_safetensors ├── model-00001-of-00004.safetensors ├── model-00002-of-00004.safetensors ├── model-00003-of-00004.safetensors @@ -33,7 +33,7 @@ MindSpore Safetensors example catalog structure is as follows: ```text qwen2_7b - └── ms_unified_safetenosrs + └── ms_unified_safetensors ├── model-00001-of-00004.safetensors ├── model-00002-of-00004.safetensors ├── model-00003-of-00004.safetensors @@ -53,7 +53,7 @@ Distributed Safetensors example catalog structure is as follows: ```text qwen2_7b - └── distributed_safetenosrs + └── distributed_safetensors ├── rank_0 └── qwen2_7b_rank_0.safetensors ├── rank_1 @@ -164,7 +164,7 @@ MindSpore Transformers supports training, inference, and resumable training in a | Parameter names | Descriptions | | ------------------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| load_checkpoint | The path to the folder where the weights are preloaded.
- In case of full weights, fill in the path to the folder where the slices/individual weight files are located.
Note: Huggingface safetensor weights loading is supported (currently only Llama series models are supported). During the online loading process, a copy of the converted MindSpore safetensor weights file is saved to `/output/ms_safetensors`.
- In case of distributed weights, they need to be stored in `model_dir/rank_x/xxx.safetensor` format, with the folder path filled in as `model_dir`. | +| load_checkpoint | The path to the folder where the weights are preloaded.
- In case of full weights, fill in the path to the folder where the slices/individual weight files are located.
Note: Huggingface safetensors weights loading is supported (currently only Llama series models are supported). During the online loading process, a copy of the converted MindSpore safetensors weights file is saved to `/output/ms_safetensors`.
- In case of distributed weights, they need to be stored in `model_dir/rank_x/xxx.safetensors` format, with the folder path filled in as `model_dir`. | | load_ckpt_format | The format of the loaded model weights, optionally `ckpt`, `safetensors`, defaults to `ckpt`.
Loading weights in `safetensors` format needs to change this configuration to `safetensors`. | | use_parallel | Whether to load in parallel. | | auto_trans_ckpt | Whether to enable the online slicing function.
- If loading weight is full weight:
a. when `use_parallel: True`, it is judged as distributed loading, `auto_trans_ckpt: True` needs to be set synchronously to turn on online slicing.
b. When `use_parallel: False`, it is judged as single card loading, you need to set `auto_trans_ckpt: False` synchronously to disable the online slicing function.
- If loading weight is distributed weight:
a. Without changing the original slicing strategy, you need to set `auto_trans_ckpt: False` to load directly according to the original slicing strategy.
b. To change the original slicing strategy, set `auto_trans_ckpt: True` and configure `src_strategy_path_or_dir` to be the original slicing strategy file path.
When the task is pulled up, the weights are merged online into full weights, which are sliced and loaded according to the parallelism strategy set in the configuration file. The online merged weights are saved in the current directory under the `/output/unified_checkpoint` file. | @@ -175,7 +175,7 @@ MindSpore Transformers supports training, inference, and resumable training in a ```yaml # configuration file -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # Load full weights file path +load_checkpoint: '/qwen2_7b/unified_safetensors' # Load full weights file path load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: False # Full weights + single card loading requires this configuration item to be turned off use_parallel: False # single card loading @@ -189,7 +189,7 @@ parallel_config: # Configure the target distr ```yaml # configuration file -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # Load full weights file path +load_checkpoint: '/qwen2_7b/unified_safetensors' # Load full weights file path load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: True # This configuration item needs to be turned on for full weights + distributed loading to turn on online slicing use_parallel: True # Multi-cards loading @@ -205,7 +205,7 @@ parallel_config: # Configure the target distr ```yaml # configuration file -load_checkpoint: '/output/distributed_safetenosrs' # Load source distributed weights file paths +load_checkpoint: '/output/distributed_safetensors' # Load source distributed weights file paths load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: False # Disable the online slicing function parallel_config: # Configure the target distributed strategy @@ -218,7 +218,7 @@ parallel_config: # Configure the target distr ```yaml # configuration file -load_checkpoint: '/output/distributed_safetenosrs' # Load source distributed weights file paths +load_checkpoint: '/output/distributed_safetensors' # Load source distributed weights file paths src_strategy_path_or_dir: '/output/src_strategy' # Load source strategy file for merging source distributed weights into full weights load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: True # Enable the online slicing function @@ -244,7 +244,7 @@ In scenarios where there are shared disks between servers, you can use MindSpore ```yaml output_dir: './output' # The strategy file is generated under ./output/strategy, which is used to slice the weights online. -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # Load full weights file path +load_checkpoint: '/qwen2_7b/unified_safetensors' # Load full weights file path load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: True # This configuration item needs to be turned on for full weights + distributed loading to turn on online slicing train_dataset: &train_dataset @@ -339,7 +339,7 @@ Distribute the merged strategy file `dst_strategy.ckpt` to each node under the ` ```yaml output_dir: './output' # Make sure that each node under ./output/merged_strategy/ has the merged strategy file -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # Load full weights file path +load_checkpoint: '/qwen2_7b/unified_safetensors' # Load full weights file path load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: True # This configuration item needs to be turned on for full weights + distributed loading to turn on online slicing ``` @@ -351,7 +351,7 @@ According to the [weight slicing](#weight-slicing) guide, the full weights are f Because distributed weight files are generally larger than strategy files and distribution operations are more time-consuming, the first approach is more recommended. ```yaml -load_checkpoint: '/output/distributed_safetenosrs' # Load distributed weights file path +load_checkpoint: '/output/distributed_safetensors' # Load distributed weights file path load_ckpt_format: 'safetensors' # Load weight file format auto_trans_ckpt: False # Distributed weight loading with online slicing turned off ``` @@ -442,7 +442,7 @@ generation: The priority for selecting the weight path of `load_checkpoint` is high. When configuring this parameter, the weight files in the path of `pretrained_model_dir` will not be loaded. -When `load_checkpoint` is not configured, if there are safetensor weight files in the path 'pretrained_model_dir', it will be loaded. If it does not exist, the weights will be randomly initialized. +When `load_checkpoint` is not configured, if there are safetensors weight files in the path 'pretrained_model_dir', it will be loaded. If it does not exist, the weights will be randomly initialized. > This feature currently only supports Qwen3 series and DeepSeek V3 series models in fine-tuning/inference scenarios, and is being continuously updated. @@ -561,14 +561,14 @@ ms.ckpt_to_safetensors("./ckpt_save_path/rank0/checkpoint_0.ckpt", "./output/saf #### Training Tasks -The MindSpore Transformers training task is started after adjusting the configuration file, and the conversion is achieved by loading in ckpt format and saving in safetensor format on a trial basis. +The MindSpore Transformers training task is started after adjusting the configuration file, and the conversion is achieved by loading in ckpt format and saving in safetensors format on a trial basis. ```yaml load_checkpoint: 'output/checkpoint/' # Load weights file path load_ckpt_format: 'ckpt' # Load weight file format as ckpt callbacks: - type: CheckpointMonitor - checkpoint_format: 'safetensors' # Save the weights file format as safetensor + checkpoint_format: 'safetensors' # Save the weights file format as safetensors ``` ## Usage Example @@ -579,7 +579,7 @@ If you use the full weighted multicard online fine-tuning, take the Qwen2.5-7B m ```yaml # Modified configuration -load_checkpoint: '/qwen2.5_7b/hf_unified_safetenosrs' # Load weights file path +load_checkpoint: '/qwen2.5_7b/hf_unified_safetensors' # Load weights file path load_ckpt_format: 'safetensors' # Load weights file format auto_trans_ckpt: True # This configuration item needs to be turned on for complete weights to enable the online slicing feature parallel_config: # Configure the target distributed strategy @@ -595,7 +595,7 @@ If you use distributed weights multicard online fine-tuning, take the Qwen2.5-7B ```yaml # Modified configuration -load_checkpoint: '/qwen2.5_7b/distributed_safetenosrs' # Load weights file path +load_checkpoint: '/qwen2.5_7b/distributed_safetensors' # Load weights file path load_ckpt_format: 'safetensors' # Load weights file format parallel_config: # Configure the target distributed strategy data_parallel: 2 @@ -627,7 +627,7 @@ If you use complete weighted multicard online inference, take the Qwen2.5-7B mod ```yaml # Modified configuration -load_checkpoint: '/qwen2.5_7b/hf_unified_safetenosrs' # Load weights file path +load_checkpoint: '/qwen2.5_7b/hf_unified_safetensors' # Load weights file path load_ckpt_format: 'safetensors' # Load weights file format auto_trans_ckpt: True # This configuration item needs to be turned on for complete weights to enable the online slicing function parallel_config: @@ -640,7 +640,7 @@ If you use distributed weighted multicard online inference, take the Qwen2.5-7B ```yaml # Modified configuration -load_checkpoint: '/qwen2.5_7b/distributed_safetenosrs' # Load weights file path +load_checkpoint: '/qwen2.5_7b/distributed_safetensors' # Load weights file path load_ckpt_format: 'safetensors' # Load weights file format parallel_config: data_parallel: 1 diff --git a/docs/mindformers/docs/source_zh_cn/advanced_development/inference_precision_comparison.md b/docs/mindformers/docs/source_zh_cn/advanced_development/inference_precision_comparison.md index fe086cffe7..4f1192a20f 100644 --- a/docs/mindformers/docs/source_zh_cn/advanced_development/inference_precision_comparison.md +++ b/docs/mindformers/docs/source_zh_cn/advanced_development/inference_precision_comparison.md @@ -18,22 +18,22 @@ ### 在线推理验证 -在线推理验证的主要目标是验证单条或者多条输入的推理输出的精度是否正常。如果所有输出都正常,并且和GPU环境下标杆的输出能够基本对齐,可以进下一步验证数据集评测。 +在线推理验证的主要目标是验证单条或者多条输入的推理输出的精度是否正常。如果所有输出都正常,并且和GPU环境下标杆的输出能够基本对齐,可以进入下一步验证数据集评测。 关于模型如何执行在线推理任务可以参考[推理指南](https://www.mindspore.cn/mindformers/docs/zh-CN/master/guide/inference.html)。 ### 数据集评测 -通过在线推理验证之后,模型在保持输入相同的情况下,标杆的输出可以基本保持一致,但是数据量比较小并且问题涉及领域不够全面,需要通过数据集评测来最终验证模型的精度。只有数据集的评测得分和标杆数据能够满足0.4%的误差,才能证明模型的精度符合验收标准。 +通过在线推理验证之后,模型在保持输入相同的情况下,标杆的输出可以基本保持一致。但是数据量比较小,并且问题涉及领域不够全面,需要通过数据集评测来最终验证模型的精度。只有数据集的评测得分和标杆数据能够满足0.4%的误差,才能证明模型的精度符合验收标准。 关于模型如何用数据集评测可以参考[评测指南](https://www.mindspore.cn/mindformers/docs/zh-CN/master/guide/benchmarks.html)。 ## 定位精度问题 - 场景:预设模型权重没问题,即GPU环境下模型推理精度正常,将GPU的输出作为标杆。 -- 可能出现的情况:针对该文档提供的精度比对流程可能会出现的两种情况,第一种是精度存在问题,第二种是精度存在误差。 +- 可能出现的情况:针对该文档提供的精度比对流程可能会出现的两种情况。第一种是精度存在问题,第二种是精度存在误差。 ### 精度存在问题 -精度存在问题一般是指推理任务出现回答乱码或者完全没有逻辑的情况,常见的原因一般时权重加载存在问题或者网络的代码实现存在问题。 +精度存在问题一般是指推理任务出现回答乱码或者完全没有逻辑的情况,常见的原因一般是权重加载存在问题,或者网络的代码实现存在问题。 #### 1. 权重加载问题 @@ -46,7 +46,7 @@ These parameters are not loaded in the weights: ``` -2. 根据日志的内容分析权重的加载是否正确,两条日志冒号后面的KEY值分别代表网络需要加载的所有权重中实际没有加载的权重的KEY值和权重文件里的所有权重中没有加载进网络的权重的KEY值。 +2. 根据日志的内容分析权重的加载是否正确。两条日志冒号后面的KEY值分别代表网络需要加载的所有权重中实际没有加载的权重的KEY值,以及权重文件里的所有权重中没有加载进网络的权重的KEY值。 可能出现的具体问题和解决方法: @@ -56,7 +56,7 @@ - 解决方法:对不合理权重KEY值的转换重新转换,具体参考[新模型权重转换适配教程](https://www.mindspore.cn/mindformers/docs/zh-CN/master/advanced_development/weight_transfer.html)。 - 问题 2:冒号后不存在任何KEY值,所有权重都加载进网络,但依旧可能存在权重融合或者拆分过程中切分不对导致加载错数据。 - 原因:大多是开源的权重中存在融合的权重,有时候需要拆分之后再和其他权重融合,过程中有可能会涉及各种切分,容易出现问题。 - - 定位方法:先重点分析容易出错的地方,如Attention中qkv的部分,结合网络结构中的写法,分析权重加载过程中的各种操作是否正确;如果理论分析不出来,可以直接将对怀疑的部分的权重打印出来和标杆的对应位置加载的权重对比。 + - 定位方法:先重点分析容易出错的地方,如Attention中qkv的部分,结合网络结构中的写法,分析权重加载过程中的各种操作是否正确。如果理论分析不出来,可以直接将对怀疑的部分的权重打印出来和标杆的对应位置加载的权重对比。 - 解决方法:通过分析或者实验找到权重加载错误的模块,解决方法参考[新模型权重转换适配教程](https://www.mindspore.cn/mindformers/docs/zh-CN/master/advanced_development/weight_transfer.html)。 #### 2. 新模型的搭建存在问题 @@ -68,13 +68,13 @@ 可能出现的问题和解决方法: - 问题:不同的问题推理输出依旧不变。 - - 可能的原因:MLP模块,MoE模块以及Attention模块涉及的linear模块不要需要bias,但是强加了bias,输入输出存在nan等。 + - 可能的原因:MLP模块、MoE模块以及Attention模块涉及的linear模块不需要bias,但是强加了bias,输入输出存在nan等。 - 定位方法:可以直接打印各个模块的输入输出,观察打印结果是否正常。 - - 解决方法:确定某个模块有问题之后,对比标杆确定该模块是否需要bias,如果不需要bias,将bias的配置项设置成False即可。 + - 解决方法:确定某个模块有问题之后,对比标杆确定该模块是否需要bias。如果不需要bias,将bias的配置项设置成False即可。 ### 精度存在误差 -精度存在误差一般是指在线推理的回答符合逻辑但是不能对齐标杆的回答或者数据集评测得分不满足验收标准的情况。 +精度存在误差一般是指在线推理的回答符合逻辑但是不能对齐标杆的回答,或者数据集评测得分不满足验收标准的情况。 #### 1. 在线推理的回答符合逻辑但是不能对齐标杆的回答 @@ -83,7 +83,7 @@ 可能出现的问题和解决方法: - 问题:首Token一致,但是在推了10个token左右就出现精度不一致的现象。 - - 定位方法:一般采用打印和dump数据的方式去对比数据的差异,如果打印的数据无法通过肉眼观察出是否在可接受范围之内,那么可以采用dump数据,然后通过对比工具判定该模块是否符合精度标准。对比工具可以使用MindSpore Transformers提供的方法进行对比,使用方法如下: + - 定位方法:一般采用打印和dump数据的方式去对比数据的差异。如果打印的数据无法通过肉眼观察出是否在可接受范围之内,那么可以采用dump数据,然后通过对比工具判定该模块是否符合精度标准。对比工具可以使用MindSpore Transformers提供的方法进行对比,使用方法如下: ```py import numpy as np diff --git a/docs/mindformers/docs/source_zh_cn/advanced_development/training_template_instruction.md b/docs/mindformers/docs/source_zh_cn/advanced_development/training_template_instruction.md index 1a11eb4937..128f2242bb 100644 --- a/docs/mindformers/docs/source_zh_cn/advanced_development/training_template_instruction.md +++ b/docs/mindformers/docs/source_zh_cn/advanced_development/training_template_instruction.md @@ -33,7 +33,7 @@ MindSpore Transformers对于不同训练场景提供了对应的配置模板, | 模型优化配置 | MindSpore Transformers提供重计算相关配置,以降低模型在训练时的内存占用,详情可参考[重计算](https://www.mindspore.cn/mindformers/docs/zh-CN/master/advanced_development/performance_optimization.html#%E9%87%8D%E8%AE%A1%E7%AE%97)。 | | 模型训练配置 | 启动模型训练时相关参数的配置模块,模板中主要包含trainer、runner_config、runner_wrapper、学习率(lr_schedule)以及优化器(optimizer)相关训练所需模块的参数。 | | 并行配置 | 为了提升模型的性能,在大规模集群的使用场景中通常需要为模型配置并行策略,详情可参考[分布式并行](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/parallel_training.html)。 | -| 回调函数配置 | MindSpore Transformers提供封装后的Callbacks函数类,主要实现在模型训练过程中返回模型的训练状态并输出、保存模型权重文件等一些操作,目前支持以下几个Callbacks函数类。
1.MFLossMonitor
该回调函数类主要用于在训练过程中对训练进度、模型Loss、学习率等信息进行打印
2.SummaryMonitor
该回调函数类主要用于收集Summary数据,详情可参考[mindspore.SummaryCollector](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.SummaryCollector.html)。
3.CheckpointMonitor
该回调函数类主要用于在模型训练过程中保存模型权重文件。 | +| 回调函数配置 | MindSpore Transformers提供封装后的Callbacks函数类,主要实现在模型训练过程中返回模型的训练状态并输出、保存模型权重文件等操作。目前支持以下几个Callbacks函数类:
1.MFLossMonitor
该回调函数类主要用于在训练过程中对训练进度、模型Loss、学习率等信息进行打印
2.SummaryMonitor
该回调函数类主要用于收集Summary数据,详情可参考[mindspore.SummaryCollector](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.SummaryCollector.html)。
3.CheckpointMonitor
该回调函数类主要用于在模型训练过程中保存模型权重文件。 | | context配置 | Context配置主要用于指定[mindspore.set_context](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.set_context.html)中的相关参数。 | | 性能分析工具配置 | MindSpore Transformers提供Profile作为模型性能调优的主要工具,详情可参考[性能调优指南](https://www.mindspore.cn/mindformers/docs/zh-CN/master/advanced_development/performance_optimization.html)。 | @@ -58,7 +58,7 @@ MindSpore Transformers对于不同训练场景提供了对应的配置模板, | Qwen3 | | Qwen2_5 | -2. 生成的模型配置优先以yaml配置为准,未配置参数则取值pretrained_model_dir路径下的config.json中的参数。如若要修改定制模型配置,则只需要在mode_config中添加相关配置即可。 +2. 生成的模型配置优先以yaml配置为准,未配置参数则取值pretrained_model_dir路径下的config.json中的参数。如若要修改定制模型配置,则只需要在model_config中添加相关配置即可。 3. 通用配置详情请参考[模型配置](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/configuration.html#%E6%A8%A1%E5%9E%8B%E9%85%8D%E7%BD%AE)。 ## 进阶配置修改 diff --git a/docs/mindformers/docs/source_zh_cn/advanced_development/weight_transfer.md b/docs/mindformers/docs/source_zh_cn/advanced_development/weight_transfer.md index 5019e73f71..451c868157 100644 --- a/docs/mindformers/docs/source_zh_cn/advanced_development/weight_transfer.md +++ b/docs/mindformers/docs/source_zh_cn/advanced_development/weight_transfer.md @@ -13,7 +13,7 @@ 主要分为以下几个步骤: 1. 读取所有`.safetensors`文件,获取每个权重的`key`名称; -2. 调用`convert_name`方法转换权重 key,这步也是权重转换开发必须适配的一步,同时返回权重`key`和对应的权重值; +2. 调用`convert_name`方法转换权重 key。这步也是权重转换开发必须适配的一步,同时返回权重`key`和对应的权重值; 3. 遍历权重`key`和对应的权重值,判断权重`key`类型: - 不属于`MoE`或特殊结构的`key`,可直接用`weight_loader`加载; - `MoE`中和路由专家相关的`key`,生成相应处理规则`expert_params_mapping`,遍历`expert_params_mapping`,匹配名称,最终调用相应的`weight_loader`处理; @@ -21,7 +21,7 @@ ## 开发步骤 -根据上述流程图可以看出,权重转换适配只需要完成一项修改: 调用convert_name方法,完成Hugging Face权重key至中间态key的转换。 +根据上述流程图可以看出,权重转换适配只需要完成一项修改:调用convert_name方法,完成Hugging Face权重key至中间态key的转换。 操作步骤如下: @@ -55,7 +55,7 @@ ] ``` - 其中元组的第一个元素为Hugging Face权重key,第二个元素为中间态权重key。 + 其中,元组的第一个元素为Hugging Face权重key,第二个元素为中间态权重key。 ## Qwen3模型权重转换适配样例 @@ -89,7 +89,7 @@ class Qwen3PreTrainedModel(PreTrainedModel, ModelMixin): ## 验证权重加载是否成功 -参考[推理文档](../guide/inference.md)执行推理流程,然后查看日志,如果日志中出现以下内容,表明权重和网络完全匹配,权重已经完全加入到网络中,检验模型推理结果是否符合预期,若出现乱码情况,需要进一步定位,参考推理精度比对文档: +参考[推理文档](../guide/inference.md)执行推理流程,然后查看日志。如果日志中出现以下内容,表明权重和网络完全匹配,权重已经完全加入到网络中。检验模型推理结果是否符合预期,若出现乱码情况,需要进一步定位,参考推理精度比对文档: ```text These parameters are not loaded in the network: {}' diff --git a/docs/mindformers/docs/source_zh_cn/feature/ckpt.md b/docs/mindformers/docs/source_zh_cn/feature/ckpt.md index b1cc0ab24b..ca1337ee94 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/ckpt.md +++ b/docs/mindformers/docs/source_zh_cn/feature/ckpt.md @@ -4,7 +4,7 @@ ## 概述 -ckpt是深度学习框架中用于保存模型训练状态的通用文件格式,包含模型参数、优化器状态和训练进度等信息,主要用于恢复训练或微调模型,本文主要介绍MindSpore Transformers如何支持该文件格式的转换和切分。 +ckpt是深度学习框架中用于保存模型训练状态的通用文件格式,包含模型参数、优化器状态和训练进度等信息,主要用于恢复训练或微调模型。本文主要介绍MindSpore Transformers如何支持该文件格式的转换和切分。 > 已计划日落ckpt格式,使用权重更推荐使用safetensors格式。Safetensors 是 Huggingface 推出的一种可靠、易移植的机器学习模型存储格式,用于安全地存储Tensor,而且存储速度较快。详细参考文档[Safetensors权重](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/safetensors.html)。 @@ -34,7 +34,7 @@ python convert_weight.py [-h] --model MODEL [--reversed] --input_path INPUT_PATH - dtype:转换后的权重数据类型。 - n_head:只对BLOOM模型生效,使用`bloom_560m`时请设为`16`,使用`bloom_7.1b`时请设为`32`。 - hidden_size:只对BLOOM模型生效,使用`bloom_560m`时请设为`1024`,使用`bloom_7.1b`时请设为`4096`。 -- layers:只对GPT2和WizardCoder模型生效,模型被转换的层数。 +- layers:只对GPT2和WizardCoder模型生效,指定模型被转换的层数。 - is_pretrain:只对Swin模型生效,转换预训练权重。 - telechat_type:只对TeleChat模型生效,TeleChat模型的版本。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/configuration.md b/docs/mindformers/docs/source_zh_cn/feature/configuration.md index 6d6f9834c5..f5b91daa74 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/configuration.md +++ b/docs/mindformers/docs/source_zh_cn/feature/configuration.md @@ -4,11 +4,11 @@ ## 概述 -在模型的训练和推理过程中通常需要配置不同的参数,MindSpore Transformers支持使用`YAML`文件集中管理和调整可配置项,使模型的配置更加结构化,同时提高了其可维护性。 +在模型的训练和推理过程中,通常需要配置不同的参数。MindSpore Transformers支持使用`YAML`文件集中管理和调整可配置项,使模型配置更加结构化,同时提高了可维护性。 ## YAML文件内容说明 -MindSpore Transformers提供的`YAML`文件中包含对于不同功能的配置项,下面按照配置项的内容对其进行说明。 +MindSpore Transformers提供的`YAML`文件中包含不同功能的配置项,下面按照配置项内容对其进行说明。 ### 基础配置 @@ -18,7 +18,7 @@ MindSpore Transformers提供的`YAML`文件中包含对于不同功能的配置 |-------------------------------|-------|------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | seed | int | 可选 | 0 | 设置全局随机种子,用于保证实验可复现性。详情可参考 [mindspore.set_seed](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.set_seed.html)。 | | run_mode | str | 必选 | 无 | 设置模型的运行模式,可选:`train`、`finetune`、`eval` 或 `predict`。 | -| output_dir | str | 可选 | 无 | 设置保存日志(log)、权重(checkpoint)、并行策略(strategy)等文件的输出路径。若路径不存在会尝试自动创建。 | +| output_dir | str | 可选 | 无 | 设置保存日志(log)、权重(checkpoint)、并行策略(strategy)等文件的输出路径。若路径不存在,会尝试自动创建。 | | load_checkpoint | str | 可选 | 无 | 加载权重的文件或文件夹路径,支持以下三种场景:
1. 完整权重文件路径;
2. 离线切分后的分布式权重文件夹路径;
3. 包含 LoRA 增量权重和 base 模型权重的文件夹路径。
各种权重的获取方式详见 [权重转换功能](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/ckpt.html) | | auto_trans_ckpt | bool | 可选 | False | 是否开启分布式权重自动切分与合并功能。开启后可在单卡加载多卡切分权重,或多卡加载单卡权重。详情见 [分布式权重切分与合并](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/ckpt.html) | | resume_training | bool | 可选 | False | 是否开启断点续训功能。开启后将从 `load_checkpoint` 指定的路径恢复优化器状态、学习率调度器状态等,继续训练。详情见 [断点续训功能](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/resume_training.html#%E6%96%AD%E7%82%B9%E7%BB%AD%E8%AE%AD) | @@ -162,20 +162,20 @@ Context配置主要用于指定[mindspore.set_context](https://www.mindspore.cn/ ### 模型训练配置 -启动模型训练时,除了模型相关参数,还需要设置trainer、runner_config、学习率以及优化器等训练所需模块的参数,MindSpore Transformers提供了如下配置项。 +启动模型训练时,除了模型相关参数,还需要设置trainer、runner_config、学习率以及优化器等训练所需模块的参数。MindSpore Transformers提供了如下配置项。 | 参数 | 说明 | 类型 | |---------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------| | trainer.type | 设置trainer类,通常不同应用场景的模型会设置不同的trainer类。 | str | -| trainer.model_name | 设置模型名称,格式为'{name}_xxb',表示模型的某一规格。 | str | +| trainer.model_name | 设置模型名称,格式为`'{name}_xxb'`,表示模型的某一规格。 | str | | runner_config.epochs | 设置模型训练的轮数。 | int | | runner_config.batch_size | 设置批处理数据的样本数,该配置会覆盖数据集配置中的`batch_size`。 | int | | runner_config.sink_mode | 是否开启数据下沉模式。 | bool | | runner_config.sink_size | 设置每次从Host下发到Device的迭代数量,仅`sink_mode=True`时生效,此参数将在后续版本中废弃。 | int | | runner_config.gradient_accumulation_steps | 设置梯度累积步数,默认值为1,表示不开启梯度累积。 | int | -| runner_wrapper.type | 设置wrapper类,一般设置'MFTrainOneStepCell'即可。 | str | +| runner_wrapper.type | 设置wrapper类,一般设置`'MFTrainOneStepCell'`即可。 | str | | runner_wrapper.local_norm | 设置打印单卡上各参数的梯度范数。 | bool | -| runner_wrapper.scale_sense.type | 设置梯度缩放类,一般设置'DynamicLossScaleUpdateCell'即可。 | str | +| runner_wrapper.scale_sense.type | 设置梯度缩放类,一般设置`'DynamicLossScaleUpdateCell'`即可。 | str | | runner_wrapper.scale_sense.loss_scale_value | 设置loss动态尺度系数,模型loss可以根据该参数配置动态变化。 | int | | runner_wrapper.use_clip_grad | 是否开启梯度剪裁,开启可避免反向梯度过大导致训练无法收敛的情况。 | bool | | lr_schedule.type | 设置lr_schedule类,lr_schedule主要用于调整模型训练中的学习率。 | str | diff --git a/docs/mindformers/docs/source_zh_cn/feature/dataset.md b/docs/mindformers/docs/source_zh_cn/feature/dataset.md index 4056e68ab1..b9592ac8f7 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/dataset.md +++ b/docs/mindformers/docs/source_zh_cn/feature/dataset.md @@ -16,7 +16,7 @@ Megatron数据集是为大规模分布式语言模型预训练场景设计的一 ### 数据预处理 -MindSpore Transformers提供了数据预处理脚本[preprocess_indexed_dataset.py](https://gitee.com/mindspore/mindformers/blob/master/toolkit/data_preprocess/megatron/preprocess_indexed_dataset.py)用于将`json`格式的原始文本预料转换成`.bin`或`.idx`文件。如果用户的原始文本不是`json`格式,需要自行将数据处理成对应格式的文件。 +MindSpore Transformers提供了数据预处理脚本[preprocess_indexed_dataset.py](https://gitee.com/mindspore/mindformers/blob/master/toolkit/data_preprocess/megatron/preprocess_indexed_dataset.py),用于将`json`格式的原始文本语料转换成`.bin`或`.idx`文件。如果用户的原始文本不是`json`格式,需要自行将数据处理成对应格式的文件。 下面是`json`格式文件的示例: @@ -66,7 +66,7 @@ MindSpore Transformers提供了数据预处理脚本[preprocess_indexed_dataset. 3. 下载模型的词表文件 - 由于不同模型对应不用的词表文件,因此需要下载对应训练模型的词表文件,这里以`Llama3`模型为例,下载[tokenizer.model](https://huggingface.co/meta-llama/Meta-Llama-3-8B/blob/main/original/tokenizer.model)以用于数据预处理。 + 由于不同模型对应不同的词表文件,因此需要下载对应训练模型的词表文件。这里以`Llama3`模型为例,下载[tokenizer.model](https://huggingface.co/meta-llama/Meta-Llama-3-8B/blob/main/original/tokenizer.model)以用于数据预处理。 4. 生成`.bin`或`.idx`数据文件 @@ -91,9 +91,9 @@ MindSpore Transformers提供了数据预处理脚本[preprocess_indexed_dataset. | register_path | 选择外部tokenizer代码所在目录,仅在`tokenizer-type`='AutoRegister'时生效 | | auto_register | 选择外部tokenizer的导入路径,仅在`tokenizer-type`='AutoRegister'时生效 | - `tokenizer-type`的可选值为'HuggingFaceTokenizer'和'AutoRegister',其中设置为'HuggingFaceTokenizer'时,transformers库的AutoTokenizer类会使用本地HuggingFace仓库对其中的tokenizer实例化;而设置为'AutoRegister'时,表示调用由register_path和auto_register参数指定的外部tokenizer类。 + `tokenizer-type`的可选值为'HuggingFaceTokenizer'和'AutoRegister'。其中,设置为'HuggingFaceTokenizer'时,transformers库的AutoTokenizer类会使用本地HuggingFace仓库中的tokenizer进行实例化;设置为'AutoRegister'时,表示调用由register_path和auto_register参数指定的外部tokenizer类。 - 以[Deepseek-V3仓库](https://huggingface.co/deepseek-ai/DeepSeek-V3-Base)中的[LlamaTokenizerFast](https://huggingface.co/deepseek-ai/DeepSeek-V3-Base/blob/main/tokenizer_config.json)和[词表](https://huggingface.co/deepseek-ai/DeepSeek-V3-Base/blob/main/tokenizer.json)为例。如果本地不存在对应仓库,需要将配置文件(tokenizer_config.json)和词表文件(tokenizer.json)手动下载到本地目录,假设为/path/to/huggingface/tokenizer。执行如下命令处理数据集: + 以[Deepseek-V3仓库](https://huggingface.co/deepseek-ai/DeepSeek-V3-Base)中的[LlamaTokenizerFast](https://huggingface.co/deepseek-ai/DeepSeek-V3-Base/blob/main/tokenizer_config.json)和[词表](https://huggingface.co/deepseek-ai/DeepSeek-V3-Base/blob/main/tokenizer.json)为例。如果本地不存在对应仓库,需要将配置文件(tokenizer_config.json)和词表文件(tokenizer.json)手动下载到本地目录,假设为`/path/to/huggingface/tokenizer`。执行如下命令处理数据集: ```shell python toolkit/data_preprocess/megatron/preprocess_indexed_dataset.py \ @@ -309,7 +309,7 @@ train_dataset: &train_dataset ### 数据集加载 -数据集加载功能主要通过`load_func`参数实现,`HFDataLoader`会[配置说明](#配置说明)中之外的所有参数作为数据集加载接口的入参,具体使用说明如下: +数据集加载功能主要通过`load_func`参数实现。`HFDataLoader`会将[配置说明](#配置说明)中之外的所有参数作为数据集加载接口的入参,具体使用说明如下: 1. 使用`datasets.load_dataset`接口加载数据集: @@ -367,7 +367,7 @@ handler: #### 自定义数据处理功能 -自定义数据预处理功能需要用户自己实现数据处理模块,下面介绍自定义数据处理模块实现过程,可参考[AlpacaInstructDataHandler](https://gitee.com/mindspore/mindformers/blob/master/mindformers/dataset/handler/alpaca_handler.py)。 +自定义数据预处理功能需要用户自己实现数据处理模块。下面介绍自定义数据处理模块实现过程,可参考[AlpacaInstructDataHandler](https://gitee.com/mindspore/mindformers/blob/master/mindformers/dataset/handler/alpaca_handler.py)。 用户自定义数据处理支持`Class`和`Method`两种形式: @@ -385,9 +385,9 @@ handler: return dataset ``` - 上面的`CustomHandler`实现了数据集随机采样的处理操作,如果要实现其他功能,可以修改数据预处理操作并返回处理后的数据集。 + 上面的`CustomHandler`实现了数据集随机采样的处理操作。如果要实现其他功能,可以修改数据预处理操作并返回处理后的数据集。 - 同时,MindSpore Transformers提供了[BaseInstructDataHandler](https://gitee.com/mindspore/mindformers/blob/master/mindformers/dataset/handler/base_handler.py)并内置了tokenizer配置功能,如果需要使用tokenizer可以继承`BaseInstructDataHandler`类。 + 同时,MindSpore Transformers提供了[BaseInstructDataHandler](https://gitee.com/mindspore/mindformers/blob/master/mindformers/dataset/handler/base_handler.py),并内置了tokenizer配置功能。如果需要使用tokenizer,可以继承`BaseInstructDataHandler`类。 2. 在[\_\_init__.py](https://gitee.com/mindspore/mindformers/blob/master/mindformers/dataset/handler/__init__.py)中添加调用 @@ -429,10 +429,10 @@ handler: ### 应用实践 -下面以`qwen3`模型以及`alpaca`数据集为例介绍如何使用HF数据集进行微调,需要使用`AlpacaInstructDataHandler`对数据进行在线处理,具体参数说明如下。 +下面以`qwen3`模型以及`alpaca`数据集为例,介绍如何使用HF数据集进行微调。需要使用`AlpacaInstructDataHandler`对数据进行在线处理,具体参数说明如下。 - seq_length:通过tokenizer将文本编码为token id的最大长度,通常与模型训练的序列长度一致。 -- padding:是否在tokenizer编码将token id填充到最大长度。 +- padding:是否在tokenizer编码时将token id填充到最大长度。 - tokenizer:pretrained_model_dir表示从HF社区上下载的模型词表及权重文件夹,trust_remote_code通常设置为True,padding_side表示从token id右侧进行填充。 #### alpaca数据集微调 @@ -496,8 +496,8 @@ parallel: MindSpore Transformers实现了数据集的packing功能,主要用于大模型训练任务中将多个短序列拼接成定长的长序列,以提升训练效率。它目前支持两种策略,可以通过`pack_strategy`进行配置: -1. **pack**:将多个样本拼接成一个定长序列,当待拼接样本超过最大长度`seq_length`后,将该样本放入下一个拼接样本中。 -2. **truncate**:将多个样本拼接成一个定长序列,当待拼接样本超过最大长度`seq_length`后对样本进行截断,并将剩余部分放入下一个拼接样本中。 +1. **pack**:将多个样本拼接成一个定长序列。当待拼接样本超过最大长度`seq_length`后,将该样本放入下一个拼接样本中。 +2. **truncate**:将多个样本拼接成一个定长序列。当待拼接样本超过最大长度`seq_length`后,对样本进行截断,并将剩余部分放入下一个拼接样本中。 该功能通过`PackingHandler`类实现,最终输出只包含`input_ids`、`labels`和`actual_seq_len`三个字段。 @@ -562,7 +562,7 @@ parallel: #### 离线处理alpaca数据微调 -`HFDataLoader`支持离线处理HF数据集并保存,加载离线处理的数据可直接拉起模型训练。 +`HFDataLoader`支持离线处理HF数据集并保存。加载离线处理的数据可直接拉起模型训练。 1. 修改`qwen3`模型训练配置文件: @@ -715,7 +715,7 @@ MindRecord是MindSpore提供的高效数据存储/读取模块,可以减少磁 MindSpore框架原生数据集加载模块[MindDataset](https://www.mindspore.cn/docs/zh-CN/master/api_python/dataset/mindspore.dataset.MindDataset.html),在对多个MindRecord数据集进行加载和采样时存在性能等瓶颈,因此MindSpore Transformers通过`MultiSourceDataLoader`实现多个数据集高效加载与采样功能。 -多源数据集功能主要通过修改配置文件中`data_loader`中配置开启,下面提供示例: +多源数据集功能主要通过修改配置文件中`data_loader`配置开启,下面提供示例: ```yaml train_dataset: &train_dataset diff --git a/docs/mindformers/docs/source_zh_cn/feature/evaluation.md b/docs/mindformers/docs/source_zh_cn/feature/evaluation.md index d2d30aaec6..1ff628fce8 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/evaluation.md +++ b/docs/mindformers/docs/source_zh_cn/feature/evaluation.md @@ -6,7 +6,7 @@ ### 基本介绍 -[LM Evaluation Harness](https://github.com/EleutherAI/lm-evaluation-harness)是一个开源语言模型评测框架,提供60多种标准学术数据集的评测,支持HuggingFace模型评测、PEFT适配器评测、vLLM推理评测等多种评测方式,支持自定义prompt和评测指标,包含loglikelihood、generate_until、loglikelihood_rolling三种类型的评测任务。基于Harness评测框架对MindSpore Transformers进行适配后,支持加载MindSpore Transformers模型进行评测。 +[LM Evaluation Harness](https://github.com/EleutherAI/lm-evaluation-harness)是一个开源语言模型评测框架。该框架提供60多种标准学术数据集的评测,支持HuggingFace模型评测、PEFT适配器评测、vLLM推理评测等多种评测方式。同时支持自定义prompt和评测指标,包含loglikelihood、generate_until、loglikelihood_rolling三种类型的评测任务。基于Harness评测框架对MindSpore Transformers进行适配后,支持加载MindSpore Transformers模型进行评测。 目前已验证过的模型和支持的评测任务如下表所示(其余模型和评测任务正在积极验证和适配中,请关注版本更新): @@ -18,7 +18,7 @@ ### 安装 -Harness支持pip安装和源码编译安装两种方式。pip安装更简单快捷,源码编译安装更便于调试分析,用户可以根据需要选择合适的安装方式。 +Harness支持pip安装和源码编译安装两种方式。pip安装更简单快捷,源码编译安装更便于调试分析。用户可以根据需要选择合适的安装方式。 #### pip安装 @@ -59,7 +59,7 @@ pip install -e . ``` 关于每个配置项的详细说明请参考[配置文件说明](../feature/configuration.md)。 - 4. 如果使用`ceval-valid`、`mmlu`、`cmmlu`、`race`、`lambada`数据集进行评测,需要将`use_flash_attention`设置为`False`,以`predict_llama3_1_8b.yaml`为例,修改yaml如下: + 4. 如果使用`ceval-valid`、`mmlu`、`cmmlu`、`race`、`lambada`数据集进行评测,需要将`use_flash_attention`设置为`False`。以`predict_llama3_1_8b.yaml`为例,修改yaml如下: ```yaml model: @@ -269,4 +269,4 @@ python run_mindformer.py \ ### 使用AISBench进行评测 -参考AISBench评测章节,使用AISBench工具进行评测,验证模型精度。 \ No newline at end of file +参考AISBench评测章节,使用AISBench工具进行评测,验证模型精度。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/high_availability.md b/docs/mindformers/docs/source_zh_cn/feature/high_availability.md index 22c594b066..c0a1750b03 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/high_availability.md +++ b/docs/mindformers/docs/source_zh_cn/feature/high_availability.md @@ -6,13 +6,13 @@ MindSpore Transformers 高可用特性提供了如下几个功能: -- **临终 CKPT 功能**:主要针对大模型训练过程中的故障恢复加速,该特性在训练过程中发生故障后,校验中间状态数据的完整性和一致性,生成一次临终 CheckPoint 数据,恢复训练时能够通过该 CheckPoint 数据恢复,减少故障造成的训练迭代损失。 -- **UCE 故障容错恢复功能**:主要是针对大模型训练过程中片上内存的 UCE 故障检测,并完成在线修复,达到 Step 级重计算。 -- **HCCE 故障恢复功能**:主要是针对大模型训练过程中HCCL通信算子重计算失败,并完成在线修复,达到 Step 级重计算。 -- **TRE 训练结果异常恢复功能**:主要是针对大模型训练过程中出现loss或global norm等值异常检测,并完成在线修复,达到 Step 级重计算。 +- **临终 CKPT 功能**:主要针对大模型训练过程中的故障恢复加速。该特性在训练过程中发生故障后,校验中间状态数据的完整性和一致性,生成一次临终 Checkpoint 数据。恢复训练时能够通过该 Checkpoint 数据恢复,减少故障造成的训练迭代损失。 +- **UCE 故障容错恢复功能**:主要针对大模型训练过程中片上内存的 UCE 故障检测,并完成在线修复,达到 Step 级重计算。 +- **HCCE 故障恢复功能**:主要针对大模型训练过程中HCCL通信算子重计算失败,并完成在线修复,达到 Step 级重计算。 +- **TRE 训练结果异常恢复功能**:主要针对大模型训练过程中出现loss或global norm等值异常检测,并完成在线修复,达到 Step 级重计算。 - **ARF 进程级重调度恢复功能**:训练发生异常后,不需要重新拉起整个集群,只需以节点为单位进行重启或替换,完成修复并继续训练。 -- **TSP 训练迭代暂停功能**:在每个训练step结束后,进入训练暂停接口,根据上层运维需要进行训练暂停和继续,例如,暂停训练执行通信网络轨道切换,切换成功后继续训练。 -- **RSC POD级重调度功能**:主要是其他快恢特性执行失败之后的兜底方案,kill故障进程以及其他正常进程(正常进程所在pod不会被kill),将故障pod从当前集群中隔离,同时调度新的pod加入集群,并恢复训练(当前版本必须依赖MindX)。 +- **TSP 训练迭代暂停功能**:在每个训练step结束后,进入训练暂停接口,根据上层运维需要进行训练暂停和继续。例如,暂停训练执行通信网络轨道切换,切换成功后继续训练。 +- **RSC POD 级重调度功能**:主要作为其他快恢特性执行失败之后的兜底方案,kill故障进程以及其他正常进程(正常进程所在pod不会被kill),将故障pod从当前集群中隔离,同时调度新的pod加入集群,并恢复训练(当前版本必须依赖MindX)。 这几个高可用特性的**约束**和**依赖**如下: @@ -24,9 +24,9 @@ MindSpore Transformers 高可用特性提供了如下几个功能: 目前这几个高可用特性只支持Ascend后端上图模式的Step级别恢复。 -卡间存在副本关系的目的是当其中一张卡发生故障时,可从另外一张卡恢复,要求权重和优化器状态都会存在至少两份冗余。为保证这种冗余关系,必须开启数据并行,保证有两张卡权重一致,同时如果开启了优化器并行,也必须确保存在两张卡的优化器状态一致。 +卡间存在副本关系的目的是当其中一张卡发生故障时,可从另外一张卡恢复。要求权重和优化器状态都会存在至少两份冗余。为保证这种冗余关系,必须开启数据并行,保证有两张卡权重一致。同时,如果开启了优化器并行,也必须确保存在两张卡的优化器状态一致。 -临终 CKPT、UCE 和 ARF 组合开启这三个功能时,依次生效的顺序是:UCE -> ARF -> 临终 CKPT ,如果其中一个功能可以恢复,就不会执行下一个功能。临终 CKPT 功能作为最后的保障,完成该功能后整个训练进程会退出,所以在 UCE 或 ARF 功能开启时,会默认开启临终 CKPT。 +临终 CKPT、UCE 和 ARF 组合开启这三个功能时,依次生效的顺序是:UCE -> ARF -> 临终 CKPT。如果其中一个功能可以恢复,就不会执行下一个功能。临终 CKPT 功能作为最后的保障,完成该功能后整个训练进程会退出。所以在 UCE 或 ARF 功能开启时,会默认开启临终 CKPT。 故障快速恢复由ARF和TRE两个功能组合,生效顺序为:TRE -> ARF 。TRE负责监测global norm的异常值并抛出异常,ARF负责捕获TRE异常后重新拉起整个集群修复训练,整个过程不中断训练。 @@ -53,7 +53,7 @@ export MS_TFT_PORT=30051 ``` - `MINDIO_FOR_MINDSPORE`:使能 MindIO TFT SDK 支持 MindSpore -- `MS_ENABLE_TFT`:表示启用训练故障容错(Training Fault Tolerance)功能,如果只想启用其中的某一个功能,则将对应的值设置为 1 即可。 +- `MS_ENABLE_TFT`:表示启用训练故障容错(Training Fault Tolerance)功能。如果只想启用其中的某一个功能,则将对应的值设置为 1 即可。 - **TTP (Try To Persist)**:临终 CKPT 功能 - **UCE (Uncorrectable Memory Error)**:UCE 故障容错恢复功能 - **HCCE (Huawei Collective Communication Error)**:HCCL 重计算失败恢复功能 @@ -74,12 +74,12 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 #### 保存及恢复配置 -临终的 CheckPoint 保存和恢复能力分别用于初始训练和续训,这部分复用现有的 MindSpore Transformers 的配置,以下分别介绍初始训练和续训的配置。 +临终的 Checkpoint 保存和恢复能力分别用于初始训练和续训,这部分复用现有的 MindSpore Transformers 的配置。以下分别介绍初始训练和续训的配置。 - **初始训练配置** ```yaml - output_dir: './output' # 保存 CheckPoint 和 Strategy 的目录 + output_dir: './output' # 保存 Checkpoint 和 Strategy 的目录 load_checkpoint: '' # 初次训练时配置为空 src_strategy_path_or_dir: '/output/strategy/' only_save_strategy: False @@ -97,8 +97,8 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 - **续训配置** ```yaml - output_dir: './output' # 保存 CheckPoint 和 Strategy 的目录 - load_checkpoint: './output/checkpoint/' # 续训时配置 CheckPoint 路径 + output_dir: './output' # 保存 Checkpoint 和 Strategy 的目录 + load_checkpoint: './output/checkpoint/' # 续训时配置 Checkpoint 路径 src_strategy_path_or_dir: '/output/strategy/' only_save_strategy: False resume_training: True # 续训时配置为 True @@ -114,7 +114,7 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 #### 副本关系配置 -高可用的临终 CKPT、UCE 和 ARF 这三个功能的关键是配置出权重和优化器的副本冗余关系,配置的核心是数据并行域的维度大于 2,如果叠加优化器并行,需要同时保证优化器的副本数大于 2。所以配置分两类,开启优化器并行和不开启优化器并行。下面以 8 卡为例,介绍如何配置。 +高可用的临终 CKPT、UCE 和 ARF 这三个功能的关键是配置出权重和优化器的副本冗余关系。配置的核心是数据并行域的维度大于 2,如果叠加优化器并行,需要同时保证优化器的副本数大于 2。所以配置分两类:开启优化器并行和不开启优化器并行。下面以 8 卡为例,介绍如何配置。 - **不开启优化器并行** @@ -131,7 +131,7 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 - **开启优化器并行** - 开优化器并行后必须要保证优化器的状态存在副本,配置的关键是 optimizer_weight_shard_size 为 2。此时优化器状态的副本数为 data_parallel/optimizer_weight_shard_size。因此,如果数据并行度配置为 2 时,是不存在优化器副本的,必须把数据并行度配置为 4;此时的副本数为 data_parallel/optimizer_weight_shard_size = 4/2 = 2。 + 开启优化器并行后必须要保证优化器的状态存在副本,配置的关键是 optimizer_weight_shard_size 为 2。此时优化器状态的副本数为 data_parallel/optimizer_weight_shard_size。因此,如果数据并行度配置为 2 时,是不存在优化器副本的,必须把数据并行度配置为 4。此时的副本数为 data_parallel/optimizer_weight_shard_size = 4/2 = 2。 ```yaml parallel: @@ -192,10 +192,10 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 需要注意以下关键点: - - `sink_size: 1`: 临终 CKPT 和 UCE 故障容错恢复等特性不支持 `sink_size` 大于 1 的场景,因此这里配置为 1。 - - `enable_parallel_optimizer: True`: 使能优化器并行。 - - `optimizer_weight_shard_size: 4`: 优化器并行的切分大小为 4。 - - `data_parallel: 8`: 数据并行配置为 8。 + - `sink_size: 1`:临终 CKPT 和 UCE 故障容错恢复等特性不支持 `sink_size` 大于 1 的场景,因此这里配置为 1。 + - `enable_parallel_optimizer: True`:使能优化器并行。 + - `optimizer_weight_shard_size: 4`:优化器并行的切分大小为 4。 + - `data_parallel: 8`:数据并行配置为 8。 按照前面章节的说明,`data_parallel/optimizer_weight_shard_size` 的值为 `8 / 4 = 2`,大于 1,因此存在副本关系。 3. 执行下面命令启动训练 @@ -216,12 +216,12 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 注意:需要将 `/YourDataSetPath` 换成实际数据集的路径。 4. 待训练执行若干个 step 之后,终止 worker 进程,触发临终 CKPT 保存 - 注意:通过上述启动方式, MindIO Controller 附着在 worker 0 进程上,此种情况下不能终止 worker 0,否则导致 MindIO Controller 退出,无法触发临终 CKPT。但是通过 taskd 方式启动训练时,MindIO Controller 是个单独的进程,可以终止 worker 0 进程。 -5. 确认临终的 CheckPoint 生成 + 注意:通过上述启动方式,MindIO Controller 附着在 worker 0 进程上,此种情况下不能终止 worker 0,否则导致 MindIO Controller 退出,无法触发临终 CKPT。但是通过 taskd 方式启动训练时,MindIO Controller 是个单独的进程,可以终止 worker 0 进程。 +5. 确认临终的 Checkpoint 生成 - 在整个训练进程结束后,通过日志确认最终生成的 CheckPoint 文件的合理性,具体操作如下: + 在整个训练进程结束后,通过日志确认最终生成的 Checkpoint 文件的合理性,具体操作如下: - 1). 执行命令 `find output/checkpoint/ -name '*.ckpt'` 查找生成的 CheckPoint 文件: + 1). 执行命令 `find output/checkpoint/ -name '*.ckpt'` 查找生成的 Checkpoint 文件: ```text $ find output/checkpoint/ -name '*.ckpt' @@ -252,9 +252,9 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 2025-04-07 15:34:27.393515 info 1879142 [TTP controller.cpp:1512] rank:1, report group list: [1, 5] ``` - 从上面训练的 step 信息可以看出已经训练的 5 个 step,和 CheckPoint 的文件名 `llama2_13b_rank_2-5_1.ckpt` 中的 5 是一致的。 + 从上面训练的 step 信息可以看出已经训练的 5 个 step,和 Checkpoint 的文件名 `llama2_13b_rank_2-5_1.ckpt` 中的 5 是一致的。 - 从日志中输出的副本关系 `[0, 4]`、`[3, 7]`、 `[2, 6]` 和 `[1, 5]` 得知: + 从日志中输出的副本关系 `[0, 4]`、`[3, 7]`、`[2, 6]` 和 `[1, 5]` 得知: - rank 0 和 rank 4 权重存在副本关系,临终的 Checkpoint 保存在 rank 0 - rank 3 和 rank 7 权重存在副本关系,临终的 Checkpoint 保存在 rank 3 @@ -338,4 +338,4 @@ YAML配置包含两部分:临终 CKPT 的保存及恢复配置和卡间副本 } ``` - "2"表示对应训练步数的global step,后面列表记录的则是恢复前后训练的global norm。 \ No newline at end of file + "2"表示对应训练步数的global step,后面列表记录的则是恢复前后训练的global norm。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/load_huggingface_config.md b/docs/mindformers/docs/source_zh_cn/feature/load_huggingface_config.md index b85cb1efc1..f5322fd197 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/load_huggingface_config.md +++ b/docs/mindformers/docs/source_zh_cn/feature/load_huggingface_config.md @@ -18,7 +18,7 @@ ### 准备 Hugging Face 模型配置 -以 Qwen3 为例,从 Hugging Face 官网下载模型的配置文件(包括 config.json和generation.json)存放在本地文件夹`./local/qwen3`。 +以 Qwen3 为例,从 Hugging Face 官网下载模型的配置文件(包括 config.json和generation.json),存放在本地文件夹`./local/qwen3`。 ### 准备 yaml 配置文件 @@ -38,7 +38,7 @@ model: params_dtype: "bfloat16" ``` -若不需要复用 Hugging Face 模型配置,MindSpore Transformers 需要在 model_config 和 generation 配置所有所需字段,其中 model_type 和 architectures 为必须配置字段。 +若不需要复用 Hugging Face 模型配置,MindSpore Transformers 需要在 model_config 和 generation 配置所有所需字段。其中 model_type 和 architectures 为必须配置字段。 ```yaml model: @@ -63,8 +63,8 @@ generation_config: ## 常见问题FAQ -- 若不加载 Hugging Face 模型配置, model_type 和 architectures 为必须配置字段,该如何配置? +- 若不加载 Hugging Face 模型配置,model_type 和 architectures 为必须配置字段,该如何配置? 以 Qwen3 为例: - 注册其模型配置类 Qwen3Config 时,若传入参数 search_names 非空,则 model_type 只需要配置为 search_names 的值即可;若未传入参数 search_names,则 model_type 配置成 Qwen3Config 即可;architectures 配置成对应的模型类名称 Qwen3ForCausalLM 即可。 + 注册其模型配置类 Qwen3Config 时,若传入参数 search_names 非空,则 model_type 只需要配置为 search_names 的值即可;若未传入参数 search_names,则 model_type 配置成 Qwen3Config 即可。architectures 配置成对应的模型类名称 Qwen3ForCausalLM 即可。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/logging.md b/docs/mindformers/docs/source_zh_cn/feature/logging.md index 36ba5887a7..6e93c22c4e 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/logging.md +++ b/docs/mindformers/docs/source_zh_cn/feature/logging.md @@ -19,7 +19,7 @@ MindSpore Transformers 会将模型的训练配置、训练步数、Loss、吞 | log | 以 `rank_{i}` 文件夹来划分保存每一张卡的日志信息。( `i` 对应为训练任务所用的 NPU 卡号)
每一个 `rank_{i}` 文件夹底下将包括 `info.log` 和 `error.log` 来分别记录训练时输出的 INFO 级别和 ERROR 级别的信息。单个日志默认大小为50M,且最多有5个日志备份。 | | msrun_log | 以 `worker_{i}.log` 来记录每一张卡的训练日志(包括报错信息), `scheduler.log` 则记录了 msrun 的启动信息。
一般更常通过此文件夹查看训练日志信息。 | -以一个使用 `msrun` 当时启动的 8 卡任务为例,具体日志结构如下所示: +以一个使用 `msrun` 方式启动的 8 卡任务为例,具体日志结构如下所示: ```text output @@ -33,9 +33,9 @@ output └── error.log # 记录 7 号卡的报错信息 └── msrun_log ├── scheduler.log # 记录各张卡之间的通信信息 - ├── worker_0.log # 记录 0 号卡的训练及信息 + ├── worker_0.log # 记录 0 号卡的训练信息 ├── ... - └── worker_7.log # 记录 7 号卡的训练及信息 + └── worker_7.log # 记录 7 号卡的训练信息 ``` ### 配置与使用 @@ -62,4 +62,4 @@ output_dir: './output' # path to save logs/checkpoint/strategy 如果模型训练需要用到多台服务器,使用[分布式任务拉起脚本 msrun_launcher.sh](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/start_tasks.html?highlight=%E6%97%A5%E5%BF%97#%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E6%8B%89%E8%B5%B7%E8%84%9A%E6%9C%AC) 来启动分布式训练任务。 -在设置了共享存储的情况下,还可以在启动脚本中指定入参 `LOG_DIR` 来指定 Worker 以及 Scheduler 的日志输出路径,将所有机器节点的日志都输出到一个路径下,方便统一观察。 \ No newline at end of file +在设置了共享存储的情况下,还可以在启动脚本中指定入参 `LOG_DIR` 来指定 Worker 以及 Scheduler 的日志输出路径,将所有机器节点的日志都输出到一个路径下,方便统一观察。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/memory_optimization.md b/docs/mindformers/docs/source_zh_cn/feature/memory_optimization.md index e171d83849..06afbb52ec 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/memory_optimization.md +++ b/docs/mindformers/docs/source_zh_cn/feature/memory_optimization.md @@ -6,7 +6,7 @@ ### 概述 -重计算可以显著降低训练时的激活内存,但会额外增加一些计算。关于重计算的原理和框架测能力可参考 [MindSpore 教程文档:重计算](https://www.mindspore.cn/tutorials/zh-CN/master/parallel/recompute.html)。 +重计算可以显著降低训练时的激活内存,但会额外增加一些计算。关于重计算的原理和框架侧能力可参考 [MindSpore 教程文档:重计算](https://www.mindspore.cn/tutorials/zh-CN/master/parallel/recompute.html)。 ### 配置与使用 @@ -26,7 +26,7 @@ recompute_config: recompute_slice_activation: True ``` -如果需要对选择重计算配置到某几个特定层进行,可以使用 tuple 的方式进行配置。 +如果需要对某几个特定层进行选择重计算配置,可以使用 tuple 的方式进行配置。 例如:一个网络有48层, `pp_interleave_num` 为 `2` , `pipeline_stage` 为 `5` ,offset设为 `[[0,1,1,1,1],[1,1,1,1,0]]` ,重计算配置如下: @@ -64,7 +64,7 @@ INFO - Formative select_comm_recompute: {'ffn_norm\.norm': [[4, 5, 5, 5, 5], [5, | recompute | (按层)完全重计算。 | 可配置为 bool,整数型的 list 或 tuple,或二维 list 或 tuple。
配置为 bool 类型时,对所有层开启或关闭完全重计算;
配置为整数型 list 或 tuple 时,代表每个 `pipeline_stage` 中有多少层开启完全重计算, `pp_interleave_num > 1` 时开启的重计算层数会均匀分配到各 interleave 中;
配置为整数型二维 list 或 tuple 时,代表每个 mini stage 中有多少层开启完全重计算。 | | select_recompute | (按算子)选择重计算。 | 可配置为 bool,整数型的 list 或 tuple,或二维 list 或 tuple,字符串的 list 或 tuple,以及 dict。
默认选择重计算算子为 `['feed_forward\\.mul', 'feed_forward\\.w1\\.activation\\.silu']` 。
配置为 bool 类型时,对所有层开启或关闭默认算子的选择重计算;
配置为整数型 list 或 tuple 时,代表每个 `pipeline_stage` 中有多少层开启默认算子的选择重计算, `pp_interleave_num > 1` 时开启的选择重计算层数会均匀分配到各 interleave 中;
配置为整数型二维 list 或 tuple 时,代表每个 mini stage 中有多少层开启默认算子的选择重计算。
配置为字符串 list 或 tuple 时,代表对哪些算子开启选择重计算,算子名通过正则表达式匹配,层级关系通过 `'\\.'` 分割;
配置为 dict 时,key 值对应算子名,value 值对应选择重计算的配置方式,这种配法可以对每个算子精细配置重计算策略。 | | select_comm_recompute | (按算子)选择通信重计算。 | 配置方式与 **select_recompute** 相同,默认选择通信重计算算子为 `['.*\\.norm']` 。一般仅对 layer_norm 或类似层进行配置。 | -| parallel_optimizer_comm_recompute | 优化器并行通信重计算。在优化器并行下,是否重计算 AllGather 通信。 | (bool, 可选) - 开启后在自动并行或半自动并行模式下,指定 Cell 内部由优化器并行引入的 AllGather 通信是否重计算。 默认值: `False` 。 | +| parallel_optimizer_comm_recompute | 优化器并行通信重计算。在优化器并行下,是否重计算 AllGather 通信。 | (bool, 可选) - 开启后在自动并行或半自动并行模式下,指定 Cell 内部由优化器并行引入的 AllGather 通信是否重计算。默认值: `False` 。 | | mp_comm_recompute | 模型并行通信重计算,在模型并行下,是否重计算通信算子。 | (bool, 可选) - 开启后在自动并行或半自动并行模式下,指定 Cell 内部由模型并行引入的通信操作是否重计算。默认值: `True` 。 | | recompute_slice_activation | 切片重计算,是否对将保留在内存中的 Cell 输出进行切片。 | (bool, 可选) - 默认值: `False` 。 | @@ -72,9 +72,9 @@ INFO - Formative select_comm_recompute: {'ffn_norm\.norm': [[4, 5, 5, 5, 5], [5, ### 概述 -在传统大模型训练任务中,计算卡的显存资源常常成为训练瓶颈,采用更大规模的模型并行(model parallel, mp)和流水线并行(pipeline parallel, pp)切分策略,虽然能一定程度上缓解单张计算卡的显存压力,但需要更大规模的集群资源,且引入过多的通信会极大地降低模型的MFU。在集群资源有限的情况下,重计算是另一个缓解内存压力的有效手段,其通过放弃存储正向传播阶段的激活值,并在梯度反向回传时重新计算所需激活值,来降低激活值的显存占用,由于重计算需引入额外的计算开销,因此该方法同样会显著降低模型训练的MFU(Model FLOPs Utilization)。 +在传统大模型训练任务中,计算卡的显存资源常常成为训练瓶颈。采用更大规模的模型并行(model parallel, mp)和流水线并行(pipeline parallel, pp)切分策略,虽然能一定程度上缓解单张计算卡的显存压力,但需要更大规模的集群资源,且引入过多的通信会极大地降低模型的MFU。在集群资源有限的情况下,重计算是另一个缓解内存压力的有效手段,其通过放弃存储正向传播阶段的激活值,并在梯度反向回传时重新计算所需激活值,来降低激活值的显存占用。由于重计算需引入额外的计算开销,因此该方法同样会显著降低模型训练的MFU(Model FLOPs Utilization)。 -在此背景下,细粒度激活值SWAP技术可以提供第三种降低内存占用的有效手段,且拥有更大的性能优势。具体地,激活值SWAP技术在模型正向传播阶段,将需要长期存储的激活值卸载至host侧,并在反向传播阶段,使用该激活值时,提前将其预取回device侧。资源使用方面,激活值SWAP技术使用D2H/H2D带宽,可以在训练阶段与计算任务、D2D通信任务并发,实现对内存搬运开销的掩盖。 +在此背景下,细粒度激活值SWAP技术可以提供第三种降低内存占用的有效手段,且拥有更大的性能优势。具体地,激活值SWAP技术在模型正向传播阶段,将需要长期存储的激活值卸载至host侧,并在反向传播阶段使用该激活值时,提前将其预取回device侧。资源使用方面,激活值SWAP技术使用D2H/H2D带宽,可以在训练阶段与计算任务、D2D通信任务并发,实现对内存搬运开销的掩盖。 细粒度激活值SWAP技术具备较高的使用灵活度。大模型训练的正向传播阶段,将产生数据量大小不同的若干激活值,用户可按需选择特定的激活值进行SWAP,且选择激活值的粒度为算子级。当模型类型或规格改变时,用户可灵活调整对应的SWAP策略,以追求最低的内存开销和最优的性能。 @@ -209,7 +209,7 @@ bash ./scripts/msrun_launcher.sh "run_mindformer.py \ 8 8 8118 0 output/msrun False 300 ``` -训练完毕后执行命令`cat output/msrun/worker_0.log | grep 'Set layer swap at'`查看默认SWAP策略的执行情况: +训练完毕后执行命令`cat output/msrun/worker_0.log | grep 'Set layer swap at'`查看选择特定层使能SWAP策略的执行情况: ```text -INFO - Set layer swap at layer 0 and value is: 20 @@ -261,7 +261,7 @@ bash ./scripts/msrun_launcher.sh "run_mindformer.py \ 8 8 8118 0 output/msrun False 300 ``` -训练完毕后执行命令`cat output/msrun/worker_0.log | grep 'Set op_swap at layer'`查看默认SWAP策略的执行情况: +训练完毕后执行命令`cat output/msrun/worker_0.log | grep 'Set op_swap at layer'`查看选择特定层的特定算子使能SWAP策略的执行情况: ```text -INFO - Set op_swap at layer 0: .attention, value=20 @@ -316,7 +316,7 @@ bash ./scripts/msrun_launcher.sh "run_mindformer.py \ 8 8 8118 0 output/msrun False 300 ``` -训练完毕后执行命令`cat output/msrun/worker_0.log | grep 'Set op_swap at layer' -C 1`查看默认SWAP策略的执行情况: +训练完毕后执行命令`cat output/msrun/worker_0.log | grep 'Set op_swap at layer' -C 1`查看细粒度激活值SWAP与重计算混用的执行情况: ```text -INFO - Set select recompute at layer 0: feed_forward @@ -327,4 +327,4 @@ bash ./scripts/msrun_launcher.sh "run_mindformer.py \ -INFO - Set op_swap at layer 3: .attention, value=10 ``` -细粒度激活值SWAP与重计算混用成功。 \ No newline at end of file +细粒度激活值SWAP与重计算混用成功。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/monitor.md b/docs/mindformers/docs/source_zh_cn/feature/monitor.md index 2667cb4cf8..5aa787fe14 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/monitor.md +++ b/docs/mindformers/docs/source_zh_cn/feature/monitor.md @@ -48,7 +48,7 @@ callbacks: |--------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------| | monitor_config.monitor_on | 设置是否开启监控。默认为`False`,此时以下所有参数不生效 | bool | | monitor_config.dump_path | 设置训练过程中`local_norm`、`device_local_norm`、`local_loss`、`device_local_loss`指标文件的保存路径。未设置或设置为`null`时取默认值'./dump' | str | -| monitor_config.target | 设置指标`优化器状态`和`local_norm`所监控的的目标参数的名称(片段),可为正则表达式。未设置或设置为`null`时取默认值['.*'],即指定所有参数 | list[str] | +| monitor_config.target | 设置指标`优化器状态`和`local_norm`所监控的目标参数的名称(片段),可为正则表达式。未设置或设置为`null`时取默认值['.*'],即指定所有参数 | list[str] | | monitor_config.invert | 设置反选`monitor_config.target`所指定的参数。默认为`False` | bool | | monitor_config.step_interval | 设置记录指标的频率。默认为1,即每个step记录一次 | int | | monitor_config.local_loss_format | 设置指标`local_loss`的记录形式 | str或list[str] | @@ -57,17 +57,17 @@ callbacks: | monitor_config.device_local_norm_format | 设置指标`device_local_norm`的记录形式 | str或list[str] | | monitor_config.optimizer_state_format | 设置指标`optimizer_state`的记录形式 | str或list[str] | | monitor_config.weight_state_format | 设置指标`权重L2-norm`的记录形式 | str或list[str] | -| monitor_config.throughput_baseline | 设置指标`吞吐量线性度`的基线值,需要为正数。会同时写入到 Tensorboard 和日志。未设置时默认为`null`,表示不监控该指标 | int或float | +| monitor_config.throughput_baseline | 设置指标`吞吐量线性度`的基线值,需要为正数。会同时写入到 TensorBoard 和日志。未设置时默认为`null`,表示不监控该指标 | int或float | | monitor_config.print_struct | 设置是否打印模型的全部可训练参数名。若为`True`,则会在第一个step开始时打印所有可训练参数的名称,并在step结束后退出训练。默认为`False` | bool | | monitor_config.check_for_global_norm | 设置是否开启指标`global norm`的异常监测。默认为`False` | bool | -| monitor_config.global_norm_spike_threshold | 设置指标`global norm`的相对阈值,大于该值即判定为异常。默认值为`3.0` | float | +| monitor_config.global_norm_spike_threshold | 设置指标`global norm`的相对阈值,大于该值即判定为异常。默认值为`1.0` | float | | monitor_config.global_norm_spike_count_threshold | 设置连续异常指标`global norm`累计的次数,当次数达到该阈值则触发异常中断,终止训练。默认值为`10` | int | -上述 xxx_format 形式的参数的可选值为字符串'tensorboard'和'log'(分别表示写入 Tensorboard 和写入日志),或由两者组成的列表,或`null`。未设置时均默认为`null`,表示不监控对应指标。 +上述 xxx_format 形式的参数的可选值为字符串'tensorboard'和'log'(分别表示写入 TensorBoard 和写入日志),或由两者组成的列表,或`null`。未设置时均默认为`null`,表示不监控对应指标。 -**注意**:当前开启对`优化器状态`和`权重L2 norm`指标的监控时会极大增加训练进程的耗时,请根据需要谨慎选择;`monitor_config.dump_path`路径下对应的"rank_x"目录将被清空,请确保所设置路径下没有需要保留的文件。 +**注意**:当前开启对`优化器状态`和`权重L2 norm`指标的监控时会极大增加训练进程的耗时,请根据需要谨慎选择。`monitor_config.dump_path`路径下对应的"rank_x"目录将被清空,请确保所设置路径下没有需要保留的文件。 -| tensoraboard字段参数名称 | 说明 | 类型 | +| tensorboard字段参数名称 | 说明 | 类型 | |--------------------------------------------|---------------------------------------------------------|------| | tensorboard.tensorboard_dir | 设置 TensorBoard 事件文件的保存路径 | str | | tensorboard.tensorboard_queue_size | 设置采集队列的最大缓存值,超过该值便会写入事件文件,默认值为10 | int | @@ -98,9 +98,9 @@ callbacks: ## 查看训练数据 -进行上述配置后,训练期间将会在路径 `./worker/tensorboard/rank_{id}` 下保存每张卡的事件文件,其中 `{id}` 为每张卡对应的的rank号。事件文件以 `events.*` 命名。文件中包含 `scalars` 和 `text` 数据,其中 `scalars` 为训练过程中关键指标的标量,如学习率、损失等; `text` 为训练任务所有配置的文本数据,如并行配置、数据集配置等。此外,根据具体配置,部分指标将在日志中进行展示。 +进行上述配置后,训练期间将会在路径 `./worker/tensorboard/rank_{id}` 下保存每张卡的事件文件,其中 `{id}` 为每张卡对应的rank号。事件文件以 `events.*` 命名。文件中包含 `scalars` 和 `text` 数据,其中 `scalars` 为训练过程中关键指标的标量,如学习率、损失等; `text` 为训练任务所有配置的文本数据,如并行配置、数据集配置等。此外,根据具体配置,部分指标将在日志中进行展示。 -使用以下命令可以启动 Tensorboard Web 可视化服务: +使用以下命令可以启动 TensorBoard Web 可视化服务: ```bash tensorboard --logdir=./worker/tensorboard/ --host=0.0.0.0 --port=6006 @@ -140,7 +140,7 @@ TensorBoard 2.18.0 at http://0.0.0.0:6006/ (Press CTRL+C to quit) | model-flops-throughput-per-npu | 模型算力吞吐量,单位为TFLOPS/npu(万亿次浮点数运算每秒每卡) | | B-samples-per-day | 集群数据吞吐量,单位为B samples/day(十亿样本每天),记录需要设置`log_timers_to_tensorboard`为`True` | -在 Tensorboard 的 SCALARS 页面中,上述指标(假设名为 `scalar_name`)除了最后两个,其他都存在 `scalar_name` 和 `scalar_name-vs-samples` 两个下拉标签页。其中 `scalar_name` 下展示了该标量随训练迭代步数进行变化的折线图; `scalar_name-vs-samples` 下展示了该标量随样本数进行变化的折线图。如下图所示为学习率`learning-rate`的曲线图示例: +在 TensorBoard 的 SCALARS 页面中,上述指标(假设名为 `scalar_name`)除了最后两个,其他都存在 `scalar_name` 和 `scalar_name-vs-samples` 两个下拉标签页。其中 `scalar_name` 下展示了该标量随训练迭代步数进行变化的折线图; `scalar_name-vs-samples` 下展示了该标量随样本数进行变化的折线图。如下图所示为学习率`learning-rate`的曲线图示例: ![/tensorboard_scalar](./images/tensorboard_scalar.png) @@ -169,7 +169,7 @@ TensorBoard 2.18.0 at http://0.0.0.0:6006/ (Press CTRL+C to quit) #### 指标可视化样例 -根据具体的设置,上述指标将在 Tensorboard 或日志中进行展示,如下: +根据具体的设置,上述指标将在 TensorBoard 或日志中进行展示,如下: **日志效果示例** @@ -262,4 +262,4 @@ expert_load(图中为3个MoE层的各自16个专家的负载变化曲线): > 2. 用户在训练配置文件 `yaml` 中设置的配置参数; > 3. 训练默认的配置参数。 > -> 可配置的所有参数请参考[配置文件说明](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/configuration.html)。 \ No newline at end of file +> 可配置的所有参数请参考[配置文件说明](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/configuration.html)。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/other_training_features.md b/docs/mindformers/docs/source_zh_cn/feature/other_training_features.md index 5be5ed2529..a2b9a21fd1 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/other_training_features.md +++ b/docs/mindformers/docs/source_zh_cn/feature/other_training_features.md @@ -2,7 +2,7 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindformers/docs/source_zh_cn/feature/other_training_features.md) -在大规模的深度学习模型训练中,会遇到诸如:内存限制、计算资源的有效利用、分布式训练中的同步问题等挑战,需要使用训练优化算法来提高训练效率、加速收敛速度以及改善最终模型性能。 +在大规模的深度学习模型训练中,会遇到诸多挑战,如:内存限制、计算资源的有效利用、分布式训练中的同步问题等,需要使用训练优化算法来提高训练效率、加速收敛速度以及改善最终模型性能。 MindSpore Transformers 提供了梯度累积、梯度裁剪等训练优化算法,可供开发者进行训练时使用。 @@ -10,7 +10,7 @@ MindSpore Transformers 提供了梯度累积、梯度裁剪等训练优化算法 ### 概述 -MindSpore 在 2.1.1 之后的版本中增加了 `mindspore.nn.wrap.cell_wrapper.GradAccumulationCell` 这一梯度累积实现接口,通过拆分 MiniBatch 的形式提供了梯度累加的能力,MindSpore Transformers 将其封装进了统一的训练流程,通过 yaml 配置进行使能。关于梯度累积的原理和框架测的能力可以参考 [MindSpore 文档:梯度累加](https://www.mindspore.cn/tutorials/zh-CN/master/parallel/distributed_gradient_accumulation.html)。 +MindSpore 在 2.1.1 之后的版本中增加了 `mindspore.nn.wrap.cell_wrapper.GradAccumulationCell` 这一梯度累积实现接口,通过拆分 MiniBatch 的形式提供了梯度累加的能力。MindSpore Transformers 将其封装进了统一的训练流程,通过 yaml 配置进行使能。关于梯度累积的原理和框架侧的能力可以参考 [MindSpore 文档:梯度累加](https://www.mindspore.cn/tutorials/zh-CN/master/parallel/distributed_gradient_accumulation.html)。 ### 配置与使用 @@ -80,7 +80,7 @@ runner_wrapper: 针对MoE单卡多专家计算,存在细碎的专家计算操作与通信,通过GroupedMatmul算子对多专家计算进行合并,提升MoE单卡多专家训练性能。通过调用GroupedMatmul算子,对多个专家计算进行融合达到加速效果。 -`token_dispatcher`可以根据根据计算后的路由策略,将不同的 token(输入的子词/子单元)路由分派给不同的专家(Expert)、计算单元或分支进行独立处理,该模块主要有`all_to_all`通信构成。 +`token_dispatcher`可以根据计算后的路由策略,将不同的 token(输入的子词/子单元)路由分派给不同的专家(Expert)、计算单元或分支进行独立处理。该模块主要由`all_to_all`通信构成。 ### 配置与使用 @@ -104,7 +104,7 @@ moe_config: ValueError: For primitive[Reshape], the accumulate of x_shape must be equal to out_shape, but got x_shape: [const vector]{}, and output_shape: [const vector]{0, hiddensize} ``` -此时,可以配置enable_gmm_safe_tokens: True,保证每个专家至少分配1个tokens,避免程序报错。 +此时,可以配置`enable_gmm_safe_tokens: True`,保证每个专家至少分配1个tokens,避免程序报错。 ```yaml moe_config: @@ -162,7 +162,7 @@ callback: #### YAML 参数配置 -用户需要使用rotary_position_embedding融合算子,需在配置文件中的 `model_config` 项下配置 `use_fused_rope` 项,设置为`True`,示例: +用户需要使用rotary_position_embedding融合算子,需在配置文件中的 `model_config` 项下配置 `use_fused_rope` 项,设置为`True`。示例: ```yaml model_config: @@ -182,7 +182,7 @@ model_config: #### YAML 参数配置 -用户需要使用SwiGLU融合算子,需在配置文件中的 `model_config` 项下配置 `use_fused_swiglu` 项,设置为`True`,示例: +用户需要使用SwiGLU融合算子,需在配置文件中的 `model_config` 项下配置 `use_fused_swiglu` 项,设置为`True`。示例: ```yaml model_config: diff --git a/docs/mindformers/docs/source_zh_cn/feature/parallel_training.md b/docs/mindformers/docs/source_zh_cn/feature/parallel_training.md index 8c7c1a108a..c031969106 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/parallel_training.md +++ b/docs/mindformers/docs/source_zh_cn/feature/parallel_training.md @@ -4,7 +4,7 @@ ## 并行模式与应用场景 -在大规模深度学习模型的训练中,尤其是面对庞大的数据集和复杂的模型架构时,单一设备的算力往往不足以应对这种需求。为了解决这个问题,MindSpore 提供了一套强大的并行策略配置,通过灵活的并行策略可以大幅提升训练效率,并降低计算资源的消耗。 +在大规模深度学习模型的训练中,尤其是面对庞大的数据集和复杂的模型架构时,单一设备的算力往往不足以应对这种需求。为了解决这个问题,MindSpore 提供了一套强大的并行策略配置,通过灵活的并行策略可以大幅提升训练效率、降低计算资源的消耗。 MindSpore 的并行模式包括数据并行、模型并行、流水线并行、序列并行等。这些模式可以单独使用,也可以结合在一起,形成复杂的混合并行策略,以应对不同的模型训练需求。通过合理配置这些并行策略,开发者可以有效利用多设备的计算资源,极大地提升训练效率。 @@ -25,7 +25,7 @@ MindSpore Transformers 支持多种并行特性,开发者可以利用这些特 ### 数据并行 -数据并行是每个设备(worker)都持有一份完整的模型权重,將输入的数据分片并分配到不同的计算设备上并行处理,并基于分配到的局部数据进行前向传播和反向传播计算,在反向传播完成后,所有设备上计算的梯度会通过全局规约(AllReduce)操作进行聚合,确保各设备上的模型参数保持一致性。多路数据同时训练时,仅在梯度更新进行一次通信,性能最优,但内存不会减少。数据并行适用于数据量大且模型规模较小的场景。关于数据并行的框架侧实现,参见 [MindSpore 数据并行](https://www.mindspore.cn/docs/zh-CN/master/features/parallel/data_parallel.html) 的具体内容。 +数据并行是每个设备(worker)都持有一份完整的模型权重,将输入的数据分片并分配到不同的计算设备上并行处理。各设备基于分配到的局部数据进行前向传播和反向传播计算,在反向传播完成后,所有设备上计算的梯度会通过全局规约(AllReduce)操作进行聚合,确保各设备上的模型参数保持一致性。多路数据同时训练时,仅在梯度更新进行一次通信,性能最优,但内存不会减少。数据并行适用于数据量大且模型规模较小的场景。关于数据并行的框架侧实现,参见 [MindSpore 数据并行](https://www.mindspore.cn/docs/zh-CN/master/features/parallel/data_parallel.html) 的具体内容。 MindSpore Transformers已支持数据并行方案,可通过以下配置项使能: @@ -44,7 +44,7 @@ parallel_config: ### 模型并行 -数据并行训练中,每个设备均存储全部模型参数,显存占用较高,在模型规模较大时可能存在瓶颈。模型并行将整个模型切分并分布在一个设备阵列上,每个设备仅维护模型的一部分权重,网络并行计算各自部分并在LayerNorm等位置进行通信,最省内存,但通信量较大。模型并行适用于模型规模较大,单个设备无法容纳整个模型的场景。关于模型并行的框架侧实现,参见 [MindSpore 模型并行](https://www.mindspore.cn/docs/zh-CN/master/features/parallel/operator_parallel.html) 的具体内容。 +数据并行训练中,每个设备均存储全部模型参数,显存占用较高,在模型规模较大时可能存在瓶颈。模型并行将整个模型切分并分布在一个设备阵列上,每个设备仅维护模型的一部分权重。网络并行计算各自部分,并在LayerNorm等位置进行通信,最省内存,但通信量较大。模型并行适用于模型规模较大,单个设备无法容纳整个模型的场景。关于模型并行的框架侧实现,参见 [MindSpore 模型并行](https://www.mindspore.cn/docs/zh-CN/master/features/parallel/operator_parallel.html) 的具体内容。 MindSpore Transformers已支持模型并行方案,可通过以下配置项使能: @@ -88,7 +88,7 @@ parallel_config: > 本功能已废弃,将在后续版本中下架,可使用其他序列并行方法。如有任何问题或建议,请通过 **[社区Issue](https://gitee.com/mindspore/mindformers/issues/new)** 提交反馈,感谢您的理解和支持! -长序列并行算法 Ring Attention 是当前业界长序列并行的代表性技术,用于解决长序列训练时的内存开销问题,同时实现计算与通信掩盖。Ring Attention 算法利用 Attention 的分块计算性质,当序列并行度为 N 时,将 Q,K,V 分别切分为 N 个子块,每张卡分别调用 Flash Attention 算子来计算本地 QKV 子块的 Attention 结果。由于每张卡只需要计算切分后 QKV 子块的 Attention,其内存占用大幅降低。Ring Attention 在做 FA 计算的同时采用环形通信向相邻卡收集和发送子块,实现计算与通信的最大化掩盖,保障了长序列并行的整体性能。 +长序列并行算法 Ring Attention 是当前业界长序列并行的代表性技术,用于解决长序列训练时的内存开销问题,同时实现计算与通信掩盖。Ring Attention 算法利用 Attention 的分块计算性质,当序列并行度为 N 时,将 Q、K、V 分别切分为 N 个子块,每张卡分别调用 Flash Attention 算子来计算本地 QKV 子块的 Attention 结果。由于每张卡只需要计算切分后 QKV 子块的 Attention,其内存占用大幅降低。Ring Attention 在做 FA 计算的同时采用环形通信向相邻卡收集和发送子块,实现计算与通信的最大化掩盖,保障了长序列并行的整体性能。 MindSpore Transformers已支持配置Ring Attention序列并行方案,可通过以下配置项使能: @@ -205,7 +205,7 @@ parallel_config: 在进行数据并行训练时,模型的参数更新部分在各卡间存在冗余计算。通过优化器并行,可以将优化器的计算量分散到数据并行维度的卡上,在大规模网络上有效减少内存消耗并提升网络性能。关于优化器并行的框架侧实现,参见 [MindSpore 优化器并行](https://www.mindspore.cn/docs/zh-CN/master/features/parallel/optimizer_parallel.html) 的具体内容。 - MindSpore Transformers已支持优化器并行方案,可通过以下配置项使能: +MindSpore Transformers已支持优化器并行方案,可通过以下配置项使能: ```yaml parallel: @@ -224,7 +224,7 @@ parallel: 多副本并行用于在多个副本之间实现精细的并行控制,优化性能和资源利用率,适合大规格模型的高效训练。关于多副本并行的框架侧实现,参见 [MindSpore 多副本并行](https://www.mindspore.cn/docs/zh-CN/master/features/parallel/pipeline_parallel.html#mindspore%E4%B8%AD%E7%9A%84interleaved-pipeline%E8%B0%83%E5%BA%A6) 的具体内容。 - MindSpore Transformers已支持多副本并行方案,可通过以下配置项使能: +MindSpore Transformers已支持多副本并行方案,可通过以下配置项使能: ```yaml model_config: diff --git a/docs/mindformers/docs/source_zh_cn/feature/pma_fused_checkpoint.md b/docs/mindformers/docs/source_zh_cn/feature/pma_fused_checkpoint.md index 68071beb95..0186f2ff83 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/pma_fused_checkpoint.md +++ b/docs/mindformers/docs/source_zh_cn/feature/pma_fused_checkpoint.md @@ -12,7 +12,7 @@ EMA算法公式:$PMA_n = (1 - \alpha) \times PMA_{n-1} + \alpha \times W_n$ > EMA算法通过指数递减的方式分配权重,对最近的模型权重更为敏感,能够快速响应模型在训练后期的变化。 -SMA算法公式:$PMA_n = (W_1 + ... + Wn) / n$ +SMA算法公式:$PMA_n = (W_1 + ... + W_n) / n$ > SMA算法在所有模型权重上均匀分配权重,对待每个权重都一视同仁。 @@ -67,8 +67,8 @@ optimizer: | 参数名称 | 描述 | 类型 | 是否可选 | 取值范围 | |-----------------|---------------------------------------------------------------------|---------------------------------|------------|----------------| | type | 优化器类型,启用PMA特性需要设定为`PmaAdamW`。默认值为`AdamW`。 | String | 可选 | | -| betas | `moment1`、 `moment2` 的指数衰减率。每一个参数范围(0.0,1.0)。默认值为``(0.9, 0.999)`` 。 | Union[list(float), tuple(float)] | 可选 | (0.0,1.0) | -| eps | 将添加到分母中,以提高数值稳定性。必须大于0。默认值: ``1e-6`` 。 | float | 可选 | 正数 | +| betas | `moment1`、 `moment2` 的指数衰减率。每个参数范围为(0.0,1.0)。默认值为`(0.9, 0.999)` 。 | Union[list(float), tuple(float)] | 可选 | (0.0,1.0) | +| eps | 将添加到分母中,以提高数值稳定性。必须大于0。默认值为 `1e-6` 。 | float | 可选 | 正数 | | weight_decay | 设定优化器权重衰减系数。默认值为`0.0`。 | float | 可选 | | | fused_num | 设定`fused_num`个权重进行融合,根据融合算法将融合后的权重更新到网络参数中。默认值为`10`。 | int | 可选 | 正整数 | | interleave_step | 选取待融合权重的step间隔数,每`interleave_step`个step取一次权重作为候选权重进行融合。默认值为`1000`。 | int | 可选 | 正整数 | diff --git a/docs/mindformers/docs/source_zh_cn/feature/resume_training.md b/docs/mindformers/docs/source_zh_cn/feature/resume_training.md index 33655c5b17..08108c9c6b 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/resume_training.md +++ b/docs/mindformers/docs/source_zh_cn/feature/resume_training.md @@ -16,7 +16,7 @@ MindSpore Transformers支持**step级断点续训**功能,允许在训练中 | --------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------| | load_checkpoint | 断点续训时加载的权重路径。路径可以是文件夹路径(用于加载分布式权重),也可以是具体权重文件的路径。默认为空字符串,即不加载权重(断点续训时必填)。当配置的路径为空目录时,会退化为使用随机初始化权重进行预训练。| | resume_training | 断点续训开关,可设置为`True`或指定特定的权重文件名。为`True`时,系统会自动从上次中断处恢复训练。默认为`False`。 | -| load_ckpt_async | 是否将加载权重与模型编译的操作并行执行,不支持在线自动切分权重场景(auto_trans_ckpt=True),该场景下不生效。默认为False串行执行。
为`True`时,并行执行,减少总体拉起续训的耗时。 | +| load_ckpt_async | 是否将加载权重与模型编译的操作并行执行。不支持在线自动切分权重场景(auto_trans_ckpt=True),该场景下不生效。默认为False串行执行。
为`True`时,并行执行,减少总体拉起续训的耗时。 | 根据传入参数不同,可分为如下四种情况: @@ -55,7 +55,7 @@ MindSpore Transformers支持**step级断点续训**功能,允许在训练中 resume_training: True ``` - > 一旦目录为空目录,模型权重即会自动随机初始化。因此如果误设了一个非即将保存权重的空目录,会导致第二次拉起任务时训练从头开始。 + > 一旦目录为空目录,模型权重即会自动随机初始化。因此,如果误设了一个非即将保存权重的空目录,会导致第二次拉起任务时训练从头开始。 根据需要设置并行配置: diff --git a/docs/mindformers/docs/source_zh_cn/feature/safetensors.md b/docs/mindformers/docs/source_zh_cn/feature/safetensors.md index daa88b2346..9c96f16328 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/safetensors.md +++ b/docs/mindformers/docs/source_zh_cn/feature/safetensors.md @@ -5,7 +5,7 @@ ## 概述 Safetensors 是 Huggingface 推出的一种可靠、易移植的机器学习模型存储格式,用于安全地存储Tensor,而且存储速度较快(零拷贝)。 -本文主要介绍了safetensor的几种格式类型,以及MindSpore Transformers如何支持该格式权重的保存与加载,权重特性,权重的分布式切分与合并和权重格式转换,帮助用户更好更快地使用权重。 +本文主要介绍了safetensors的几种格式类型,以及MindSpore Transformers如何支持该格式权重的保存与加载、权重特性、权重的分布式切分与合并以及权重格式转换,帮助用户更好更快地使用权重。 ## 权重示例 @@ -22,7 +22,7 @@ Huggingface Safetensors示例目录结构: ```text qwen2_7b - └── hf_unified_safetenosrs + └── hf_unified_safetensors ├── model-00001-of-00004.safetensors ├── model-00002-of-00004.safetensors ├── model-00003-of-00004.safetensors @@ -34,7 +34,7 @@ MindSpore Safetensors示例目录结构: ```text qwen2_7b - └── ms_unified_safetenosrs + └── ms_unified_safetensors ├── model-00001-of-00004.safetensors ├── model-00002-of-00004.safetensors ├── model-00003-of-00004.safetensors @@ -54,7 +54,7 @@ Safetensors分布式权重可通过以下两种方式获取: ```text qwen2_7b - └── distributed_safetenosrs + └── distributed_safetensors ├── rank_0 └── qwen2_7b_rank_0.safetensors ├── rank_1 @@ -68,7 +68,7 @@ qwen2_7b ### 概述 -在深度学习模型的训练过程中,保存模型的权重是至关重要的一步。权重保存功能使得我们能够在训练的任意阶段存储模型的参数,以便用户在训练中断或完成后进行恢复、继续训练、评估或部署。同时还可以通过保存权重的方式,在不同环境下复现实验结果。 +在深度学习模型的训练过程中,保存模型的权重是至关重要的一步。权重保存功能使得我们能够在训练的任意阶段存储模型的参数,以便用户在训练中断或完成后进行恢复、继续训练、评估或部署。同时,还可以通过保存权重的方式,在不同环境下复现实验结果。 目前,MindSpore Transformers 支持 [safetensors](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/safetensors.html) 格式的权重文件读取和保存。 @@ -164,7 +164,7 @@ MindSpore Transformers支持训练、推理、续训在单卡多卡全场景下 | 参数名称 | 说明 | | ---------------- | ------------------------------------------------------------ | -| load_checkpoint | 预加载权重的文件夹路径。
- 如果是完整权重,填写切片/单个权重文件所在文件夹路径。
注:支持Huggingface safetensor权重加载(当前仅支持Llama系列模型)。在线加载过程中,会保存一份转换后的MindSpore safetensor权重文件至`/output/ms_safetensors`下。
- 如果是分布式权重,需按照`model_dir/rank_x/xxx.safetensor`格式存放,文件夹路径填写为`model_dir`。 | +| load_checkpoint | 预加载权重的文件夹路径。
- 如果是完整权重,填写切片/单个权重文件所在文件夹路径。
注:支持Huggingface safetensors权重加载(当前仅支持Llama系列模型)。在线加载过程中,会保存一份转换后的MindSpore safetensors权重文件至`/output/ms_safetensors`下。
- 如果是分布式权重,需按照`model_dir/rank_x/xxx.safetensors`格式存放,文件夹路径填写为`model_dir`。 | | load_ckpt_format | 加载的模型权重的格式,可选`ckpt`、`safetensors`,默认为`ckpt`。
加载权重为`safetensors`格式时,需配套修改此配置为`safetensors`。 | | use_parallel | 是否并行加载。 | | auto_trans_ckpt | 是否开启在线切分功能。
- 如果加载权重是完整权重:
a. `use_parallel: True`时,判断为分布式加载,需同步设置`auto_trans_ckpt: True`,开启在线切分功能。
b. `use_parallel: False`时,判断为单卡加载,需同步设置`auto_trans_ckpt: False`,关闭在线切分功能。
- 如果加载权重是分布式权重:
a. 不改变原有切分策略,需设置`auto_trans_ckpt: False`,直接按原先切分策略直接加载。
b. 改变原有切分策略,需设置`auto_trans_ckpt: True` 并配置`src_strategy_path_or_dir`为原有切分策略文件路径。
任务拉起时,会将权重在线合并为完整权重,并依据配置文件中设定的并行策略进行切分与加载。在线合并的完整权重会保存在当前目录`/output/unified_checkpoint`文件下。 | @@ -175,7 +175,7 @@ MindSpore Transformers支持训练、推理、续训在单卡多卡全场景下 ```yaml # 配置文件 -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # 加载完整权重文件路径 +load_checkpoint: '/qwen2_7b/unified_safetensors' # 加载完整权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: False # 完整权重+单卡加载时需关闭此配置项 use_parallel: False # 单卡加载 @@ -189,7 +189,7 @@ parallel_config: # 配置目标分布式策 ```yaml # 配置文件 -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # 加载完整权重文件路径 +load_checkpoint: '/qwen2_7b/unified_safetensors' # 加载完整权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: True # 完整权重+分布式加载时需打开此配置项,开启在线切分功能 use_parallel: True # 多卡加载 @@ -205,7 +205,7 @@ parallel_config: # 配置目标分布式策 ```yaml # 配置文件 -load_checkpoint: '/output/distributed_safetenosrs' # 加载源分布式权重文件路径 +load_checkpoint: '/output/distributed_safetensors' # 加载源分布式权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: False # 关闭在线切分功能 parallel_config: # 配置目标分布式策略 @@ -218,7 +218,7 @@ parallel_config: # 配置目标分布式策 ```yaml # 配置文件 -load_checkpoint: '/output/distributed_safetenosrs' # 加载源分布式权重文件路径 +load_checkpoint: '/output/distributed_safetensors' # 加载源分布式权重文件路径 src_strategy_path_or_dir: '/output/src_strategy' # 加载源策略文件,用于合并源分布式权重为完整权重 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: True # 开启在线切分功能 @@ -234,7 +234,7 @@ parallel_config: # 配置目标分布式策 #### 物理机多机多卡训练 -大规模模型通常需要通过多台服务器组成的集群进行训练。权重切分转换需要依赖编译完成后的目标切分策略文件,在这种多机多卡的场景下,如果服务器之间存在共享盘,生成的策略文件在同一个目录下,则可以使用自动转换功能;如果服务器之间无共享盘,需要手动复制策略文件后在进行转换功能。下面以两台服务器、16卡训练为例进行说明。 +大规模模型通常需要通过多台服务器组成的集群进行训练。权重切分转换需要依赖编译完成后的目标切分策略文件,在这种多机多卡的场景下,如果服务器之间存在共享盘,生成的策略文件在同一个目录下,则可以使用自动转换功能;如果服务器之间无共享盘,需要手动复制策略文件后再进行转换功能。下面以两台服务器、16卡训练为例进行说明。 **场景一:服务器之间有共享盘** @@ -244,7 +244,7 @@ parallel_config: # 配置目标分布式策 ```yaml output_dir: './output' # 策略文件会生成在./output/strategy下,用于权重在线切分 -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # 加载完整权重文件路径 +load_checkpoint: '/qwen2_7b/unified_safetensors' # 加载完整权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: True # 完整权重+分布式加载时需打开此配置项,开启在线切分功能 train_dataset: &train_dataset @@ -339,7 +339,7 @@ ms.parallel.merge_pipeline_strategys("/output/strategy", "/output/merged_strateg ```yaml output_dir: './output' # 确保每个节点下的./output/merged_strategy/都有合并完后的策略文件 -load_checkpoint: '/qwen2_7b/unified_safetenosrs' # 加载完整权重文件路径 +load_checkpoint: '/qwen2_7b/unified_safetensors' # 加载完整权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: True # 完整权重+分布式加载时需打开此配置项,开启在线切分功能 ``` @@ -351,7 +351,7 @@ auto_trans_ckpt: True # 完整权重+分布式加 因为分布式权重文件一般比策略文件大,分发操作更耗时,更推荐第一种方式。 ```yaml -load_checkpoint: '/output/distributed_safetenosrs' # 加载分布式权重文件路径 +load_checkpoint: '/output/distributed_safetensors' # 加载分布式权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: False # 分布式权重加载,关闭在线切分功能 ``` @@ -450,7 +450,7 @@ generation: ### 概述 -在当前的分布式训练和推理环境中,当用户需要改变分布式策略时,需要先将已有的分布式权重合并成完整权重后,再通过在线切分/离线切分的方式完成权重加载。为满足不同场景下的权重转换需求,可以参考下面脚本和接口,实现权重多卡合并单卡和单卡切分多卡的功能。 +在当前的分布式训练和推理环境中,当用户需要改变分布式策略时,需要先将已有的分布式权重合并成完整权重后,再通过在线切分或离线切分的方式完成权重加载。为满足不同场景下的权重转换需求,可以参考下面脚本和接口,实现权重多卡合并单卡和单卡切分多卡的功能。 ### 权重合并 @@ -561,14 +561,14 @@ ms.ckpt_to_safetensors("./ckpt_save_path/rank0/checkpoint_0.ckpt", "./output/saf #### 训练任务 -调整配置文件后启动MindSpore Transformers训练任务,通过以ckpt格式加载和safetensor格式保存的方法实现转换。 +调整配置文件后启动MindSpore Transformers训练任务,通过以ckpt格式加载和safetensors格式保存的方法实现转换。 ```yaml load_checkpoint: 'output/checkpoint/' # 加载权重文件路径 load_ckpt_format: 'ckpt' # 加载权重文件格式为ckpt callbacks: - type: CheckpointMonitor - checkpoint_format: 'safetensors' # 保存权重文件格式为safetensor + checkpoint_format: 'safetensors' # 保存权重文件格式为safetensors ``` ## 任务示例 @@ -579,7 +579,7 @@ callbacks: ```yaml # 修改后的配置 -load_checkpoint: '/qwen2.5_7b/hf_unified_safetenosrs' # 加载权重文件路径 +load_checkpoint: '/qwen2.5_7b/hf_unified_safetensors' # 加载权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: True # 完整权重时需打开此配置项,开启在线切分功能 parallel_config: # 配置目标分布式策略 @@ -595,7 +595,7 @@ callbacks: ```yaml # 修改后的配置 -load_checkpoint: '/qwen2.5_7b/distributed_safetenosrs' # 加载权重文件路径 +load_checkpoint: '/qwen2.5_7b/distributed_safetensors' # 加载权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 parallel_config: # 配置目标分布式策略 data_parallel: 2 @@ -627,7 +627,7 @@ bash scripts/msrun_launcher.sh "run_mindformer.py \ ```yaml # 修改后的配置 -load_checkpoint: '/qwen2.5_7b/hf_unified_safetenosrs' # 加载权重文件路径 +load_checkpoint: '/qwen2.5_7b/hf_unified_safetensors' # 加载权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 auto_trans_ckpt: True # 完整权重时需打开此配置项,开启在线切分功能 parallel_config: @@ -640,7 +640,7 @@ parallel_config: ```yaml # 修改后的配置 -load_checkpoint: '/qwen2.5_7b/distributed_safetenosrs' # 加载权重文件路径 +load_checkpoint: '/qwen2.5_7b/distributed_safetensors' # 加载权重文件路径 load_ckpt_format: 'safetensors' # 加载权重文件格式 parallel_config: data_parallel: 1 @@ -684,7 +684,7 @@ callbacks: checkpoint_format: safetensors # 保存权重文件格式 ``` -若分布式权重多卡续训且改变切分策略,需额外传入源切分策略文件路径,修改配置项后启动原训练任务: +若使用分布式权重多卡续训且改变切分策略,需额外传入源切分策略文件路径,修改配置项后启动原训练任务: ```yaml # 修改后的配置 @@ -703,4 +703,3 @@ callbacks: ``` 更多详情请参考:[断点续训介绍](https://www.mindspore.cn/mindformers/docs/zh-CN/master/feature/resume_training.html)。 - diff --git a/docs/mindformers/docs/source_zh_cn/feature/skip_data_and_ckpt_health_monitor.md b/docs/mindformers/docs/source_zh_cn/feature/skip_data_and_ckpt_health_monitor.md index 31cd58df26..677e369138 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/skip_data_and_ckpt_health_monitor.md +++ b/docs/mindformers/docs/source_zh_cn/feature/skip_data_and_ckpt_health_monitor.md @@ -4,7 +4,9 @@ ## 概述 -数据跳过功能是指当训练过程中,遇到某个step的global norm超过设定的阈值时,会跳过当前步数训练数据;当连续累计的越界次数达到阈值时,便会触发异常中断,终止训练。而健康监测功能是指在保存权重时,对保存的权重的健康状况进行监测,生成一个文件记录权重的健康状况,并在下次续训时通过该文件来选择最新的健康的权重进行续训。 +数据跳过功能是指当训练过程中,遇到某个step的global norm超过设定的阈值时,会跳过当前步数训练数据。当连续累计的越界次数达到阈值时,便会触发异常中断,终止训练。 + +健康监测功能是指在保存权重时,对保存的权重的健康状况进行监测,生成一个文件记录权重的健康状况,并在下次续训时通过该文件来选择最新的健康的权重进行续训。 权重的健康状况判定请参考[权重健康监测](#权重健康监测)。 @@ -86,19 +88,19 @@ ValueError: Current global norm [47.329006] of step 2 has been 2 consecutive tim ### 概述 -MindSpore Transformers提供的健康监测功能,能够通过监测stage0下的embedding local norm,来判定保存的权重的健康情况,通过文件health_ckpts.json,来记录训练过程中所有保存的权重的健康状况,续训时通过该文件自动寻找最新的健康的权重进行续训。 +MindSpore Transformers提供的健康监测功能,能够通过监测stage0下的embedding local norm判定保存的权重的健康情况。通过文件health_ckpts.json记录训练过程中所有保存的权重的健康状况,续训时通过该文件自动寻找最新的健康的权重进行续训。 本功能涵盖以下三个步骤: 1. 打开健康监测开关,通过一段时间的正常训练来确定需要设定的embedding local norm的阈值。 -2. 设定阈值后重新开启训练,当保存权重时,embedding local norm超过阈值,则记录权重健康状况为不健康,反之则记录为健康,记录中1表示不健康,0表示健康。 +2. 设定阈值后重新开启训练。当保存权重时,embedding local norm超过阈值,则记录权重健康状况为不健康,反之则记录为健康。记录中1表示不健康,0表示健康。 3. 续训时,自动根据上次训练生成的health_ckpts.josn文件中记录的最新的健康权重进行续训。 **注意**: - 只有当pipeline stage>1时的stage0下的embedding norm才有意义。 -- 只有stage0下的卡的权重才有对应的健康状况,记录文件记录的是所有卡权重汇总后的结果,即只要有一张卡的权重的健康状况为不健康,那么该步数对应的权重的健康状况则为不健康。当stage0下所有卡的权重均为健康时,文件才会记录该步数下对应的权重的健康状况为健康。 -- 当记录文件中不存在健康的权重时,则会提示用户重新训练直到存在健康的权重,如若训练一直无法产生健康的权重,则应当考虑设定的embedding local norm的阈值是否合理。 +- 只有stage0下的卡的权重才有对应的健康状况。记录文件记录的是所有卡权重汇总后的结果,即只要有一张卡的权重的健康状况为不健康,那么该步数对应的权重的健康状况则为不健康。当stage0下所有卡的权重均为健康时,文件才会记录该步数下对应的权重的健康状况为健康。 +- 当记录文件中不存在健康的权重时,则会提示用户重新训练直到存在健康的权重。如若训练一直无法产生健康的权重,则应当考虑设定的embedding local norm的阈值是否合理。 - 如果指定权重进行续训,则优先以指定的权重进行续训,不考虑权重的健康状况。 - 该功能不支持full batch的场景。 - 开启该功能可能会存在通信内存不足的风险。 @@ -146,8 +148,8 @@ parallel_config: | save_checkpoint_steps | 保存权重的步数间隔。 | int | 必选 | 正整数 | | embedding_local_norm_threshold | 健康监测的embedding norm的阈值。默认值为`1.0`。 | float | 可选 | 大于0 | | parallel | 并行策略配置。 | | 必选 | | -| full_batch | 是否在并行模式下从数据集中读取加载完整的批数据,设置为`True`表示所有rank都读取完整的批数据,设置为`False`表示每个rank仅加载对应的批数据,设置为`False`时必须设置对应的`dataset_strategy`。此功能仅支持`False`。 | bool | 必选 `False` | | -| dataset_strategy | 仅支持`List of List`类型且仅在`full_batch=False`时生效,列表中子列表的个数需要等于`train_dataset.input_columns`的长度,并且列表中的每个子列表需要和数据集返回的数据的shape保持一致。一般在数据的第1维进行数据并行切分,所以子列表的第1位数配置与`data_parallel`相同,其他位配置为`1`。具体原理可以参考[数据集切分](https://www.mindspore.cn/tutorials/zh-CN/master/parallel/dataset_slice.html)。 | list | 必选 | | +| full_batch | 是否在并行模式下从数据集中读取加载完整的批数据。设置为`True`表示所有rank都读取完整的批数据,设置为`False`表示每个rank仅加载对应的批数据。设置为`False`时必须设置对应的`dataset_strategy`。此功能仅支持`False`。 | bool | 必选 `False` | | +| dataset_strategy | 仅支持`List of List`类型且仅在`full_batch=False`时生效。列表中子列表的个数需要等于`train_dataset.input_columns`的长度,并且列表中的每个子列表需要和数据集返回的数据的shape保持一致。一般在数据的第1维进行数据并行切分,所以子列表的第1位数配置与`data_parallel`相同,其他位配置为`1`。具体原理可以参考[数据集切分](https://www.mindspore.cn/tutorials/zh-CN/master/parallel/dataset_slice.html)。 | list | 必选 | | | parallel_config | 并行参数配置。 | | 必选 | | | data_parallel | 设置数据并行数。 | int | 必选 | 正整数 | | pipeline_stage | 设置流水线并行数。 | int | 必选 | 正整数 | @@ -180,7 +182,7 @@ bash scripts/msrun_launcher.sh "run_mindformer.py \ health_ckpts.json记录数据如下: -ckpt_name记录的为权重文件名,is_health记录的是对应权重的健康状况。记录中1表示不健康,0表示健康。 +ckpt_name记录的是权重文件名,is_health记录的是对应权重的健康状况。记录中1表示不健康,0表示健康。 ```json [ @@ -193,4 +195,4 @@ ckpt_name记录的为权重文件名,is_health记录的是对应权重的健 "ckpt_name": "llama3_1_8b_rank_0-2_1.safetensors" } ] -``` \ No newline at end of file +``` diff --git a/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md b/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md index 64403f7d6f..bf5dd27d93 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md +++ b/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md @@ -6,9 +6,9 @@ Hugging Face Tokenizer 是由 Hugging Face 开发的一款高效、灵活的文本分词工具。它旨在为自然语言处理(NLP)任务提供强大的支持,通过将文本转换为模型能够理解的形式——即分词(tokens)。Tokenizer 不仅负责将文本分割成词汇单元,还管理着这些词汇单元与它们对应的索引之间的映射关系,这在机器学习模型中用于输入表示至关重要。 -MindSpore Transformers中涉及使用Tokenizer的流程有:推理、微调在线数据集加载及离线数据集预处理等。当前已支持直接使用基于Hugging Face transformers的Tokenizer。 +MindSpore Transformers中涉及使用Tokenizer的流程有:推理、微调、在线数据集加载及离线数据集预处理等。当前已支持直接使用基于Hugging Face transformers的Tokenizer。 -MindSpore Transformers原有的Tokenizer组件与Hugging Face Tokenizer的功能相同,直接使用无需额外开发成本,对于迁移Hugging Face上的模型时比较友好。本文档主要介绍以推理流程为例,介绍如何复用Hugging Face Tokenizer。目前仅支持新架构的Qwen3系列模型,后续持续优化泛化性。 +MindSpore Transformers原有的Tokenizer组件与Hugging Face Tokenizer的功能相同,直接使用无需额外开发成本,对于迁移Hugging Face上的模型时比较友好。本文档主要以推理流程为例,介绍如何复用Hugging Face Tokenizer。目前仅支持新架构的Qwen3系列模型,后续将持续优化泛化性。 ## 基本流程 @@ -16,11 +16,11 @@ MindSpore Transformers原有的Tokenizer组件与Hugging Face Tokenizer的功能 ### 1. 根据模型选择下载Tokenizer文件 -根据模型下载对应的Tokenizer相关文件到对应的文件夹,文件包括词表文件等。此外,Hugging Face的Tokenizer具体可以分为两大类: +根据模型下载对应的Tokenizer相关文件到指定文件夹,文件包括词表文件等。此外,Hugging Face的Tokenizer具体可以分为两大类: 1. transformers的内置Tokenizer。如Qwen2Tokenizer; -2. 继承transformers的Tokenizer的基类实现的自定义的Tokenizer,并没有合入transformers。只是在Hugging Face的仓库上或者本地存在Tokenizer的Python文件,需要支持远程加载和将Tokenizer的Python文件存到对应文件夹。如ChatGLM4Tokenizer。 +2. 继承transformers的Tokenizer的基类实现的自定义Tokenizer,并没有合入transformers。只是在Hugging Face的仓库上或者本地存在Tokenizer的Python文件,需要支持远程加载和将Tokenizer的Python文件存到对应文件夹。如ChatGLM4Tokenizer。 ### 2. 修改配置文件 @@ -69,7 +69,7 @@ MindSpore Transformers原有的Tokenizer组件与Hugging Face Tokenizer的功能 - config:yaml配置文件的路径; - load_checkpoint:放置权重的文件夹路径; - run_mode:运行模式,推理任务配置为`predict`; - - trust_remote_code:是否信任从远程下载的代码,默认值:`False`; + - trust_remote_code:是否信任从远程下载的代码,默认值:`False`; - predict_data:推理的输入。 ### 自定义脚本 @@ -112,7 +112,7 @@ train_dataset: &train_dataset 参数说明: -- use_legacy:决定是否使用老架构,默认值:`True`; +- use_legacy:决定是否使用老架构,默认值:`True`。 - pretrained_model_dir:HuggingFace下载的Tokenizer相关的文件存储的文件夹路径。 - padding_side: 指定Tokenizer的padding的位置,训练时需要设置:`"right"`。 - trust_remote_code:是否信任从远程下载的代码,默认值:`False`。 @@ -134,4 +134,4 @@ tokenizer.padding_side = "right" - pretrained_model_name_or_path:HuggingFace下载的Tokenizer相关的文件存储的文件夹路径。 - trust_remote_code:是否信任从远程下载的代码,默认值:`False`。 -关于Tokenizer的支持的更多功能参考Tokenizer的[API接口文档](https://hf-mirror.com/docs/transformers/main_classes/tokenizer),使用方法可以参考其[使用文档](https://hf-mirror.com/docs/transformers/main/en/fast_tokenizers)。 \ No newline at end of file +关于Tokenizer的支持的更多功能参考Tokenizer的[API接口文档](https://hf-mirror.com/docs/transformers/main_classes/tokenizer),使用方法可以参考其[使用文档](https://hf-mirror.com/docs/transformers/main/en/fast_tokenizers)。 diff --git a/docs/mindformers/docs/source_zh_cn/feature/training_hyperparameters.md b/docs/mindformers/docs/source_zh_cn/feature/training_hyperparameters.md index cf8965fee0..32d5a18670 100644 --- a/docs/mindformers/docs/source_zh_cn/feature/training_hyperparameters.md +++ b/docs/mindformers/docs/source_zh_cn/feature/training_hyperparameters.md @@ -76,7 +76,7 @@ lr_schedule: 优化器是用于优化神经网络权重的算法选择,其在训练过程中更新模型权重以最小化损失函数。 -选择合适的优化器对模型的收敛速度和最终性能有着至关重要的影响。不同的优化器通过不同的方法调整学习率和其他超参数来加速训练过程、改善收敛性并避免局部最优解。 +选择合适的优化器对模型的收敛速度和最终性能有着至关重要的影响。不同的优化器通过不同的方法调整学习率和其他超参数,来加速训练过程、改善收敛性并避免局部最优解。 当前,MindSpore Transformers 只支持 [AdamW 优化器](https://www.mindspore.cn/mindformers/docs/zh-CN/master/mindformers.core.html#%E4%BC%98%E5%8C%96%E5%99%A8)。 @@ -84,7 +84,7 @@ lr_schedule: #### YAML 参数配置 -用户可通过在模型训练的 yaml 配置文件中新增 `optimizer` 模块来使用学习率。 +用户可通过在模型训练的 yaml 配置文件中新增 `optimizer` 模块来使用优化器。 以 [DeepSeek-V3 预训练 yaml](https://gitee.com/mindspore/docs/blob/master/docs/mindformers/docs/source_zh_cn/example/deepseek3/pretrain_deepseek3_671b.yaml) 为例,可做如下配置: diff --git a/docs/mindformers/docs/source_zh_cn/introduction/models.md b/docs/mindformers/docs/source_zh_cn/introduction/models.md index 4cdfeaadce..32ac27c0f3 100644 --- a/docs/mindformers/docs/source_zh_cn/introduction/models.md +++ b/docs/mindformers/docs/source_zh_cn/introduction/models.md @@ -2,7 +2,7 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindformers/docs/source_zh_cn/introduction/models.md) -当前MindSpore Transformers全量的模型列表如下: +当前MindSpore Transformers支持的模型列表如下: | 模型名 | 支持规格 | 模型类型 | 最新支持版本 | |:--------------------------------------------------------------------------------------------------------|:------------------------------------------|:-----------:|:------:| @@ -58,4 +58,4 @@ | [Ziya](https://gitee.com/mindspore/mindformers/blob/r1.0/research/ziya/ziya.md) | 13B | 稠密LLM | 1.0 | | [Bert](https://gitee.com/mindspore/mindformers/blob/r0.8/docs/model_cards/bert.md) | 4M/110M | 稠密LLM | 0.8 | -* ***LLM:*** *大语言模型(Large Language Model);* ***MM:*** *多模态(Multi-Modal)* \ No newline at end of file +*注:**LLM** 表示大语言模型(Large Language Model);**MM** 表示多模态(Multi-Modal)* -- Gitee