通过自动关闭空闲应用程序来优化Amazon SageMaker Canvas的成本

“优化Amazon SageMaker Canvas成本:自动关闭空闲应用程序的方法”

Amazon SageMaker Canvas 是一款功能丰富的、无代码的机器学习(ML)和生成式人工智能工作空间,凭借其直观、无代码的界面,让全球客户更轻松地采用ML技术来解决新旧挑战。它全面覆盖了ML的工作流程,无论你需要强大的数据准备和自动化机器学习、托管的终端部署、简化的MLOps能力,还是由AWS AI服务和生成式人工智能驱动的即用型模型,SageMaker Canvas都可以帮助你实现目标。

随着各种规模的公司采用SageMaker Canvas,用户要求优化成本。根据AWS Well-Architected Framework的定义,优化成本的工作负载充分利用所有资源,满足功能需求,并以最低的价格达到预期结果。

今天,我们将为SageMaker Canvas应用程序引入一种新的方式来进一步优化成本。SageMaker Canvas现在收集Amazon CloudWatch指标,提供应用程序使用情况和闲置状态的洞察。客户可以利用这些信息自动关闭闲置的SageMaker Canvas应用程序,避免产生意外成本。

在本文中,我们将展示如何使用简单的无服务架构实现自动关闭闲置的SageMaker Canvas应用程序以控制成本。本文中使用的模板可以在GitHub上找到。

了解和跟踪成本

教育始终是理解和控制任何工作负载的成本的第一步,无论是在本地还是在云上。让我们首先回顾一下SageMaker Canvas定价模型。简而言之,SageMaker Canvas采用按使用付费的定价模型,基于两个维度:

  • 工作空间实例:以前被称为会话时间,是运行SageMaker Canvas应用程序的成本
  • AWS服务费用:与训练模型、部署终端、生成推断(为了启动SageMaker Canvas所需的资源)相关的成本。

客户始终对SageMaker Canvas启动的资源有完全控制,并可以使用AWS计费和成本管理服务跟踪与SageMaker Canvas应用程序相关的成本。有关更多信息,请参阅在SageMaker Canvas中管理账单和成本

为了限制与工作空间实例相关的成本,作为最佳实践,您必须注销,不要关闭浏览器选项卡。要注销,请选择SageMaker Canvas应用程序左侧面板上的注销按钮。

自动关闭SageMaker Canvas应用程序

对于希望提供自动控制以关闭SageMaker Canvas应用程序并控制成本的IT管理员,有两种方法:

  1. 按计划关闭应用程序(每天19:00或每周五18:00)
  2. 自动关闭闲置应用程序(当应用程序连续两小时未使用时)

按计划关闭应用程序

Canvas按计划关闭架构

使用Amazon EventBridge Cron规则和计算组件(AWS Lambda函数),可以通过使用cron表达式实现SageMaker Canvas应用程序的定时关机。该计算组件调用Amazon SageMaker API DeleteApp。这种方法在使用AWS CDK和AWS Service Catalog提供和管理ML环境的Amazon SageMaker Canvas文章中进行了讨论,并在关联的GitHub存储库中实现。

上述架构的优点之一是非常简单地复制它以实现SageMaker Canvas应用程序的定时创建。通过使用定时创建和定时删除的组合,云管理员可以确保SageMaker Canvas应用程序在用户开始工作日(例如,工作日上午9点)时准备就绪,并且在工作日结束(例如,工作日下午7点)自动关闭,周末始终关闭。只需要更改调用DeleteApp API的代码行为CreateApp,并更新cron表达式以反映所需的应用程序创建时间。

尽管这种方法非常容易实施和测试,但该建议的架构的一个缺点是,它不考虑应用程序当前是否正在使用,并在不考虑当前活动状态的情况下关闭应用程序。根据不同的情况,这可能会与活动用户产生摩擦,这些用户可能会突然看到自己的会话被终止。

您可以从以下GitHub存储库中检索与此架构相关联的模板:

自动关闭闲置应用程序

闲置时画布关闭架构

从今天开始,Amazon SageMaker Canvas发出CloudWatch指标,提供有关应用程序使用和闲置的洞察。这使管理员能够定义一种解决方案,读取空闲度指标,将其与阈值进行比较,并定义自动关闭的特定逻辑。SageMaker Canvas发出的空闲度指标的更详细概述如下所示。

为了根据空闲度指标自动关闭SageMaker Canvas应用程序,我们提供了一个AWS CloudFormation模板。该模板由三个主要组件组成:

  1. 一个Amazon CloudWatch警报,它运行一个查询来检查TimeSinceLastActive指标的最大值。如果此值大于提供给CloudFormation模板的阈值,则触发其余的自动化。此查询可以在单个用户配置文件、单个域或所有域上运行。根据您希望拥有的控制级别,您可以使用:
    1. all-domains-all-users模板,在部署模板的区域中检查所有用户和所有域
    2. one-domain-all-users模板,在部署模板的区域中检查一个域中的所有用户
    3. one-domain-one-user模板,在部署模板的区域中为一个用户配置文件检查此项
  2. 警报状态更改会在Amazon EventBridge中的默认事件总线上创建一个事件,该事件设置了一个触发AWS Lambda函数的Amazon EventBridge规则
  3. AWS Lambda函数识别在闲置超过指定阈值的情况下运行的SageMaker Canvas应用程序,并使用DeleteApp API删除它。

