选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

通过访问训练容器 AWS Systems Manager 进行远程调试

聚焦模式
通过访问训练容器 AWS Systems Manager 进行远程调试 - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

您可以通过 AWS Systems Manager (SSM) 安全地连接到 SageMaker 训练容器。这样您就可以通过 shell 级别访问容器中正在运行的训练作业。您还可以记录流式传输到 Amazon 的命令和响应 CloudWatch。如果您使用自己的亚马逊虚拟私有云 (VPC) Amazon Virtual Private Cloud 来训练模型,则 AWS PrivateLink 可以使用为 SSM 设置 VPC 终端节点并通过 SSM 私密连接到容器。

您可以连接到 SageMaker AI Framework 容器或连接到自己在训练环境中设置的 SageMaker 训练容器。

设置 IAM 权限

要在 SageMaker 训练容器中启用 SSM,您需要为容器设置 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 服务授权参考》中的 SageMaker Amazon AI 条件密钥

如何为 SageMaker 训练作业启用远程调试

在本节中,学习如何在 Amazon A SageMaker I 中启动或更新训练作业时启用远程调试。

SageMaker Python SDK

使用 Pyth SageMaker on 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 )

要通过更新训练作业启用远程调试

使用以下估算器类方法,当训练作业的 SecondaryStatusDownloadingTraining 时,您可以在训练作业运行时启用或禁用远程调试。

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

要在创建训练作业时启用远程调试

要在创建新的训练作业时启用远程调试,请在 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,当训练作业的 SecondaryStatusDownloadingTraining 时,您可以在训练作业运行时启用或禁用远程调试。

# 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 Notebook 运行,请在行首添加一个感叹号 (!)。

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 Notebook 运行,请在行首添加一个感叹号 (!)。

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

使用 Pyth SageMaker on 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 )

要通过更新训练作业启用远程调试

使用以下估算器类方法,当训练作业的 SecondaryStatusDownloadingTraining 时,您可以在训练作业运行时启用或禁用远程调试。

# Enable RemoteDebug estimator.enable_remote_debug() # Disable RemoteDebug estimator.disable_remote_debug()

访问您的训练容器

当相应训练作业的 SecondaryStatusTraining 时,您可以访问训练容器。以下代码示例演示如何使用 DescribeTrainingJob API 检查训练作业的状态、如何查看训练作业登录 CloudWatch以及如何登录训练容器。

要查看训练作业的状态

SageMaker Python SDK

要检查训练作业,请运行以下 SageMaker Python SDK 代码。SecondaryStatus

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,请运行以下 Python 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作业,请为 SageMaker AI 运行以下 AWS CLI 命令。

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

要检查训练作业,请运行以下 SageMaker Python SDK 代码。SecondaryStatus

import sagemaker session = sagemaker.Session() # Describe the job status training_job_info = session.describe_training_job(job_name) print(training_job_info)

要查找训练容器的主机名称

要通过 SSM 连接到训练容器,目标 ID 应使用以下格式:sagemaker-training-job:<training-job-name>_algo-<n>,其中 algo-<n> 是容器的主机名称。如果您的作业在单个实例上运行,则主机始终 algo-1。如果您在多个实例上运行分布式训练作业, SageMaker AI 会创建相同数量的主机和日志流。例如,如果您使用 4 个实例, SageMaker AI 会创建algo-1algo-2algo-3、和algo-4。您必须确定要调试的日志流及其主机编号。要访问与训练作业相关的日志流,请执行以下操作。

  1. 打开 Amazon A SageMaker I 控制台,网址为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。 AWS PrivateLink 将您的终端节点实例、SSM 和 Amazon 之间的所有网络流量限制 EC2 到亚马逊网络。有关如何使用设置 SSM 访问权限的更多信息 AWS PrivateLink,请参阅为会话管理器设置 Amazon VPC 终端节点

记录 SSM 会话命令和结果

按照创建会话管理器首选项文档(命令行)中的说明进行操作后,您可以创建 SSM 文档来定义 SSM 会话的首选项。您可以使用 SSM 文档来配置会话选项,包括数据加密、会话持续时间和日志记录。例如,您可以指定是将会话日志数据存储在亚马逊简单存储服务 (Amazon S3) 存储桶中,还是存储在 CloudWatch 亚马逊日志组中。您可以创建定义 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 远程调试时,请考虑以下几点。

下一主题:

发行说明

上一主题:

上一页
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。