本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
您可以通过 AWS Systems Manager (SSM) 安全地连接到 SageMaker 训练容器。这样您就可以通过 shell 级别访问容器中正在运行的训练作业。您还可以记录流式传输到 Amazon 的命令和响应 CloudWatch。如果您使用自己的亚马逊虚拟私有云 (VPC) Amazon Virtual Private Cloud 来训练模型,则 AWS PrivateLink 可以使用为 SSM 设置 VPC 终端节点并通过 SSM 私密连接到容器。
您可以连接到 SageMaker AI Framework 容
设置 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 中启动或更新训练作业时启用远程调试。
使用 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
)
要通过更新训练作业启用远程调试
使用以下估算器类方法,当训练作业的 SecondaryStatus
为 Downloading
或 Training
时,您可以在训练作业运行时启用或禁用远程调试。
# Enable RemoteDebug
estimator.enable_remote_debug()
# Disable RemoteDebug
estimator.disable_remote_debug()
访问您的训练容器
当相应训练作业的 SecondaryStatus
为 Training
时,您可以访问训练容器。以下代码示例演示如何使用 DescribeTrainingJob
API 检查训练作业的状态、如何查看训练作业登录 CloudWatch以及如何登录训练容器。
要查看训练作业的状态
要检查训练作业,请运行以下 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-1
algo-2
、algo-3
、和algo-4
。您必须确定要调试的日志流及其主机编号。要访问与训练作业相关的日志流,请执行以下操作。
打开 Amazon A SageMaker I 控制台,网址为https://console.aws.amazon.com/sagemaker/
。 -
在左侧导航窗格中,选择训练,然后选择训练作业。
-
从训练作业列表中,选择要调试的训练作业。训练作业详细信息页面会打开。
-
在监控部分,选择查看日志。相关的训练作业日志流列表将在 CloudWatch 控制台中打开。
-
日志流名称以
<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 远程调试时,请考虑以下几点。
-
SageMaker AI 算法容器或从 SageMaker AI 开始的容器不支持远程调试 AWS Marketplace。
-
您无法为启用网络隔离的容器启动 SSM 会话,因为隔离会阻止出站网络调用。