在 Amazon 使用檢查站 SageMaker - Amazon SageMaker

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

在 Amazon 使用檢查站 SageMaker

在訓練期間,使用 Amazon 中的檢查點 SageMaker 來儲存機器學習 (ML) 模型的狀態。檢查點是模型的快照,並且可以透過機器學習 (ML) 架構的回呼函式進行設定。您可以使用儲存的檢查點,從上次儲存的檢查點重新啟動訓練任務。

使用檢查點,您可以執行下列操作:

  • 由於訓練任務或執行個體非預期中斷,會將模型快照儲存在訓練之下。

  • 從檢查點恢復訓練未來的模型。

  • 在訓練的中間階段分析模型。

  • 搭配 S3 Express 單區使用檢查點,以提高存取速度。

  • 使用檢查點搭配 SageMaker 受管理的 Spot 訓練來節省訓練成本。

SageMaker 訓練機制使用 Amazon EC2 執行個體上的訓練容器,而檢查點檔案會儲存在容器的本機目錄下 (預設值為/opt/ml/checkpoints)。 SageMaker 提供將檢查點從本機路徑複製到 Amazon S3 的功能,並自動將該目錄中的檢查點與 S3 同步。S3 中現有的檢查點會在工作開始時寫入 SageMaker容器,以便從檢查點恢復工作。工作開始後新增至 S3 資料夾的檢查點不會複製到訓練容器。 SageMaker 也會在訓練期間將新的檢查點從容器寫入 S3。如果在 SageMaker 容器中刪除檢查點,它也會在 S3 資料夾中刪除。

您可以將 Amazon 中的檢查點 SageMaker 與 Amazon S3 快速單區域儲存類別 (S3 快速單區域) 搭配使用,以更快速地存取檢查點。當您啟用檢查點並指定檢查點儲存目的地的 S3 URI 時,您可以為 S3 一般用途儲存貯體或 S3 目錄儲存貯體中的資料夾提供 S3 URI。如需 S3 快速單區域和 S3 目錄儲存貯體的詳細資訊,請參閱什麼是 S3 快速單一區域

如果您將檢查點與 SageMaker 受管 Spot 訓練搭配使用,請在競價型執行個體上 SageMaker 管理模型訓練的檢查點,並在下一個競價型執行個體上繼續訓練工作。透過 SageMaker 受管 Spot 訓練,您可以大幅縮短訓練 ML 模型的計費時間。如需詳細資訊,請參閱 在 Amazon 中使用受管 Spot 訓練 SageMaker

框架和算法的檢查點 SageMaker

使用檢查點來儲存以偏好架構建立之 ML 模型的快照。 SageMaker

SageMaker 支持檢查點的框架和算法

SageMaker 支援 AWS Deep Learning Containers 的檢查點和內建演算法子集,而不需要變更訓練指令碼。 SageMaker 將檢查點儲存到預設本機路徑,'/opt/ml/checkpoints'並將其複製到 Amazon S3。

  • Deep Learning Contain TensorFlowers:PyTorch、、MXNetHuggingFace

    注意

    如果您使用的是 HuggingFace 架構估算器,則需要透過超參數指定檢查點輸出路徑。如需詳細資訊,請參閱HuggingFace文件 SageMaker中的在 Amazon 上執行訓練

  • 內建演算法:影像分類物件偵測語意分割XGBoost (0.90-1 或更新版本)

    注意

    如果您正在使用架構模式 (指令碼模式) 下的 XGBoost 演算法,則需要使用具有手動設定檢查點的 XgBoost 訓練指令碼。如需有關儲存模型快照的 XGBoost 訓練方法的詳細資訊,請參閱 XGBoost Python SDK 文件中的訓練 XGBoost

如果在受管理的 Spot 訓練工作中使用不支援檢查點的預先建置演算法,則 SageMaker 不允許最長等待時間超過一個小時的工作,以限制因中斷而浪費的訓練時間。

針對自訂訓練容器和其他架構

如果您使用自己的訓練容器、訓練指令碼或上一節未列出的其他架構,則必須使用回呼或訓練 API 正確設定訓練指令碼,以將檢查點儲存至本機路徑 ('/opt/ml/checkpoints'),並從訓練指令碼中的本機路徑載入。 SageMaker 估算器可以與本機路徑同步,並將檢查點儲存到 Amazon S3。

啟用檢查點

啟用檢查點後, SageMaker 將檢查點儲存到 Amazon S3,並將訓練任務與檢查點 S3 儲存貯體同步。您可以將 S3 一般用途或 S3 目錄儲存貯體用於檢查點 S3 儲存貯體。

訓練期間寫入檢查點的架構圖。

下列範例顯示如何在建構 SageMaker 預估器時設定檢查點路徑。若要啟用檢查點,請將 checkpoint_s3_uricheckpoint_local_path 參數新增至您的估算器。

下列範例範本顯示如何建立一般 SageMaker 估算器及啟用檢查點。您可以指定 image_uri 參數,使用適用於支援之演算法的範本。若要尋找具有檢查點支援之演算法的 Docker 影像 URI SageMaker,請參閱 Docker 登錄路徑和範例程式碼。您也可以Estimator用其他 SageMaker 框架的估計器父類和估計器類別取estimator代和,例如、、和。TensorFlow PyTorch MXNet HuggingFace XGBoost

