通過訪問培訓容器進 AWS Systems Manager 行遠程調試 - Amazon SageMaker

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

通過訪問培訓容器進 AWS Systems Manager 行遠程調試

您可以透過 AWS Systems Manager (SSM) 安全地連線至 SageMaker 訓練容器。這可讓您存取在容器內執行的偵錯訓練工作的殼層級存取權。您還可以記錄流式傳輸到 Amazon CloudWatch 的命令和響應。如果您使用自己的 Amazon Virtual Private Cloud (VPC) 來訓練模型,則可以使用 AWS PrivateLink 為 SSM 設定 VPC 端點,並透過 SSM 私有連接到容器。

您可以連接到SageMaker 框架容器,或連接到使用培訓環境設置的自己的 SageMaker 培訓容器。

設定身分與存取權限

若要在 SageMaker 訓練容器中啟用 SSM,您需要為容器設定 IAM 角色。若要讓您或 AWS 帳戶中的使用者透過 SSM 存取訓練容器,您必須設定具有使用 SSM 權限的 IAM 使用者。

IAM 角色

若要讓 SageMaker 訓練容器開始使用 SSM 代理程式,請提供具有 SSM 權限的 IAM 角色。

若要為訓練工作啟用遠端偵錯, SageMaker 需要在訓練工作開始時啟動訓練容器中的 SSM 代理程式。若要允許 SSM 代理程式與 SSM 服務通訊,請將下列政策新增至用於執行訓練工作的 IAM 角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

IAM 使用者

新增下列政策,為 IAM 使用者提供 SSM 工作階段許可以連線到 SSM 目標。在此情況下,SSM 目標是 SageMaker 訓練容器。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": "*" } ] }

您可以透過新增Condition金鑰來限制 IAM 使用者僅連線到特定訓練任務的容器,如下列政策範例所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": [ "*" ], "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "sagemaker-training-job:*" ] } } } ] }

您也可以明確使用sagemaker:EnableRemoteDebug條件鍵來限制遠端除錯。以下是 IAM 使用者限制遠端偵錯的範例政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyRemoteDebugInTrainingJob", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:UpdateTrainingJob" ], "Resource": "*", "Condition": { "BoolIfExists": { "sagemaker:EnableRemoteDebug": false } } } ] }

如需詳細資訊,請參閱AWS 服務授權參考 SageMaker中的 Amazon 條件金鑰

如何為 SageMaker 訓練工作啟用遠端除錯

在本節中,了解如何在 Amazon 中啟動或更新訓練任務時啟用遠端偵錯 SageMaker。

SageMaker Python SDK

使用 SageMaker Python SDK 中的估算器類別,您可以使用enable_remote_debug參數或enable_remote_debug()disable_remote_debug()方法來開啟或關閉遠端偵錯。

若要在建立訓練工作時啟用遠端偵錯

若要在建立新的訓練工作時啟用遠端偵錯,請將enable_remote_debug參數設定為True。預設值為False,因此如果您完全未設定此參數,或明確設定為False,則會停用遠端偵錯功能。

