本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過 存取訓練容器AWS Systems Manager以進行遠端偵錯
您可以透過 AWS Systems Manager(SSM) 安全地連線至 SageMaker 訓練容器。如此一來,您就可以存取 Shell 層級,以偵錯在容器內執行的訓練任務。您也可以記錄串流到 Amazon CloudWatch 的命令和回應。如果您使用自己的 Amazon Virtual Private Cloud (VPC) 來訓練模型,您可以使用 AWS PrivateLink為 SSM 設定 VPC 端點,並透過 SSM 私下連線至容器。
您可以連線至 SageMaker AI 架構容器或連線至透過 SageMaker 訓練環境設定的自有訓練容器。
設定 IAM 許可
若要在 SageMaker 訓練容器中啟用 SSM,您需要為容器設定 IAM 角色。若要讓您或AWS帳戶中的使用者透過 SSM 存取訓練容器,您需要設定具有使用 SSM 許可的 IAM 使用者。
IAM 角色
若要以 SSM 代理程式啟動 SageMaker 訓練容器,請提供具 SSM 許可的 IAM 角色。
若要為您的訓練任務啟用遠端偵錯,SageMaker AI 需要在訓練任務啟動時,於訓練容器中啟動 SSM 代理程式。若要允許 SSM 代理程式與 SSM 服務溝通,請將下列政策新增至您用來執行訓練任務的 IAM 角色。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
IAM 使用者
新增下列政策以授予 IAM 使用者 SSM 工作階段連線至 SSM 目標的許可。在此情況下,SSM 目標為 SageMaker 訓練容器。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession",
"ssm:TerminateSession"
],
"Resource": "*"
}
]
}
您可以新增 Condition 索引鍵來限制 IAM 使用者僅連線到特定訓練任務的容器,如下列政策範例所示。
- JSON
-
-
{
"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 使用者限制遠端偵錯的範例政策。
- JSON
-
-
{
"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()
- 適用於 Python (Boto3) 的 AWS SDK
-
建立訓練任務時啟用遠端偵錯
若要在建立訓練任務時啟用遠端偵錯,請在 RemoteDebugConfig 參數中將 EnableRemoteDebug 索引鍵的值設為 True。
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
更新訓練任務以啟用遠端偵錯
準備 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)
- 適用於 Python (Boto3) 的 AWS SDK
-
若要檢查訓練任務的 SecondaryStatus,請執行下列 SDK for 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-1、algo-2、algo-3 和 algo-4。您必須決定要偵錯哪個日誌串流及其主機號碼。若要存取與訓練任務相關的日誌串流,請執行下列動作。
若要進一步了解 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,即表示連線成功。
使用 存取 SSMAWS PrivateLink
如果您的訓練容器在未連線至公有網際網路的 Amazon Virtual Private Cloud 中執行,您可以使用 AWS PrivateLink來啟用 SSM。 會將端點執行個體、SSM 和 Amazon EC2 之間的所有網路流量AWS PrivateLink限制在 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 代理程式將錯誤上傳至 /aws/sagemaker/TrainingJobs 日誌群組中的 CloudWatch Logs。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 Logs。在此範例中,您可以檢閱 */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 遠端偵錯時,請考慮下列事項。