import sagemaker from sagemaker.estimator import 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) # The local path where the model will save its checkpoints in the training container checkpoint_local_path="/opt/ml/checkpoints" estimator = Estimator( ... image_uri="<ecr_path>/<algorithm-name>:<tag>" # Specify to use built-in algorithms output_path=bucket, base_job_name=base_job_name, # Parameters required to enable checkpointing checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path=checkpoint_local_path )

下列兩個參數會指定檢查點的路徑:

  • checkpoint_local_path — 指定模型在訓練容器中定期儲存檢查點的本機路徑。預設路徑設定為 '/opt/ml/checkpoints'。如果您正在使用其他架構或使用自己的訓練容器,請確定訓練指令碼的檢查點組態已指定路徑為 '/opt/ml/checkpoints'

    注意

    建議您將本機路徑指定'/opt/ml/checkpoints'為與預設 SageMaker 檢查點設定一致。如果您想要指定自己的本機路徑,請確定您與訓練指令碼中的檢查點儲存路徑和 SageMaker估算器的checkpoint_local_path參數相符。

  • checkpoint_s3_uri — URI 導向即時儲存檢查點的 S3 儲存貯體。您可以指定 S3 一般用途或 S3 目錄儲存貯體來存放檢查點。如需 S3 目錄儲存貯體的詳細資訊,請參閱 Amazon 簡單儲存服務使用者指南中的錄儲存貯體。

若要尋找 SageMaker 估算器參數的完整清單,請參閱 Amazon SageMaker Python 開發套件文件中的估算器 API

瀏覽檢查點檔案

使用 SageMaker Python 開發套件和 Amazon S3 主控台尋找檢查點檔案。

以程式設計方式找到檢查點檔案

若要擷取儲存檢查點的 S3 儲存貯體 URI,請檢查下列估算器屬性:

estimator.checkpoint_s3_uri

這將返回CreateTrainingJob請求時配置的檢查點的 S3 輸出路徑。若要使用 S3 主控台尋找儲存的檢查點檔案,請使用下列程序。

從 S3 主控台尋找檢查點檔案
  1. 請登入 AWS Management Console 並開啟 SageMaker 主控台,網址為 https://console.aws.amazon.com/sagemaker/

  2. 在左側導覽窗格中,選擇 Training jobs (訓練任務)。

  3. 選擇具有已啟用檢查點的訓練任務連結,以開啟任務設定

  4. 在訓練任務的任務設定 頁面上,尋找檢查點組態區段。

    訓練任務之任務設定頁面中的檢查點組態區段。
  5. 使用 S3 儲存貯體連結存取檢查點檔案。

從檢查點恢復培訓

若要從檢查點恢復訓練任務,請使用啟用檢查點區段中所建立的相同 checkpoint_s3_uri 執行新的估算器。訓練恢復後,會將這個 S3 儲存貯體的檢查點還原到新訓練任務每個執行個體中的 checkpoint_local_path。確保 S3 儲存貯體與目前 SageMaker 工作階段所在的區域位於相同的區域。

同步檢查點的架構圖以恢復訓練。

針對 GPU 錯誤進行叢集修復

如果您在 GPU 上執行失敗的訓練工作, SageMaker 將執行 GPU 健康狀態檢查,以查看失敗是否與 GPU 問題有關。 SageMaker 根據健全狀況檢查結果採取下列動作:

  • 如果錯誤可以恢復,並且可以通過重新啟動實例或重置 GPU 來修復,則 SageMaker 將重新啟動實例。

  • 如果錯誤無法復原,並且由需要更換的 GPU 引起, SageMaker 將取代執行個體。

執行個體會在 SageMaker 叢集修復程序中取代或重新啟動。在此過程中,您會在訓練工作狀態中看到下列訊息:

Repairing training cluster due to hardware failure

SageMaker 將嘗試修復叢集最多10次。如果叢集修復成功, SageMaker 將會自動從上一個檢查點重新啟動訓練工作。如果叢集修復失敗,訓練工作也會失敗。叢集修復程序不會向您收費。除非訓練工作失敗,否則不會啟動叢集修復。如果針對暖池叢集偵測到 GPU 問題,叢集將進入修復模式以重新開機或取代有問題的執行個體。修復之後,叢集仍可用作暖池叢集。

先前描述的叢集和執行個體修復程序如下圖所示:

The cluster repair process checks for training errors and attempts to fix them if they are caused by a GPU.

檢查點的注意事項

在 SageMaker中使用檢查點時,請考慮下列事項。

  • 若要在具有多個執行個體的分散式訓練中避免覆寫,您必須在訓練指令碼中手動設定檢查點檔案名稱和路徑。高階 SageMaker 檢查點組態可指定單一 Amazon S3 位置,不需要額外的尾碼或前置字元來標記來自多個執行個體的檢查點。

  • SageMaker Python SDK 不支援檢查點頻率的高階設定。若要控制檢查點頻率,請使用架構的模型儲存函式或檢查點回呼來修改訓練指令碼。

  • 如果您將 SageMaker 檢查點與除 SageMaker 錯程 SageMaker 式和分散式搭配使用,並且正面臨問題,請參閱下列頁面以瞭解疑難排解和考量。