

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# SageMaker 分散式模型平行化最佳實務
<a name="model-parallel-best-practices-v2"></a>

當您使用 SageMaker 模型平行化程式庫 v2 (SMP v2) 執行分散式訓練任務時，請遵循下列指南。

## 為分散式訓練設定正確的組態
<a name="model-parallel-best-practices-configuration-v2"></a>

若要預估並尋找套用 SMP v2 提供之分散式訓練技術的最佳起點，請檢閱下列清單。每個清單項目討論使用 [SageMaker 模型平行化程式庫第 2 版的核心功能](model-parallel-core-features-v2.md) 的優點以及潛在的權衡。

### 組態提示
<a name="model-parallel-best-practices-v2-config-tips"></a>

本節提供如何根據全域批次大小需求來決定最佳模型組態，以實現最佳輸送量的指導方針。

首先，無論您的模型大小為何，我們都建議下列設定。

1. 使用您可以使用的最強大執行個體類型。

1. 永遠開啟[混合精確度](model-parallel-core-features-v2-mixed-precision.md)，因為它可為改善效能和減少記憶體提供顯著的優勢。我們建議您使用 `bfloat16`，因為它比 `float16` 更加精確。

1. 若適用，開啟 [SageMaker 分散式資料平行化程式庫](data-parallel.md) (而非使用 NCCL)，如[與針對 AWS 基礎設施最佳化的 SMDDP 程式庫的相容性](model-parallel-core-features-v2-smddp-allgather.md)所示。一個例外情形是僅限張量平行化使用案例 (`hybrid_shard_degree = 1` 和 `tensor_paralle_degree > 1`)。

1. 如果您的模型有超過 600 億個參數，建議使用[延遲參數初始化](model-parallel-core-features-v2-delayed-param-init.md)。您也可以使用延遲參數初始化來加速任何模型的初始化。

1. 我們建議您啟用[啟用檢查點](model-parallel-core-features-v2-pytorch-activation-checkpointing.md)。

根據您的模型大小，我們建議您從下列指引開始。

1. 使用碎片資料平行化。

   1. 根據您要放入 GPU 記憶體的批次大小，選擇適當的碎片資料平行程度。一般而言，您應該從模型適合 GPU 記憶體的最低程度開始，同時可將網路通訊的額外負荷降至最低。如果您看到正在發生快取排清的警告，建議您提高碎片程度。

   1. 根據最大本機批次大小和所需的全域批次大小 (如果有的話) 來決定 `world_size`。

   1. 您可以實驗啟用卸載。視案例而定，它可以解決您的記憶體需求，而不必增加碎片程度，這表示通訊較少。

1. 同時使用 PyTorch FSDP 的碎片資料平行化和 SMP v2 的張量平行化，如[張量平行化](model-parallel-core-features-v2-tensor-parallelism.md)中所述。

   1. 在大型叢集上訓練時，僅使用 FSDP 會導致全域批次大小變得太大，導致模型的收斂問題。一般而言，大多數研究工作會將批次大小保持在 400 萬個字符以下。在這種情況下，您可以透過將 PyTorch FSDP 與 SMP v2 的張量平行化組合在一起來減少批次大小，以解決這個問題。

      例如，如果您有 256 個節點且序列長度為 4096，即使每個 GPU 的批次大小為 1，也會導致全域批次大小為 800 萬個字符。不過，當您使用程度為 2 的張量平行化，以及每個張量平行群組的批次大小為 1 時，這會成為每個 GPU 的 1/2 批次大小，也就是 400 萬個字符。

   1. 使用 8k 等長內容進行訓練時，16k 啟用記憶體可能會變得非常高。FSDP 不會對啟用進行分片，而啟用可能會導致 GPU 耗盡記憶體。在這種情況下，您可以透過將 PyTorch FSDP 與 SMP v2 的張量平行化結合來進行高效率的訓練。

### 參考組態
<a name="model-parallel-best-practices-configuration-reference-v2"></a>

SageMaker 模型平行化訓練團隊根據使用 [`torch.sagemaker.transform`](distributed-model-parallel-v2-reference.md#model-parallel-v2-torch-sagemaker-reference-transform) 轉換為 SMP 變壓器模型的 Llama 2 模型實驗提供了以下參考點，並在序列長度為 4096 和混合精確度 (FP16 或 BF16) 的 `ml.p4d.24xlarge` 執行個體上進行訓練。



- **Llama 2**
  - **模型大小 (模型參數數量):** 7B / **執行個體數量:** 1 / **碎片資料平行程度:** 8 / **張量平行程度:** 1 / **啟用檢查點:** TRUE / **啟用卸載:** FALSE / **批次大小:** 4
  - **模型大小 (模型參數數量):** 70B / **執行個體數量:** 32 / **碎片資料平行程度:** 256 / **張量平行程度:** 1 / **啟用檢查點:** TRUE / **啟用卸載:** FALSE / **批次大小:** 2
  - **模型大小 (模型參數數量):** 175B / **執行個體數量:** 64 / **碎片資料平行程度:** 128 / **張量平行程度:** 4 / **啟用檢查點:** TRUE / **啟用卸載:** TRUE / **批次大小:** 6



您可以從上述組態中推斷，以估算模型組態的 GPU 記憶體使用量。例如，如果您增加 100 億個參數模型的序列長度，或將模型的大小增加到 200 億，則可能需要先降低批次大小。如果模型仍然不符合，請嘗試增加張量平行處理程度。

## 使用 SageMaker AI 主控台和 Amazon CloudWatch 監控和記錄訓練任務
<a name="model-parallel-best-practices-monitoring-v2"></a>

若要監控系統層級指標 (例如 CPU 記憶體使用率、GPU 記憶體使用率和 GPU 使用率)，請使用透過 [SageMaker AI 主控台](https://console.aws.amazon.com/sagemaker/)提供的視覺效果。

1. 在左側導覽窗格中，選擇**訓練**。

1. 選擇 **Training jobs (訓練任務)**。

1. 在主窗格中，選擇您要查看其更多詳細資訊的訓練任務名稱。

1. 瀏覽主窗格，並找到**監視器**區段以查看自動化視覺效果。

1. 若要查看訓練任務日誌，請選擇**監視器**區段中的**檢視日誌**。您可以在 CloudWatch 中存取訓練任務的分散式訓練任務日誌。如果您已啟動多節點分散式訓練，您應該會看到多個日誌串流，其標記格式為 **algo-n-1234567890**。**algo-1** 日誌串流會追蹤主節點 (第 0 個) 的訓練日誌。

如需詳細資訊，請參閱[用於監控和分析訓練任務的 Amazon CloudWatch 指標](training-metrics.md)。

## 許可
<a name="model-parallel-best-practices-permissions-v2"></a>

若要執行具有模型平行化的 SageMaker 訓練任務，請確認您有 IAM 角色的正確許可，例如：
+ 若要使用 [FSx for Lustre](https://aws.amazon.com/fsx/)，請新增 [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess)。
+ 若要使用 Amazon S3 做為資料管道，請新增 [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess)。
+ 若要使用 Docker，請建置您自己的容器，然後將其推送到 Amazon ECR，新增 [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess)。
+ 若要取得完整存取權，以使用整個 SageMaker AI 功能套件，請新增 [https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess)。