

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 混合分片数据并行性
<a name="model-parallel-core-features-v2-sharded-data-parallelism"></a>

*分片数据并行性*是一种节省内存的分布式训练技术，它在各个设备之间拆分模型的状态（模型参数、梯度和优化器状态）。这可以帮助您使用腾出的 GPU 内存来适应更大的模型或增加批次大小。SMP 库提供了使用 PyTorch 完全分片数据并行 (FSDP) 运行分片数据并行处理的功能。 PyTorch 默认情况下，FSDP 会分成整组 GPUs 正在使用的分片。在 SMP v2 中，该库通过扩展 PyTorch 混合分片 (`HYBRID_SHARD`) 在 PyTorch FSDP 之上提供这种分片数据并行性，混合分片是 FSDP 提供的[分片策略](https://pytorch.org/docs/stable/fsdp.html#torch.distributed.fsdp.ShardingStrategy)之一：、、、。 PyTorch `FULL_SHARD` `SHARD_GRAD_OP` `HYBRID_SHARD` `_HYBRID_SHARD_ZERO2` scale-aware-sharding如博客中所述，以这种方式扩展混合分片有助于实现 [FSDP 巨型模型训练的近线性缩放](https://www.amazon.science/blog/near-linear-scaling-of-gigantic-model-training-on-aws)。 AWS PyTorch

SMP 库使其易于使用`HYBRID_SHARD`，可以`_HYBRID_SHARD_ZERO2`跨任意可配置数量的 GPUs，扩展了支持跨单个节点 (`HYBRID_SHARD`) 或全部 GPUs () 分片的本机 PyTorch FSDP。`FULL_SHARD` PyTorch FSDP 调用可以保持原样，您只需要将`hybrid_shard_degree`参数添加到 SMP 配置中，如以下代码示例所示。您无需更改模型周围的 PyTorch FSDP 包装器中的`sharding_strategy`参数值。 PyTorch 您可以传递 `ShardingStrategy.HYBRID_SHARD` 作为值。或者，如果您为 `hybrid_shard_degree` 参数指定的值等于或大于 2，SMP 库会覆盖脚本中的策略，并将其设置为 `ShardingStrategy.HYBRID_SHARD`。

以下代码片段显示了如何在训练脚本中添加 SMP 初始化模块 `torch.sagemaker.init()`，并按照 [使用 SageMaker 模型并行度库 v2](model-parallel-use-api-v2.md) 中介绍的两步流程，为训练作业启动器设置 JSON 格式的 SMP 配置字典。您无需对 PyTorch 模型或 [PyTorch FSDP](https://pytorch.org/docs/stable/fsdp.html#module-torch.distributed.fsdp) 配置进行任何更改。有关 `hybrid_shard_degree` 参数的更多信息，请参阅 [SMP v2 核心功能配置参数](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config)。

**SMP 配置字典**

```
{ "hybrid_shard_degree": 16 }
```

**在训练脚本中**

```
import torch.sagemaker as tsm
tsm.init()

# Set up a PyTorch model
model = ...

# Wrap the PyTorch model using the PyTorch FSDP module
model = FSDP(
    model,
    ...
)

# Optimizer needs to be created after FSDP wrapper
optimizer = ...
```