您可以从以下GitHub存储库检索与此架构相关的AWS CloudFormation模板:

SageMaker Canvas 空闲度指标的工作原理

SageMaker Canvas 在 /aws/sagemaker/Canvas/AppActivity 命名空间中发出了一个 TimeSinceLastActive 指标,该指标显示了应用程序在没有用户活动的情况下空闲的秒数。我们可以使用这个新指标来在应用程序空闲一段时间后自动关闭 SageMaker Canvas 应用。SageMaker Canvas 使用以下模式公开了 TimeSinceLastActive

{    "Namespace": "/aws/sagemaker/Canvas/AppActivity",    "Dimensions": [        [            "DomainId",            "UserProfileName"        ]    ],    "Metrics": [        {            "Name": "TimeSinceLastActive",            "Unit": "Seconds",            "Value": 12345        }    ]}

该指标的关键组件如下:

  • Dimensions,特别是 DomainIDUserProfileName,允许管理员确定所有领域和用户中哪些应用程序处于空闲状态
  • 指标的 Value,它表示 SageMaker Canvas 应用程序的最后一次活动距今的秒数。SageMaker Canvas 将以下内容视为活动:
    • 在 SageMaker Canvas 应用程序中进行的任何操作(点击按钮、转换数据集、生成应用内推断、部署模型);
    • 使用现成的模型或与生成式 AI 模型通过聊天界面进行交互;
    • 在特定时间安排运行的批量推断;有关详细信息,请参阅Manage automations

可以通过 Amazon CloudWatch API(如 get_metric_data)读取此指标。例如,使用 AWS Python SDK(boto3):

import boto3, datetimecw = boto3.client('cloudwatch')metric_data_results = cw.get_metric_data(    MetricDataQueries=[        {            "Id": "q1",            "Expression": 'SELECT MAX(TimeSinceLastActive) FROM "/aws/sagemaker/Canvas/AppActivity" GROUP BY DomainId, UserProfileName',            "Period": 900        }    ],    StartTime=datetime.datetime(2023, 1, 1),    EndTime=datetime.datetime.now(),    ScanBy='TimestampAscending')

Python 查询从与 SageMaker Canvas 关联的命名空间中提取了 TimeSinceLastActiveMAX 值,并根据 DomainIDUserProfileName 对这些值进行了分组。

部署和测试自动关闭解决方案

要部署自动关闭堆栈,请执行以下操作:

  1. 从上述GitHub存储库中下载与您要实施的解决方案相关的AWS CloudFormation模板。选择是否要为所有SageMaker域,单个SageMaker域或单个用户实施解决方案;
  2. 更新模板参数:
    1. 空闲超时 – 允许 SageMaker Canvas 应用程序在空闲状态下保持多长时间(以秒为单位),然后自动关闭;默认值为2小时
    2. 警报周期 – CloudWatch Alarm 用于计算空闲超时的聚合时间(以秒为单位);默认值为20分钟
    3. (可选)SageMaker 域 ID 和用户配置文件名称
  3. 部署 CloudFormation 堆栈以创建资源

部署后(应该少于两分钟),AWS Lambda 函数和 Amazon CloudWatch 警报将配置为在应用程序空闲时自动关闭 Canvas 应用。要测试自动关闭脚本,请执行以下操作:

  1. 确保SageMaker Canvas应用程序在正确的域内运行,并且使用正确的用户配置文件(如果已配置)。
  2. 停止使用SageMaker Canvas应用程序,并等待闲置超时时间(默认为2小时)
  3. 通过检查CloudWatch告警是否已触发并在触发自动化后恢复到正常状态来检查应用程序在达到阈值时间后是否已停止闲置。

在我们的测试中,我们将闲置超时时间设置为两小时(7200秒)。在由Amazon CloudWatch Metrics绘制的下图中,您可以看到SageMaker Canvas应用程序一直在发出TimeSinceLastActive指标,直到达到阈值(1),触发了告警。一旦告警触发,AWS Lambda函数将被执行,删除了应用程序并将指标恢复到阈值以下(2)。

Canvas自动关闭度量图

结论

在本文中,我们使用AWS Lambda和CloudWatch Alarm以及SageMaker Canvas的新闲置指标实现了自动关闭闲置SageMaker Canvas应用程序的解决方案。通过这个解决方案,客户不仅可以优化其机器学习工作负载的成本,还可以避免因为忘记在他们的SageMaker Domain上运行的应用程序而导致的意外费用。

我们期待看到客户通过这个解决方案带来的安心解决了哪些新的用例和工作负载。要了解更多关于SageMaker Canvas如何帮助您实现业务目标的示例,请参考以下文章:

要了解如何使用Amazon SageMaker Canvas运行生产级工作负载,请参考以下文章: