

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

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

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

## 為指定的模型設定正確組態
<a name="model-parallel-best-practices-configuration"></a>

擴展模型時，我們建議您依序瀏覽以下清單。每個清單項目都討論了使用程式庫技術以及可能出現的權衡的優勢。

**提示**  
如果模型使用程式庫功能的子集運作良好，新增更多的模型平行處理或節省記憶體功能通常不會改善效能。

**使用大型 GPU 執行個體類型**
+ 在模型平行處理範圍中，最好使用具有大型 GPU 記憶體的強大執行個體來處理模型平行處理操作所產生的額外負荷，例如跨多個 GPU 分割模型。我們建議使用 `ml.p4d` 或 `ml.p3dn` 執行個體來訓練大型 DL 模型。這些執行個體也配備 Elastic Fabric Adapter (EFA)，提供較高的網路頻寬，並可進行透過模型平行處理的大規模訓練。

**分片最佳化工具狀態**
+ 分片最佳化工具狀態的影響取決於資料平行處理排名的數量。通常，較高的資料平行處理程度 (與運算節點的大小成正比) 可以改善記憶體使用量效率。

  當您想要縮減叢集時，請務必檢查最佳化工具狀態分片組態。例如，具有最佳化工具狀態分片的大型 DL 模型適合具有 16 個 GPU 的運算叢集 (例如，兩個 p4d 或 p4de 執行個體)，可能不一定適合具有 8 個 GPU 的節點 (例如，單一 P4d 或 p4de 執行個體)。這是因為 8 個 GPU 的合併記憶體低於 16 個 GPU 的合併記憶體，而每個 GPU 分片 8 個 GPU 所需的記憶體也高於在 16 GPU 案例中每個 GPU 分片的記憶體。因此，增加的記憶體需求可能不適合較小的叢集。

  如需詳細資訊，請參閱[最佳化工具狀態碎片](model-parallel-extended-features-pytorch-optimizer-state-sharding.md)。

**啟用檢查點**
+ 使用一組模組的啟用檢查點可以改善記憶體效率。您分組的模組越多，記憶體使用量就越有效率。當建立層的檢查點循序模組時，`smp.set_activation_checkpointing` 函式的 `strategy` 引數將分組層以建立檢查點。例如，將兩個或以上的層分組以進行檢查點，比一次一層檢查點的記憶體效率更好，而且這會犧牲額外運算時間以減少記憶體使用量。

  如需詳細資訊，請參閱[啟用檢查點](model-parallel-extended-features-pytorch-activation-checkpointing.md)。

**張量平行**
+ 張量平行處理程度應為 2 次方 (2、4、8、...、2 n)，其中最大程度必須等於每個節點的 GPU 數量。例如，如果您使用具有 8 個 GPU 的節點，張量平行程度的可能數字為 2、4 和 8。對於張量平行程度，我們不建議任意數字 (例如 3、5、6 和 7)。當您使用多個節點時，錯誤設定張量平行處理程度可能導致跨節點執行張量平行處理；這會增加跨節點啟用通訊所產生的重大負荷，而且運算成本可能會變得非常昂貴。

  如需詳細資訊，請參閱[張量平行處理](model-parallel-extended-features-pytorch-tensor-parallelism.md)。<a name="model-parallel-best-practices-configuration-pipeline-across-nodes"></a>

**跨節點的管道平行處理**
+ 您可以在單一節點內和跨多個節點內執行管道平行處理。當您將管道平行處理與張量平行處理結合使用時，建議您跨多個節點執行管道平行處理，並在個別節點內保持張量平行處理。
+ 管道平行處理具有以下三個旋鈕：`microbatches`、`active_microbatches` 和 `prescaled_batch`。
  + 當您將張量平行處理與管道平行處理搭配使用時，建議您啟用 `prescaled_batch`，藉此增加每個模型平行群組的批次大小，以便有效率地管線傳輸。啟用 `prescaled_batch` 後，訓練指令碼中設定的批次大小，會成為每個沒有 `prescaled_batch` 的排名設定批次大小乘以 `tp_size`。
  + 增加的 `microbatches` 數量有助於達成有效的管線傳輸和更好的效能。請注意，有效的微批次大小是批次大小除以微批次數量。如果在保持批次大小常數不變的同時，增加微批次的數量，則每個微批次處理較少的範例。
  + `active_microbatches` 的數量是在管道傳輸過程中同步處理的微批次的最大數量。對於處理中的每個啟動中微批次，其啟用和漸層都會佔用 GPU 記憶體。因此，增加 `active_microbatches` 會佔用更多 GPU 記憶體。
+ 如果 GPU 和 GPU 記憶體使用量過低，請在管道傳輸期間增加 `active_microbatches` 以更好地平行化。
+ 如需如何將張量平行處理與管道平行處理搭配使用的更多相關資訊，請參閱[張量平行處理結合管道平行處理](model-parallel-extended-features-pytorch-tensor-parallelism-examples.md#model-parallel-extended-features-pytorch-tensor-and-pipeline-parallelism)。
+ 若要尋找上述參數的描述，請參閱 *SageMaker Python SDK 文件*中的 [`smdistributed` 參數](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#parameters-for-smdistributed)。

**卸載啟用至 CPU**
+ 請確認這用於與啟用檢查點和管線平行處理組合使用。若要確保卸載和預先載入在背景中進行，請為微批次參數指定大於 1 的值。
+ 當卸載啟用時, 你可能能夠增加 `active_microbatches`，而有時與微批次的總數相符。這取決於對哪些模組執行檢查點，以及模型的分割方式。

  如需詳細資訊，請參閱[啟用卸載](model-parallel-extended-features-pytorch-activation-offloading.md)。

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

SageMaker 模型平行訓練團隊根據使用 GPT-2 模型的實驗、序列長度 512 以及 50,000 個字彙大小，提供下列參考點。


| 模型參數數量 | 執行個體類型 | 管道平行處理 | 張量平行處理 | 最佳化工具狀態分片 | 啟用檢查點 | 預先擴充批次 | 批次大小 | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 10 億 | 16 ml.p4d.24xlarge | 1 | 4 | True | 每個轉換器層 | True | batch\_size=40 | 
| 30 億 | 16 ml.p4d.24xlarge | 1 | 8 | True | 每個轉換器層 | True | batch\_size=32 | 
| 60 億 | 32 ml.p4d.24xlarge | 2 | 8 | True | 每個轉換器層 | True | batch\_size=56, microbatches=4, active\_microbatches=2 | 

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

## 修改訓練指令碼
<a name="model-parallel-best-practices-modify-training-script"></a>
+ 在訓練指令碼中使用 SageMaker 模型平行處理程式庫功能之前，請先檢閱 [SageMaker 分散式模型平行化程式庫組態提示和缺陷](model-parallel-customize-tips-pitfalls.md)。
+ 若要更快地啟動訓練任務，請使用 [SageMaker AI 本機模式](https://sagemaker.readthedocs.io/en/v2.199.0/overview.html?highlight=local%20mode#local-mode)。這可協助您在 SageMaker 筆記本執行個體上快速執行訓練任務。根據執行 SageMaker 筆記本執行個體的機器學習 (ML) 執行個體規模，您可能需要透過變更模型組態 (例如隱藏寬度、轉換器層數和注意力標題) 來調整模型大小。在使用大型叢集訓練完整模型之前，先驗證已縮減的模型是否在筆記本執行個體上執行良好。

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

若要使用模型平行處理或 [SageMaker 分散式訓練範例筆記本](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/index.html)執行 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)。