import sagemaker session = sagemaker.Session() estimator = sagemaker.estimator.Estimator( ..., sagemaker_session=session, image_uri="<your_image_uri>", #must be owned by your organization or Amazon DLCs role=role, instance_type="ml.m5.xlarge", instance_count=1, output_path=output_path, max_run=1800, enable_remote_debug=True )

若要透過更新訓練工作來啟用遠端偵錯

使用下列估算器類別方法,您可以在訓練工作正在執行時啟用或停用遠端偵錯 (當工作為Downloading或)。SecondaryStatus Training

# Enable RemoteDebug estimator.enable_remote_debug() # Disable RemoteDebug estimator.disable_remote_debug()
AWS SDK for Python (Boto3)

若要在建立訓練工作時啟用遠端偵錯

若要在建立新的訓練工作時啟用遠端偵錯,請在RemoteDebugConfig參數True中將EnableRemoteDebug金鑰的值設定為。

import boto3 sm = boto3.Session(region_name=region).client("sagemaker") # Start a training job sm.create_training_job( ..., TrainingJobName=job_name, AlgorithmSpecification={ // Specify a training Docker container image URI // (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, RoleArn=iam_role_arn, OutputDataConfig=output_path, ResourceConfig={ "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, StoppingCondition={ "MaxRuntimeInSeconds": 86400 }, RemoteDebugConfig={ "EnableRemoteDebug": True } )

若要透過更新訓練工作來啟用遠端偵錯

使用 update_traing_job API,您可以在訓練工作正在執行時啟用或停用遠端偵錯 (如果工作為Downloading或) TrainingSecondaryStatus

# Update a training job sm.update_training_job( TrainingJobName=job_name, RemoteDebugConfig={ "EnableRemoteDebug": True # True | False } )
AWS Command Line Interface (CLI)

若要在建立訓練工作時啟用遠端偵錯

準備 JSON 格式的CreateTrainingJob請求檔案,如下所示。

// train-with-remote-debug.json { "TrainingJobName": job_name, "RoleArn": iam_role_arn, "AlgorithmSpecification": { // Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, "OutputDataConfig": { "S3OutputPath": output_path }, "ResourceConfig": { "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 }, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

儲存 JSON 檔案後,請在提交訓練工作的終端機中執行下列命令。下列範例命令假設 JSON 檔案的名稱為train-with-remote-debug.json。如果您是從 Jupyter 筆記本執行它,請在該行的開頭加上驚嘆號 (!)。

aws sagemaker create-training-job \ --cli-input-json file://train-with-remote-debug.json

若要透過更新訓練工作來啟用遠端偵錯

準備 JSON 格式的UpdateTrainingJob請求檔案,如下所示。

// update-training-job-with-remote-debug-config.json { "TrainingJobName": job_name, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

儲存 JSON 檔案後,請在提交訓練工作的終端機中執行下列命令。下列範例命令假設 JSON 檔案的名稱為train-with-remote-debug.json。如果您是從 Jupyter 筆記本執行它,請在該行的開頭加上驚嘆號 (!)。

aws sagemaker update-training-job \ --cli-input-json file://update-training-job-with-remote-debug-config.json

存取您的訓練容器

當對應的訓練工作為時,SecondaryStatus您可以存取訓練容器Training。下列程式碼範例示範如何使用 DescribeTrainingJob API 檢查訓練工作的狀態、如何檢查訓練工作登入 CloudWatch,以及如何登入訓練容器。

若要檢查訓練工作的狀態

SageMaker Python SDK

若要檢查訓練工作SecondaryStatus的內容,請執行下列 SageMaker Python SDK 程式碼。

import sagemaker session = sagemaker.Session() # Describe the job status training_job_info = session.describe_training_job(job_name) print(training_job_info)
AWS SDK for Python (Boto3)

若要檢查訓練工作,請執行下列適用於 Python SecondaryStatus 的 SDK (Boto3) 程式碼。

import boto3 session = boto3.session.Session() region = session.region_name sm = boto3.Session(region_name=region).client("sagemaker") # Describe the job status sm.describe_training_job(TrainingJobName=job_name)
AWS Command Line Interface (CLI)

若要檢SecondaryStatus查訓練工作,請執行下列 AWS CLI 命令 SageMaker。

aws sagemaker describe-training-job \ --training-job-name job_name

若要尋找訓練容器的主機名稱

若要透過 SSM 連線至訓練容器,請使用此格式做為目標 ID:sagemaker-training-job:<training-job-name>_algo-<n>,其中algo-<n>是容器主機的名稱。如果您的工作在單一執行個體上執行,則主機永遠都是algo-1。如果您在多個執行個體上執行分散式訓練工作,則 SageMaker 會建立相同數量的主機和記錄串流。例如,如果您使用 4 個實例,則 SageMaker 會建立algo-1algo-2algo-3、、和algo-4。您必須決定要偵錯的記錄資料流及其主機號碼。若要存取與訓練工作相關聯的記錄資料流,請執行下列動作。

  1. 在以下位置打開 Amazon SageMaker 控制台 https://console.aws.amazon.com/sagemaker/

  2. 在左側導覽窗格中,選擇 [訓練],然後選擇 [訓練工作]。

  3. 從 [訓練工作] 清單中,選擇您要偵錯的訓練工作。訓練工作詳細資訊頁面隨即開啟。

  4. 在「監控」段落中,選擇「檢視記錄檔」。相關的訓練工作記錄資料流清單會在 CloudWatch 主控台中開啟。

  5. 記錄資料流名稱會以<training-job-name>/algo-<n>-<time-stamp>格式顯示,並algo-<n>代表主機名稱。

若要深入了解如何 SageMaker 管理多執行個體分散式訓練的組態資訊,請參閱分散式訓練組態

若要存取訓練容器

在終端機中使用下列命令來啟動 SSM 工作階段 (aws ssm start-session) 並連線至訓練容器。

aws ssm start-session --target sagemaker-training-job:<training-job-name>_algo-<n>

例如,如果訓練工作名稱為training-job-test-remote-debug且主機名稱為algo-1,則目標 ID 會變成sagemaker-training-job:training-job-test-remote-debug_algo-1。如果此命令的輸出與類似Starting session with SessionId:xxxxx,則連接成功。

具有 SSM 存取功能 AWS PrivateLink

如果您的訓練容器在未連線到公用網際網路的 Amazon Virtual Private Cloud 中執行,您可以使用 AWS PrivateLink 來啟用 SSM。 AWS PrivateLink 將端點執行個體、SSM 和 Amazon EC2 之間的所有網路流量限制在 Amazon 網路。如需如何使用設定 SSM 存取的詳細資訊 AWS PrivateLink,請參閱為工作階段管理員設定 Amazon VPC 端點

記錄 SSM 工作階段命令和結果

遵循建立工作階段管理員偏好設定文件 (命令列) 中的指示後,您可以建立 SSM 文件來定義 SSM 工作階段的偏好設定。您可以使用 SSM 文件來設定工作階段選項,包括資料加密、工作階段持續時間和記錄。例如,您可以指定是在 Amazon 簡單儲存服務 (Amazon S3) 儲存貯體或 Amazon CloudWatch 日誌群組中存放工作階段日誌資料。您可以建立定義 AWS 帳戶之所有工作階段之一般偏好設定的文件 AWS 區域,或建立定義個別工作階段偏好設定的文件。

從 SSM 檢查錯誤記錄檔來疑難排解問題

Amazon 會將錯誤從 SSM 代理程式 SageMaker 上傳到 CloudWatch 日誌群組中的日/aws/sagemaker/TrainingJobs誌。SSM 代理程式記錄串流會以下列格式命名:<job-name>/algo-<n>-<timestamp>/ssm。例如,如果您建立名為的雙節點訓練工作training-job-test-remote-debug,則訓練工作記錄training-job-test-remote-debug/algo-<n>-<timestamp>和多個 SSM 代理程式錯誤記錄training-job-test-remote-debug/algo-<n>-<timestamp>/ssm都會上傳至您 CloudWatch 的記錄。在此範例中,您可以檢閱*/ssm記錄資料流以疑難排解 SSM 問題。

training-job-test-remote-debug/algo-1-1680535238 training-job-test-remote-debug/algo-2-1680535238 training-job-test-remote-debug/algo-1-1680535238/ssm training-job-test-remote-debug/algo-2-1680535238/ssm

考量事項

使用 SageMaker 遠端除錯時,請考慮下列事項。

  • 從 SageMaker 上開始對SageMaker 演算法容器或容器不支援遠端偵錯 AWS Marketplace。

  • 您無法為啟用網路隔離的容器啟動 SSM 工作階段,因為隔離會防止輸出網路呼叫。