本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过访问训练容器 AWS Systems Manager 进行远程调试
您可以通过 AWS Systems Manager (SSM) 安全地连接到 SageMaker 训练容器。这使您可以通过 shell 级别访问容器内运行的调试训练作业。您还可以记录流式传输到 Amazon 的命令和响应 CloudWatch。如果您使用自己的亚马逊虚拟私有云 (VPC) Amazon Virtual Private Cloud 来训练模型,则 AWS PrivateLink 可以使用为 SSM 设置 VPC 终端节点并通过 SSM 私密连接到容器。
您可以连接到 Fr SageMaker amework 容
设置 IAM 权限
要在 SageMaker 训练容器中启用 SSM,您需要为容器设置 IAM 角色。要使您或您的 AWS 账户中的用户能够通过 SSM 访问培训容器,您需要为 IAM 用户设置有权使用 SSM。
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。
访问您的训练容器
当相应训练作业SecondaryStatus
的为时,您可以访问训练容器Training
。以下代码示例演示如何使用 DescribeTrainingJob
API 检查训练作业的状态、如何查看训练作业登录 CloudWatch以及如何登录训练容器。
检查训练作业的状态
查找训练容器的主机名
要通过 SSM 连接到训练容器,请使用以下格式作为目标 ID:sagemaker-training-job:<training-job-name>_algo-<n>
,其中algo-<n>
是容器主机的名称。如果您的作业在单个实例上运行,则主机始终处于运行状态algo-1
。如果您在多个实例上运行分布式训练作业,则 SageMaker 会创建相同数量的主机和日志流。例如,如果您使用 4 个实例,则 SageMaker 会创建algo-1
algo-2
、algo-3
、和algo-4
。您必须确定要调试的日志流及其主机号。要访问与训练作业关联的日志流,请执行以下操作。
打开亚马逊 SageMaker 控制台,网址为 https://console.aws.amazon.com/sagemaker/
。 -
在左侧导航窗格中,选择培训,然后选择训练作业。
-
从训练作业列表中,选择要调试的训练作业。将打开训练作业详细信息页面。
-
在 “监控” 部分,选择 “查看日志”。相关的训练作业日志流列表将在 CloudWatch 控制台中打开。
-
日志流名称以
<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 之间的所有网络流量限制到亚马逊网络。有关如何使用设置 SSM 访问权限的更多信息 AWS PrivateLink,请参阅为会话管理器设置 Amazon VPC 终端节点。
记录 SSM 会话命令和结果
按照创建会话管理器首选项文档(命令行)中的说明进行操作后,您可以创建定义 SSM 会话首选项的 SSM 文档。您可以使用 SSM 文档配置会话选项,包括数据加密、会话持续时间和日志记录。例如,您可以指定是将会话日志数据存储在亚马逊简单存储服务 (Amazon S3) 存储桶中,还是存储在 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 会话,因为隔离可以防止出站网络呼叫。