Amazon 中分散式訓練的疑難排解 SageMaker - Amazon SageMaker

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

Amazon 中分散式訓練的疑難排解 SageMaker

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

將 SageMaker 分散式資料與 Amazon SageMaker 除錯器和檢查點 parallel 使用

若要監控系統瓶頸、設定架構操作,以及針對具有 SageMaker 分散式資料 parallel 訓練任務的模型輸出張量除錯,請使用 Amazon Debug。 SageMaker

不過,當您使用 SageMaker 偵錯工具、 SageMaker 分散式資料 parallel 和 SageMaker檢查點時,您可能會看到類似下列範例的錯誤。

SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

這是因為偵錯工具和檢查點之間發生內部錯誤,當您啟用 SageMaker 分散式資料 parallel 時發生。

  • 如果您啟用這三個功能, 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 分散式資料 parallel 和 SageMaker 偵錯工具,因應措施是手動將檢查點函數新增至訓練指令碼,而不是從估計器指定checkpoint_s3_uricheckpoint_local_path參數。有關在培訓腳本中設置手動檢查點的詳細信息,請參閱儲存檢查點

附加至模型參數關鍵字的未預期字首

對於 PyTorch 分散式訓練工作,state_dict索引鍵 (model模型參數) 可能會附加非預期的前置字元 (例如)。當 PyTorch 訓練工作儲存模型人工因素時, SageMaker資料 parallel 程式庫不會直接變更或前置任何模型參數名稱。 PyTorch的分散式訓練會變更中的名稱,state_dict以便透過網路,前置字首。如果在使用 SageMaker 資料 parallel 程式庫和檢查點進行訓練時,由於參數名稱不同而遇到任何模型失敗問題,請調整下列範例程式碼,以移除您在 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 分散式訓練工作在初始化期間停滯

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

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

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

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

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

  5. Inbound Rules (傳入規則) 索引標籤上,選擇 Edit inbound rules (編輯傳入規則)

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

    1. 選擇 Add rule (新增規則)。

    2. 針對 Type (類型),選擇 All traffic (所有流量)。

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

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

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

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

完成上述步驟以輸入和輸出規則設定安全性群組後,請重新執行訓練工作,並確認延遲問題是否已解決。

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

SageMaker 分佈式培訓工作在培訓結束時停滯

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

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

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

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

SageMaker 帶有 PyTorch 返回棄用警告的分佈式培訓工作

自 v1.4.0 以來, SageMaker 分佈式數據並行庫作為分佈式的後端工作。 PyTorch 由於搭配使用程式庫的重大變更 PyTorch,您可能會遇到警告訊息,指出已取代 PyTorch 分散式封裝的 smdistributed API。警告訊息應類似以下內容:

smdistributed.dataparallel.torch.dist is deprecated in the SageMaker 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

在 v1.4.0 及更高版本中,庫只需在訓練腳本的頂部導入一次,並在 PyTorch 分佈式初始化期間設置為後端。透過單行後端規格,您可以保持 PyTorch 訓練指令碼不變,並直接使用 PyTorch 分散式模組。請參在訓練指令碼中使用 SMDDP 程式 PyTorch 庫閱以瞭解重大變更以及搭配使用程式庫的新方式 PyTorch。