From 658233a48a658456d4e3bb19804e00088cf150c2 Mon Sep 17 00:00:00 2001 From: kong_de_shu <1670690897@qq.com> Date: Sun, 18 Aug 2024 13:24:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B6=E8=A1=8C=E7=AD=96=E7=95=A5=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mindformers/usage/parallel_strategy.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/mindspore/source_zh_cn/mindformers/usage/parallel_strategy.md diff --git a/docs/mindspore/source_zh_cn/mindformers/usage/parallel_strategy.md b/docs/mindspore/source_zh_cn/mindformers/usage/parallel_strategy.md new file mode 100644 index 0000000000..f499be4edb --- /dev/null +++ b/docs/mindspore/source_zh_cn/mindformers/usage/parallel_strategy.md @@ -0,0 +1,61 @@ +# 并行策略配置 + +## 并行模式与应用场景 + +在大规模深度学习模型的训练中,尤其是面对庞大的数据集和复杂的模型架构时,单一设备的算力往往不足以应对这种需求。为了解决这个问题,MindSpore 提供了一套强大的并行策略配置,通过灵活的并行策略可以大幅提升训练效率,并降低计算资源的消耗。 + +MindSpore 的并行模式包括数据并行、模型并行、流水线并行、序列并行等,这些模式可以单独使用,也可以结合在一起,形成复杂的混合并行策略,以应对不同的模型训练需求。通过合理配置这些并行策略,开发者可以有效利用多设备的计算资源,极大地提升训练效率。 + +在实际应用中,不同的并行策略适用于不同的场景: + +- **数据并行**:适用于数据量大,模型相对简单的场景。 +- **模型并行**:适用于模型参数量巨大,单个设备无法容纳整个模型的场景。 +- **流水线并行**:适用于超大规模模型训练,需多设备共同计算的场景。 +- **序列并行**:适用于长序列输入的模型,减少单设备显存占用的场景。 + +**提醒**:仓库中提供的 YAML 文件中并行策略配置已是最优,当前推荐用户使用半自动并行,以确保最佳性能和稳定性。 + +## 并行策略配置项 + +在 MindFormers 的配置文件中,并行策略配置项位于 `run_xxx.yaml` 文件的并行设置部分。配置项按照模型训练的常见流程顺序排列,主要涉及以下几个关键部分: + +### 并行设置的相关配置项 + +- `use_parallel`: 是否启用并行计算。 +- `parallel`: 自动并行配置。可以参考 [MindSpore 自动并行上下文](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.0rc2/parallel/auto_parallel.html) + - `parallel_mode`: 并行模式。可选值: + - 0: 数据并行 + - 1: 半自动并行 + - `gradients_mean`: 是否在梯度 AllReduce 后执行平均算子。通常半自动并行模式下为 False,数据并行模式下为 True。 + - `enable_alltoall`: 允许在通信期间生成 AllToAll 通信算子的开关。通常仅在 MOE 场景下打开,默认 False。 + - `full_batch`: 在半自动并行模式下加载整个 batch 数据集时为 True。数据并行模式必须设置为 False,否则会报错。 + - `search_mode`: 策略搜索模式。此配置通常不建议用户修改。 + - `enable_parallel_optimizer`: 数据并行训练时对权重更新计算进行分片。默认会将模型权重参数切分成 device_num 份;半自动并行时默认将模型权重参数切成 data_parallel 份。 + - `strategy_ckpt_save_file`: 保存并行切分策略的路径。 + - `strategy_ckpt_config`: 策略文件相关配置项。 + - `only_trainable_params`: 仅保存/加载可训练参数的策略信息,默认为 True。 + - `parallel_optimizer_config`: 用于开启优化器并行后的行为配置。仅在 `enable_parallel_optimizer=True` 的时候生效。 + - `gradient_accumulation_shard`: 设置累加梯度变量是否在数据并行维度上进行切分。 + - `parallel_optimizer_threshold`: 设置参数切分的阈值。 + +**提醒**:推荐使用半自动并行模式,其能够在性能与易用性之间取得良好平衡。 + +### 并行策略详细配置 + +在 MindFormers 中,`parallel_config` 提供了详细的并行策略配置选项,用于调整和优化计算任务在多设备环境中的执行。下面从功能角度展开讲解这些配置项: + +- **`data_parallel`**: 数据并行,通过将整个数据集分割成多个小批次,并在多个设备上同时处理,以加速训练过程。数据并行模式对模型参数的同步有严格要求,适合数据量大且模型相对简单的任务。 +- **`model_parallel`**: 模型并行,适用于模型参数量巨大,单个设备无法容纳整个模型的场景。模型的不同部分在不同的设备上进行计算,这样可以有效利用多设备的显存,但也会增加设备间的通信开销。 +- **`context_parallel`**: 序列并行,专为长序列输入的模型设计。通过将序列数据在多个设备上分割处理,可以显著降低单设备的显存压力,适合处理超长文本或序列数据的模型。 +- **`pipeline_stage`**: 流水线并行,适用于超大规模模型训练,需要多设备共同协作完成计算任务。流水线并行通过将计算任务分割成多个阶段,每个阶段在不同设备上同时进行,提高计算资源的利用率。 +- **`use_seq_parallel`**: 是否开启序列并行。当开启序列并行时,Transformer 层中的 LayerNorm 和 Dropout 等操作将按序列维度切分,使各设备只需处理部分任务,进一步减少模型的显存占用。 +- **`micro_batch_num`**: 流水线并行的微批次大小。当使用流水线并行时,此配置用于指定每个设备处理的微批次数量,优化流水线的运行效率。 +- **`enable_parallel_optimizer`**: 优化器并行配置的关键选项。当数据并行或模型并行时,启用优化器并行可以将优化器的计算负担分摊到多个设备上,减少单设备的显存占用,提升整体训练效率。 + - **`gradient_accumulation_shard`**: 在启用优化器并行时,将累积的梯度变量在数据并行维度上进行切分。通过减少每个设备需要保留的梯度数量,有效降低显存占用。 + - **`parallel_optimizer_threshold`**: 设置进行优化器并行时参数切分的阈值。这个阈值决定了在什么情况下将参数分片到不同设备,可以根据模型的复杂性和硬件配置进行调整,以优化训练效率。 + +## 总结 + +合理的并行策略配置是确保大规模模型训练高效且稳定的关键。在 MindFormers 中,通过灵活使用并行设置,可以有效优化计算资源,提升模型训练的整体效率。了解并掌握这些并行配置,将有助于开发者更好地应对复杂的训练任务。 + +详细的并行原理与更多配置说明,请参考 [MindSpore 并行策略介绍](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.0rc2/parallel/overview.html)。 -- Gitee