识别 Amazon SageMaker 中的闲置端点 机器学习博客
确定 Amazon SageMaker 中的闲置端点
作者:Pablo Colazurdo 和 Ozgur Canibeyaz 日期:2024 年 7 月 1 日
在亚马逊 SageMaker 中闲置端点的识别
关键要点
本文介绍了如何识别并管理 Amazon SageMaker 中的闲置端点。提供了解决方案,利用 Python 脚本自动检测闲置端点,以优化资源利用。讨论了识别闲置端点后可采取的优化措施,以降低运营成本。Amazon SageMaker 是一个旨在简化构建、训练、部署和管理机器学习 (ML) 模型的机器学习平台。凭借全面的工具和服务套件,SageMaker 为开发人员和数据科学家提供了加速开发和部署 ML 解决方案所需的资源。
在当今快速发展的技术领域,效率和敏捷性对于追求创新的企业和开发者至关重要。AWS 在推动这一创新中发挥了核心作用,提供了一系列服务以简化基础设施管理的复杂性。通过处理诸如资源的配置、扩展和管理等任务,AWS 使开发者能够更加专注于核心业务逻辑,快速迭代新想法。
随着开发者部署和扩展应用程序,未被使用的资源,比如闲置的 SageMaker 端点,可能会悄然积累,导致更高的运营成本。本文针对如何识别和管理 SageMaker 中的闲置端点进行了讨论。我们将探讨监控 SageMaker 端点的有效方法,并区分活跃端点与闲置端点。此外,我们还将介绍一个 Python 脚本,用于利用 Amazon CloudWatch 指标 自动识别闲置端点。
使用 Python 脚本识别闲置端点
为了有效管理 SageMaker 端点并优化资源利用,我们使用一个 Python 脚本,该脚本利用 AWS SDK for Python (Boto3) 与 SageMaker 和 CloudWatch 交互。这个脚本自动查询 CloudWatch 指标,以确定端点活动,并基于指定时间段内的调用次数识别闲置端点。
下面我们分解 Python 脚本的关键组件,并解释每个部分如何贡献于闲置端点的识别:
全局变量和 AWS 客户端初始化 脚本开始时导入必要模块,并初始化全局变量,如 NAMESPACE、METRIC、LOOKBACK 和 PERIOD。这些变量定义了查询 CloudWatch 指标和 SageMaker 端点的参数。此外,使用 Boto3 初始化与 SageMaker 和 CloudWatch 服务的交互 AWS 客户端。pythonfrom datetime import datetime timedeltaimport boto3import logging
初始化 AWS 客户端
cloudwatch = boto3client(cloudwatch)sagemaker = boto3client(sagemaker)
全局变量
NAMESPACE = AWS/SageMakerMETRIC = InvocationsLOOKBACK = 1 # 回顾活动的天数PERIOD = 86400 # 我们选择每1天为一个粒度,以减少检索的指标量,同时保持准确性。
计算查询 CloudWatch 指标的时间范围
ago = datetimeutcnow() timedelta(days=LOOKBACK)now = datetimeutcnow()
识别闲置端点 根据 CloudWatch 指标数据,脚本判断端点是闲置还是活跃。如果一个端点在定义的时段内没有接收到任何调用,则将其标记为闲置。在此情况下,我们选择了一个谨慎的默认阈值,即在分析期间内零次调用。但是,根据您的具体用例,可以调整此阈值以满足需求。python
从 CloudWatch 指标提取端点名称的辅助函数
def getendpointnamefrommetric(metric) for d in metric[Dimensions] if d[Name] == EndpointName or d[Name] == InferenceComponentName yield d[Value]
辅助函数,用于聚合指定端点的个别指标并输出总数。这项验证有助于确定该端点在规定期间内是否闲置。
def listmetrics() paginator = cloudwatchgetpaginator(listmetrics) responseiterator = paginatorpaginate(Namespace=NAMESPACE MetricName=METRIC) return [m for r in responseiterator for m in r[Metrics]]
辅助函数,根据 CloudWatch 指标检查端点是否在使用中
def isendpointbusy(metric) metricvalues = cloudwatchgetmetricdata( MetricDataQueries=[{ Id metricname MetricStat { Metric { Namespace metric[Namespace] MetricName metric[MetricName] Dimensions metric[Dimensions] } Period PERIOD Stat Sum Unit None } }] StartTime=ago EndTime=now ScanBy=TimestampAscending MaxDatapoints=24 (LOOKBACK 1) ) return sum(metricvaluesget(MetricDataResults [{}])[0]get(Values [])) gt 0
辅助函数,记录端点活动
def logendpointactivity(endpointname isbusy) status = BUSY if isbusy else IDLE logmessage = f{datetimeutcnow()} Endpoint {endpointname} {status} print(logmessage)
主函数 main() 函数作为运行脚本的入口点。它协调检索 SageMaker 端点、查询 CloudWatch 指标和记录端点活动的过程。python
主函数,识别闲置端点并记录其活动状态
def main() endpoints = sagemakerlistendpoints()[Endpoints]
if not endpoints print(未找到端点) returnexistingendpointsname = []for endpoint in endpoints existingendpointsnameappend(endpoint[EndpointName])for metric in listmetrics() for endpointname in getendpointnamefrommetric(metric) if endpointname in existingendpointsname isbusy = isendpointbusy(metric) logendpointactivity(endpointname isbusy) else print(f端点 {endpointname} 未激活)if name == main main()
通过逐步解释脚本,您将深入了解如何自动化识别 SageMaker 中的闲置端点,为更有效的资源管理和成本优化铺平道路。
运行脚本所需的权限
在运行提供的 Python 脚本以识别 SageMaker 中的闲置端点之前,请确保您的 AWS 身份与访问管理 (IAM) 用户或角色具有必要的权限。脚本所需的权限包括:
CloudWatch 权限 运行脚本的 IAM 实体必须具有 cloudwatchGetMetricData 和 cloudwatchListMetrics 的 CloudWatch 操作权限。SageMaker 权限 IAM 实体必须具有使用 sagemakerListEndpoints 操作列出 SageMaker 端点的权限。运行 Python 脚本
您可以通过多种方法运行此 Python 脚本,包括:
AWS CLI 确保已安装并配置适当凭据的 AWS 命令行界面 (AWS CLI)。AWS Cloud9 如果您更喜欢基于云的集成开发环境 (IDE),AWS Cloud9 提供具有预配置设置的 AWS 开发 IDE。只需创建一个新的环境,克隆脚本库,并在 Cloud9 环境中运行脚本。在本文章中,我们演示了通过 AWS CLI 运行 Python 脚本的过程。

