You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CDK实现夜间关闭SageMaker GPU推理实例?

方案可行性与实现步骤

这个方案完全可行,通过AWS CDK可以轻松实现SageMaker推理实例的定时启停自动化,具体实现步骤如下:

1. 核心组件说明

  • EventBridge 规则:设置定时调度,分别在目标时间触发停止/启动实例的规则
  • Lambda 函数:编写代码调用SageMaker API,完成推理端点的启停操作
  • IAM 权限:为Lambda函数配置必要权限,允许其调用SageMaker的启停接口

2. CDK 代码示例(Python)

完整栈实现代码

from aws_cdk import (
    aws_lambda as _lambda,
    aws_events as events,
    aws_events_targets as targets,
    aws_iam as iam,
    Stack,
)
from constructs import Construct

class SageMakerAutoSchedulerStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # 创建Lambda执行角色
        lambda_role = iam.Role(self, "SageMakerSchedulerRole",
            assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
            managed_policies=[
                iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole"),
                iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSageMakerFullAccess") # 生产环境建议缩小权限范围
            ]
        )

        # 启停端点的Lambda函数逻辑
        scheduler_code = _lambda.Code.from_inline("""
import boto3

sagemaker = boto3.client('sagemaker')
TARGET_ENDPOINT = '你的推理端点名称'

def lambda_handler(event, context):
    action = event.get('action')
    if not action:
        return {'status': 'failed', 'message': 'Missing action parameter'}
    
    try:
        if action == 'stop':
            sagemaker.stop_endpoint(EndpointName=TARGET_ENDPOINT)
            print(f"Successfully stopped endpoint: {TARGET_ENDPOINT}")
        elif action == 'start':
            sagemaker.start_endpoint(EndpointName=TARGET_ENDPOINT)
            print(f"Successfully started endpoint: {TARGET_ENDPOINT}")
        return {'status': 'success'}
    except Exception as e:
        print(f"Error executing action: {str(e)}")
        return {'status': 'failed', 'message': str(e)}
""")

        # 创建Lambda函数
        sm_scheduler_lambda = _lambda.Function(self, "SageMakerSchedulerLambda",
            runtime=_lambda.Runtime.PYTHON_3_11,
            handler="index.lambda_handler",
            code=scheduler_code,
            role=lambda_role,
        )

        # 定时停止规则(示例:北京时间20:00 = UTC 12:00,根据你的时区调整)
        stop_rule = events.Rule(self, "SageMakerStopRule",
            schedule=events.Schedule.cron(
                minute="0",
                hour="12",
                day="*",
                month="*",
                week_day="*"
            )
        )
        stop_rule.add_target(targets.LambdaFunction(sm_scheduler_lambda,
            event=events.RuleTargetInput.from_object({"action": "stop"})
        ))

        # 定时启动规则(示例:北京时间次日08:00 = UTC 00:00,根据你的时区调整)
        start_rule = events.Rule(self, "SageMakerStartRule",
            schedule=events.Schedule.cron(
                minute="0",
                hour="0",
                day="*",
                month="*",
                week_day="*"
            )
        )
        start_rule.add_target(targets.LambdaFunction(sm_scheduler_lambda,
            event=events.RuleTargetInput.from_object({"action": "start"})
        ))

3. 关键注意事项

  • 时区转换:EventBridge的cron表达式默认使用UTC时间,需将本地时间换算为UTC后配置
  • 端点兼容性:先在控制台手动测试目标端点的启停功能,确认其支持该操作(部分老版本端点可能不兼容)
  • 权限优化:示例中使用了全量SageMaker权限,生产环境建议自定义IAM策略,仅允许StartEndpoint、StopEndpoint等必要操作
  • 多端点管理:若需管理多个端点,可修改Lambda代码,通过环境变量或事件参数传递端点名称,实现批量调度

内容的提问来源于stack exchange,提问作者Sazzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 14:55:31