透過 存取訓練容器 AWS Systems Manager 以進行遠端偵錯 - Amazon SageMaker AI

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

透過 存取訓練容器 AWS Systems Manager 以進行遠端偵錯

您可以透過 AWS Systems Manager () 安全地連線至 SageMaker 訓練容器SSM。這可讓您對容器內執行的訓練任務進行殼層除錯。您也可以記錄串流到 Amazon 的命令和回應 CloudWatch。如果您使用自己的 Amazon Virtual Private Cloud (VPC) 來訓練模型,您可以使用 AWS PrivateLink 來設定 的VPC端點SSM,並透過 私下連線至容器SSM。

您可以連線至 SageMaker AI Framework Containers 或連線至使用訓練環境設定的您自己的 SageMaker 訓練容器。

設定IAM許可

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

IAM 角色

若要讓 SageMaker 訓練容器從SSM代理程式開始,請將SSM許可提供給 IAM角色。

若要為您的訓練任務啟用遠端偵錯, SageMaker AI 需要在訓練任務開始時,在訓練容器中啟動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 服務授權參考中的 Amazon SageMaker AI 的條件金鑰

如何啟用 SageMaker 訓練任務的遠端偵錯

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

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 )

更新訓練任務以啟用遠端偵錯

使用下列估算器類別方法,您可以在訓練任務執行時啟用或停用遠端偵錯,當任務SecondaryStatus的 為 Downloading或 時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,您可以在訓練任務執行時啟用或停用遠端偵錯,當任務SecondaryStatus的 為 Downloading或 時Training

# 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

更新訓練任務以啟用遠端偵錯

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

// 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)

若要檢查訓練任務SecondaryStatus的 ,請SDK針對 Python (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的 ,請針對 SageMaker AI 執行下列 AWS CLI 命令。

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 AI 會建立相同數量的主機和日誌串流。例如,如果您使用 4 個執行個體, SageMaker AI 會建立 algo-1algo-2algo-3algo-4。您必須決定要偵錯的日誌串流及其主機號碼。若要存取與訓練任務相關聯的日誌串流,請執行下列動作。

  1. 在 開啟 Amazon SageMaker AI 主控台https://console.aws.amazon.com/sagemaker/

  2. 在左側導覽窗格中,選擇訓練,然後選擇訓練任務

  3. 訓練任務清單中,選擇您要偵錯的訓練任務。訓練任務詳細資訊頁面隨即開啟。

  4. 監控區段中,選擇檢視日誌。相關的訓練任務日誌串流清單會在 CloudWatch 主控台中開啟。

  5. 日誌串流名稱會以 <training-job-name>/algo-<n>-<time-stamp> 格式顯示,其中 algo-<n>代表主機名稱。

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

存取訓練容器

在終端機中使用下列命令來啟動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。 會將端點執行個體SSM、 和 Amazon 之間的所有網路流量 AWS PrivateLink 限制EC2在 Amazon 網路。如需如何使用 設定SSM存取權的詳細資訊 AWS PrivateLink,請參閱設定 Session Manager 的 Amazon VPC端點

日誌SSM工作階段命令和結果

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

透過從 檢查錯誤日誌來故障診斷問題 SSM

Amazon SageMaker AI 會將錯誤從SSM代理程式上傳至 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 AI 遠端偵錯時,請考慮下列事項。

  • AI SageMaker 演算法容器或 AI SageMaker 上的容器不支援遠端偵錯 AWS Marketplace。

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