Amazon SageMaker AI 中分散式訓練的故障診斷 - Amazon SageMaker AI

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

Amazon SageMaker AI 中分散式訓練的故障診斷

如果在使用程式庫時執行訓練任務遇到問題,請使用下列清單嘗試進行故障診斷。如果您需要進一步支援,請透過 AWS Support Center 或 Amazon SageMaker AI 開發人員論壇聯絡 SageMaker AI 團隊。 AWS Amazon SageMaker

使用 SageMaker AI 分散式資料與 Amazon SageMaker Debugger 和檢查點平行

若要監控 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_uricheckpoint_local_path 參數。有關在訓練腳本中設置手動檢查點的詳細資訊,請參閱儲存檢查點

連接到模型參數索引鍵的非預期字首

對於 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 訓練,則在保存模型中為參數名稱新增字首?PyTorch 討論論壇

有關用於保存和加載模型的 PyTorch 方法的詳細資訊,請參閱跨設備保存和加載模型,在PyTorch 文件

初始化期間 SageMaker AI 分散式訓練任務停滯

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

若要設定安全群組的傳入和傳出規則
  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/vpc/:// 開啟 Amazon VPC 主控台。

  2. 在左導覽窗格中,選擇安全群組

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

  4. 詳細資訊區段中,複製安全群組 ID

  5. 傳入規則索引標籤上,選擇編輯傳入規則

  6. 編輯傳入規則 頁面上,執行下列動作:

    1. 選擇新增規則

    2. 針對類型,選擇所有流量

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

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

  8. 傳出規則標籤上,選擇編輯傳出規則

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

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

有關為 VPC 和 EFA 配置安全組的詳細資訊,請參閱您的 VPC 的安全組彈性織物適配器

訓練結束時的 SageMaker AI 分散式訓練任務停滯

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

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

觀察因 Amazon FSx 輸送量瓶頸造成的擴展效率降低

擴展效率降低的一個潛在原因是 FSx 輸送量限制。如果您在切換至較大的訓練叢集時發現擴展效率突然下降,請嘗試使用較高輸送量限制的較大 FSx for Lustre 檔案系統。如需詳細資訊,請參閱 Amazon FSx for Lustre 使用者指南中的彙總檔案系統效能管理儲存和輸送容量

使用 PyTorch 的 SageMaker AI 分散式訓練任務會傳回棄用警告

自 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 程式庫,以了解突破性變更以及搭配 PyTorch 使用程式庫的新方法。