

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

# 針對 Amazon SageMaker AI 分散式訓練進行故障診斷
<a name="distributed-troubleshooting-data-parallel"></a>

如果在使用程式庫時執行訓練任務遇到問題，請使用下列清單嘗試進行故障診斷。如果您需要進一步的支援，請透過 [AWS 支援中心](https://console.aws.amazon.com/support/)或[Amazon Amazon SageMaker AI 的AWS 開發人員論壇](https://forums.aws.amazon.com/forum.jspa?forumID=285)與 SageMaker AI 團隊聯絡。

**Topics**
+ [將 SageMaker AI 分散式資料平行與 Amazon SageMaker Debugger 和檢查點搭配使用](#distributed-ts-data-parallel-debugger)
+ [連接至模型參數機碼的未預期字首](#distributed-ts-data-parallel-pytorch-prefix)
+ [初始化期間的 SageMaker AI 分散式訓練任務停滯](#distributed-ts-data-parallel-efa-sg)
+ [SageMaker AI 分散式訓練任務在訓練結束時停滯](#distributed-ts-data-parallel-stall-at-the-end)
+ [觀察由於 Amazon FSx 輸送量瓶頸而造成的擴展效率降低](#distributed-ts-data-parallel-fxs-bottleneck)
+ [使用 PyTorch 的 SageMaker AI 分散式訓練任務傳回棄用警告](#distributed-ts-data-parallel-deprecation-warnings)

## 將 SageMaker AI 分散式資料平行與 Amazon SageMaker Debugger 和檢查點搭配使用
<a name="distributed-ts-data-parallel-debugger"></a>

若要使用 SageMaker AI 分散式資料平行來監控系統瓶頸、分析架構作業和偵錯模型輸出張量以進行訓練任務，請使用 Amazon SageMaker Debugger。

但是，當您使用 SageMaker Debugger、SageMaker AI 分散式資料平行以及 SageMaker AI 檢查點時，您可能會看到類似下列範例的錯誤。

```
SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
```

這是由於偵錯工具和檢查點之間發生內部錯誤，當您啟用 SageMaker AI 分散式資料平行化時，就會發生此錯誤。
+ 如果您啟用所有這三個功能，SageMaker Python SDK 會自動透過傳遞 `debugger_hook_config=False` 關閉偵錯工具，這等同於下列架構 `estimator` 範例。

  ```
  bucket=sagemaker.Session().default_bucket()
  base_job_name="sagemaker-checkpoint-test"
  checkpoint_in_bucket="checkpoints"
  
  # The S3 URI to store the checkpoints
  checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket)
  
  estimator = TensorFlow(
      ...
  
      distribution={"smdistributed": {"dataparallel": { "enabled": True }}},
      checkpoint_s3_uri=checkpoint_s3_bucket,
      checkpoint_local_path="/opt/ml/checkpoints",
      debugger_hook_config=False
  )
  ```
+ 如果您想要繼續使用 SageMaker AI 分散式資料平行化和 SageMaker Debugger，解決方法是手動新增檢查點函式至訓練指令碼，而不是從估算器指定 `checkpoint_s3_uri` 和 `checkpoint_local_path` 參數。有關在訓練腳本中設置手動檢查點的詳細資訊，請參閱[儲存檢查點](distributed-troubleshooting-model-parallel.md#distributed-ts-model-parallel-checkpoints)。

## 連接至模型參數機碼的未預期字首
<a name="distributed-ts-data-parallel-pytorch-prefix"></a>

對於 PyTorch 分散式訓練任務，未預期的字首 (例如 `model`) 可能會連接至 `state_dict` 機碼 (模型參數)。當 PyTorch 訓練任務儲存模型成品時，SageMaker AI 資料平行化程式庫不會直接變更或加上任何模型參數名稱。PyTorch 的分散式訓練會變更 `state_dict` 中的名稱，以便透過網路，欲加上字首。如果您在使用 SageMaker AI 資料平行化程式庫和 PyTorch 訓練的檢查點時，因為參數名稱不同而遇到任何模型失敗問題，請調整下列範例程式碼，在訓練指令碼中載入檢查點的步驟中移除自首。

```
state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}
```

這會將每個 `state_dict` 機碼視為字串值，在 `'model.'` 第一次出現的時候分隔字串，並取得分割字串的第三個清單項目 (含索引 2)。

有關字首問題的詳細資訊，請參閱[如果由多 GPU 訓練，則在保存模型中為參數名稱新增字首？](https://discuss.pytorch.org/t/prefix-parameter-names-in-saved-model-if-trained-by-multi-gpu/494)在*PyTorch 討論論壇*。

有關用於保存和加載模型的 PyTorch 方法的詳細資訊，請參閱[跨設備保存和加載模型](https://pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-model-across-devices)，在*PyTorch 文件*。

## 初始化期間的 SageMaker AI 分散式訓練任務停滯
<a name="distributed-ts-data-parallel-efa-sg"></a>

如果您的 SageMaker AI 分散式資料平行化訓練任務在使用啟用 EFA 的執行個體初始化期間停滯，這可能是由於用於訓練任務的 VPC 子網路的安全群組設定錯誤造成的。EFA 需要適當的安全群組組態，才能啟用節點之間的流量。

**若要設定安全群組的傳入和傳出規則**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)：// 開啟 Amazon VPC 主控台。

1. 在左導覽窗格中，選擇**安全群組**。

1. 選取與您用於訓練的 VPC 子網路綁定的安全群組。

1. 在**詳細資訊**區段中，複製**安全群組 ID**。

1. 在**傳入規則**索引標籤上，選擇**編輯傳入規則**。

1. 在 **編輯傳入規則** 頁面上，執行下列動作：

   1. 選擇**新增規則**。

   1. 針對**類型**，選擇**所有流量**。

   1. 在**來源**中，選擇**自訂**，將安全群組 ID 貼到搜尋方塊中，然後選取彈出的安全群組。

1. 選擇**儲存規則**，以完成設定安全群組的傳入規則。

1. 在**傳出規則**標籤上，選擇**編輯傳出規則**。

1. 重複步驟 6 和 7，以新增與傳出規則相同的規則。

完成上述步驟，以使用傳入和傳出規則設定安全群組後，請重新執行訓練任務，並驗證停止問題是否已解決。

有關為 VPC 和 EFA 配置安全組的詳細資訊，請參閱[您的 VPC 的安全組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)和[彈性織物適配器](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)。

## SageMaker AI 分散式訓練任務在訓練結束時停滯
<a name="distributed-ts-data-parallel-stall-at-the-end"></a>

訓練結束時停止問題的根本原因之一，就是不同排名的每個週期處理的批次數量不相符。所有工作者 (GPU) 都會在向後傳遞中同步其本機漸層，以確保在批次迭代結束時具有相同的模型副本。如果在最後的訓練週期期間，批次大小不平均地指派給不同工作者群組，則訓練任務會停止。例如，當一組工作者 (群組 A) 完成處理所有批次並結束訓練迴路時，另一個工作者群組 (群組 B) 會開始處理另一個批次，但仍需要來自群組 A 的通訊以同步漸層。這會導致群組 B 等待已完成訓練、且沒有任何漸層可同步的群組 A。

因此，設定訓練資料集時，每個工作者都必須取得相同數量的資料範例，這樣每個工作者才能在訓練時處理相同數量的批次。確保每個排名取得相同數量的批次，以避免此停止問題。

## 觀察由於 Amazon FSx 輸送量瓶頸而造成的擴展效率降低
<a name="distributed-ts-data-parallel-fxs-bottleneck"></a>

擴展效率降低的一個潛在原因是 FSx 輸送量限制。如果您在切換至較大的訓練叢集時發現擴展效率突然下降，請嘗試使用較高輸送量限制的較大 FSx for Lustre 檔案系統。如需詳細資訊，請參閱 *Amazon FSx for Lustre 使用者指南*中的[彙總檔案系統效能](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf)和[管理儲存和輸送容量](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html)。

## 使用 PyTorch 的 SageMaker AI 分散式訓練任務傳回棄用警告
<a name="distributed-ts-data-parallel-deprecation-warnings"></a>

自 1.4.0 版，SageMaker AI 分散式資料平行化程式庫以 PyTorch 分散式的後端運作。由於在 PyTorch 中使用程式庫的突破性變更，您可能會遇到警告訊息，指出 PyTorch 分散式套件的 `smdistributed` API 已棄用。警告訊息應類似以下內容：

```
smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI distributed data parallel library v1.4.0+.
Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows:
torch.distributed.init_process_group(backend='smddp')
For more information, see the library's API documentation at
https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html
```

在 1.4.0 版及更新版本中，程式庫只需要在訓練指令碼一開始匯入程式庫一次，並在 PyTorch 分散式初始化期間將其設定為後端即可。利用僅一行的後端規格，您不需要變更 PyTorch 訓練指令碼，即可直接使用 PyTorch 分散式模組。請參閱[在 PyTorch 訓練指令碼中使用 SMDDP 程式庫](data-parallel-modify-sdp-pt.md)，以了解突破性變更以及搭配 PyTorch 使用程式庫的新方法。