识别闲置端点后的后续行动
成功识别 SageMaker 环境中的闲置端点后,您可以采取主动步骤以优化资源利用并降低运营成本。以下是一些可实施的措施:
删除或缩减端点 对于在较长时间内没有任何活动的端点,考虑删除或缩减它们以最小化资源浪费。SageMaker 允许您通过 AWS 管理控制台或使用 AWS SDK 程序化地 删除闲置端点。审查和优化模型部署策略 评估机器学习模型的部署策略,并评估所有部署的端点是否有必要。有时,端点可能由于业务需求或模型更新的变化而变得闲置。通过审查您的部署策略,您可以识别合并或优化端点的机会,以提高效率。实施自动缩放策略 配置自动缩放策略 以动态调整活动端点的计算能力,基于工作负载需求进行自动调整。SageMaker 支持自动缩放,允许您根据 CPU 利用率或推断延迟等预定义指标自动增加或减少提供预测的实例数量。探索无服务器推理选项 考虑使用 SageMaker 无服务器推理 作为传统端点配置的替代方案。无服务器推理消除了手动管理端点的需求,通过根据输入的预测请求自动扩展计算资源。对于间歇性或不可预测的工作负载,这可以显著减少闲置容量并优化成本。结论
在本文中,我们讨论了在 SageMaker 中识别闲置端点的重要性,并提供了一个 Python 脚本以帮助自动化此过程。通过实施主动监控解决方案和优化资源利用,SageMaker 用户可以有效管理其端点,降低运营成本,并最大限度提高机器学习工作流的效率。
开始使用本文演示的技术,以自动化 SageMaker 推理的成本监控。探索 AWS rePost 以获得有关优化云基础设施和最大限度利用 AWS 服务的宝贵资源。
资源
有关本文中使用的功能和服务的更多信息,请参考以下链接:
飞鱼加速npv推理成本优化最佳实践使用 Amazon SageMaker 优化机器学习的成本无服务器推理使用 Amazon CloudWatch 指标作者简介
Pablo Colazurdo 是 AWS 的首席解决方案架构师,热衷于帮助客户在云中启动成功项目。他拥有多年从事各种技术的经验,并对学习新事物充满热情。Pablo 出生于阿根廷,现在在爱尔兰享受雨天,倾听音乐、阅读或与孩子们一起玩 DampD。
Ozgur Canibeyaz 是 AWS 的高级技术客户经理,拥有 8 年的经验。他帮助客户优化 AWS 使用,通过解决技术挑战、探索节约成本的机会、实现运营卓越和使用 AWS 产品构建创新服务。