作为AWS管理员,如何限制用户SageMaker实例及训练任务的运行时长?
限制SageMaker Notebook实例与训练任务运行时长的解决方案
一、限制Notebook实例运行时长
方法1:通过生命周期配置添加自动停止脚本
SageMaker生命周期配置支持在实例启动时执行自定义脚本,你可以通过脚本设置定时停止逻辑:
- 编写启动脚本(示例命名为
auto-stop-notebook.sh):
#!/bin/bash # 设置超时阈值(示例为8小时,单位:秒) TIMEOUT_SECONDS=28800 # 等待指定时长后调用API停止实例 sleep $TIMEOUT_SECONDS aws sagemaker stop-notebook-instance --notebook-instance-name $NOTEBOOK_INSTANCE_NAME
- 在SageMaker控制台创建生命周期配置,将上述脚本上传为启动脚本。
- 将该配置关联到目标Notebook实例(新建或编辑实例时选择对应配置)。
- 确保Notebook实例绑定的IAM角色拥有
sagemaker:StopNotebookInstance权限。
方法2:用EventBridge + Lambda批量管控
适合统一管理所有实例,无需逐个配置:
- 创建Lambda函数,编写实例检查与停止逻辑:
import boto3 from datetime import datetime, timezone def lambda_handler(event, context): sagemaker_client = boto3.client('sagemaker') # 允许的最大运行时长(单位:小时) MAX_RUN_HOURS = 8 # 获取所有运行中的Notebook实例 running_instances = sagemaker_client.list_notebook_instances( NotebookInstanceStatusEquals='InService' )['NotebookInstances'] for instance in running_instances: instance_name = instance['NotebookInstanceName'] start_time = instance['CreationTime'] # 计算已运行时长 run_duration_hours = (datetime.now(timezone.utc) - start_time).total_seconds() / 3600 if run_duration_hours > MAX_RUN_HOURS: print(f"Stopping instance {instance_name} - 已运行{run_duration_hours:.2f}小时") sagemaker_client.stop_notebook_instance(NotebookInstanceName=instance_name)
- 创建EventBridge规则,设置定时触发(比如每小时执行一次),关联上述Lambda函数。
- 给Lambda的IAM角色添加
sagemaker:ListNotebookInstances和sagemaker:StopNotebookInstance权限。
二、限制训练任务运行时长
方法1:创建任务时指定最大运行时间
在创建训练任务时,通过MaxRuntimeInSeconds参数设置超时阈值,超过后任务会自动终止:
- 控制台创建:在「高级设置」中找到「最大运行时间」,输入秒数(比如86400=24小时)。
- CLI/API创建:调用
CreateTrainingJob时添加参数:
aws sagemaker create-training-job \ --training-job-name my-training-task \ --max-runtime-in-seconds 86400 \ # 其他必要参数(算法、数据存储等)
方法2:用IAM策略强制规范时长
如果要确保所有用户必须设置不超过上限的运行时间,可添加如下拒绝策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "sagemaker:CreateTrainingJob", "Resource": "*", "Condition": { "Or": [ { "Null": { "sagemaker:MaxRuntimeInSeconds": true } }, { "NumericGreaterThan": { "sagemaker:MaxRuntimeInSeconds": 86400 } } ] } } ] }
该策略会拒绝两种请求:未设置MaxRuntimeInSeconds,或设置的值超过86400秒(24小时)。
内容的提问来源于stack exchange,提问作者Abdo Sheham
相关产品推荐
相关产品推荐

