使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

使用 Hugging Face 和 Amazon SageMaker 异步推理终端节点改进高价值研究

我们的许多 AWS 客户都提供研究、分析和商业智能即服务。 这种类型的研究和商业智能使他们的最终客户能够领先于市场和竞争对手,识别增长机会并主动解决问题。 例如,我们的一些金融服务行业客户为股票、对冲基金和投资管理公司进行研究,以帮助他们了解趋势并确定投资组合策略。 在健康产业中,越来越多的健康研究现在是基于信息的。 大量研究需要分析最初为诊断、治疗或其他研究项目收集的数据,现在正用于新的研究目的。 这些形式的健康研究导致了有效的一级预防以避免新病例,二级预防用于早期发现,以及预防以更好地管理疾病。 研究成果不仅提高了生活质量,还有助于减少医疗费用。

客户倾向于从公共和私人来源消化信息。 然后,他们应用已建立或自定义的自然语言处理 (NLP) 模型来总结和识别趋势,并根据此信息生成见解。 用于这些类型的研究任务的 NLP 模型处理大型模型,并且通常涉及要根据语料库的大小进行总结的长篇文章,以及目前尚未进行成本优化的专用端点。 这些应用程序在一天中的不同时间收到大量传入流量。

我们相信客户将从缩减到零的能力中受益匪浅,并根据需要提高推理能力。 这优化了研究成本,并且仍然不会影响推理的质量。 这篇文章讨论了如何拥抱脸 亚马逊SageMaker 异步推理可以帮助实现这一点。

您可以使用 TensorFlow、PyTorch 和 Apache MXNet 等多个深度学习框架构建文本摘要模型。 这些模型通常具有大量不同大小的文本文档的输入负载。 高级深度学习模型需要在模型推理之前进行计算密集型预处理。 处理时间可能长达几分钟,这消除了通过 HTTP API 传递有效负载来运行实时推理的选项。 相反,您需要从对象存储异步处理输入有效负载,例如 亚马逊简单存储服务 (Amazon S3) 具有自动排队和预定义的并发阈值。 系统应该能够在任务完成时通过清理资源来接收状态通知并减少不必要的成本。

SageMaker 汇集了一系列专为 ML 构建的功能,可帮助数据科学家和开发人员快速准备、构建、训练和部署高质量的机器学习 (ML) 模型。 SageMaker 为 XGBoost (容器, 软件开发套件(SDK) ), Scikit-学习 (容器, 软件开发套件(SDK) )、PyTorch (容器, 软件开发套件(SDK) ), 张量流 (容器, 软件开发套件(SDK) ) 和 Apache MXNet (容器, 软件开发套件(SDK) ).

SageMaker 提供了四个选项来部署经过训练的 ML 模型,以便对新数据进行推理。
  1. 实时推断 端点适用于需要以毫秒到秒级的低延迟要求进行处理的工作负载。
  2. 批量转换 非常适合对大批量数据进行离线预测。
  3. Amazon SageMaker 无服务器推理 (在预览模式下,在撰写本文时不推荐用于生产工作负载)是一种专门构建的推理选项,可让您轻松部署和扩展 ML 模型。 无服务器推理非常适合在流量激增之间具有空闲期并且可以容忍冷启动的工作负载。
  4. 异步推理 端点对传入请求进行排队。 它们非常适合请求大小很大(最多 1 GB)且推理处理时间为几分钟(最多 15 分钟)的工作负载。 当没有要处理的请求时,异步推理使您能够通过将实例计数自动缩放为零来节省成本。

解决方案概述

在这篇文章中,我们部署了一个 飞马模型 这是经过预先训练以进行文本摘要的 拥抱脸 至 SageMaker 托管服务. 为简单起见,我们使用 Hugging Face 中的模型。 但是,您可以 基于自定义数据集微调模型. 您还可以尝试其他可用的模型 拥抱脸模型中心. 我们还提供了一个异步推理端点来托管此模型,您可以从中获得预测。

异步推理端点的推理处理程序需要文章作为输入负载。 文章的摘要文本是输出。 输出存储在数据库中,用于分析趋势或向下游馈送以进行进一步分析。 这种下游分析得出有助于研究的数据见解。

我们演示了异步推理端点如何使您能够拥有用户定义的并发和完成通知。 我们将端点后面的实例配置为自动缩放,以在流量下降时缩小到零,并在请求队列填满时重新放大。

我们也用 亚马逊CloudWatch 监控队列大小、总处理时间和处理的调用的指标。

在下图中,我们展示了使用异步推理端点执行推理时所涉及的步骤。

使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

  1. 我们的预训练 飞马 ML 模型首先托管在扩展端点上。
  2. 用户将要汇总的文章上传到输入 S3 存储桶。
  3. 使用 API 调用异步推理端点。
  4. 推理完成后,将结果保存到输出 S3 存储桶中。
  5. An 亚马逊简单通知服务 (Amazon SNS) 通知会发送给用户,通知他们完成的成功或失败。

创建异步推理端点

我们创建类似于实时托管端点的异步推理端点。 这些步骤包括创建 SageMaker 模型,然后配置端点和部署端点。 这两种端点的区别在于异步推理端点配置包含一个 AsyncInferenceConfig 部分。 在这里,我们为端点调用的结果指定 S3 输出路径,并可选择包含 SNS 主题以通知成功和失败。 我们还指定客户确定的每个实例的最大并发调用数。 请参阅以下代码:

AsyncInferenceConfig={ "OutputConfig": { "S3OutputPath": f"s3://{bucket}/{bucket_prefix}/output", # Optionally specify Amazon SNS topics for notifications "NotificationConfig": { "SuccessTopic": success_topic, "ErrorTopic": error_topic, } }, "ClientConfig": { "MaxConcurrentInvocationsPerInstance": 2 #increase this value up to throughput peak for ideal performance } }

有关为异步推理创建端点配置的 API 的详细信息,请参阅 创建异步推理端点.

调用异步推理端点

以下屏幕截图显示了我们用作输入有效负载的简短文章:
使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

以下代码将文章上传为 input.json 文件到 Amazon S3:

sm_session.upload_data( input_location, bucket=sm_session.default_bucket(), key_prefix=prefix, extra_args={"ContentType": "text/plain"})

我们使用输入有效负载文件的 Amazon S3 URI 来调用终端节点。 响应对象包含 Amazon S3 中的输出位置,以在完成后检索结果:

response = sm_runtime.invoke_endpoint_async(EndpointName=endpoint_name, InputLocation=input_1_s3_location)
output_location = response['OutputLocation']

以下屏幕截图显示了汇总后的示例输出:
使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

有关调用异步推理端点的 API 的详细信息,请参阅 调用异步推理端点.

使用用户定义的并发对调用请求进行排队

异步推理端点自动将调用请求排队。 这是一个具有各种监控指标的完全托管队列,不需要任何进一步的配置。 它使用 MaxConcurrentInvocationsPerInstance 前面的端点配置中的参数,用于在先前的请求完成后处理来自队列的新请求。 MaxConcurrentInvocationsPerInstance 是 SageMaker 客户端向模型容器发送的最大并发请求数。 如果未提供任何值,SageMaker 会为您选择一个最佳值。

异步推理端点内的自动缩放实例

我们将 Auto Scaling 策略设置为最小容量为零,最大容量为 XNUMX 个实例。 与实时托管端点不同,异步推理端点通过将最小容量设置为零来支持将实例缩减为零。 我们使用 ApproximateBacklogSizePerInstance 扩展策略配置的指标,每个实例的目标队列积压为 XNUMX 个,以进一步扩展。 我们将冷却时间设置为 ScaleInCooldown 到 120 秒和 ScaleOutCooldown 到 120 秒。 价值为 ApproximateBacklogSizePerInstance 是根据流量和您对扩展速度的敏感度选择的。 缩小的速度越快,产生的成本就越低,但当有新请求进来时,你就越有可能再次扩大规模。缩小的速度越慢,产生的成本就越高,但你不太可能拥有当您规模不足时,会收到一个请求。

client = boto3.client('application-autoscaling') # Common class representing Application Auto Scaling for SageMaker amongst other services resource_id='endpoint/' + endpoint_name + '/variant/' + 'variant1' # This is the format in which application autoscaling references the endpoint response = client.register_scalable_target(
ServiceNamespace='sagemaker', #
ResourceId=resource_id,
ScalableDimension='sagemaker:variant:DesiredInstanceCount',
MinCapacity=0,
MaxCapacity=5
) response = client.put_scaling_policy(
PolicyName='Invocations-ScalingPolicy',
ServiceNamespace='sagemaker', # The namespace of the AWS service that provides the resource.
ResourceId=resource_id, # Endpoint name
ScalableDimension='sagemaker:variant:DesiredInstanceCount', # SageMaker supports only Instance Count
PolicyType='TargetTrackingScaling', # 'StepScaling'|'TargetTrackingScaling'
TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [{'Name': 'EndpointName', 'Value': endpoint_name }], 'Statistic': 'Average',
}, 'ScaleInCooldown': 120, # ScaleInCooldown - The amount of time, in seconds, after a scale-in activity completes before another scale in activity can start. 'ScaleOutCooldown': 120 # ScaleOutCooldown - The amount of time, in seconds, after a scale-out activity completes before another scale out activity can start.
# 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled.
# If the value is true, scale-in is disabled and the target tracking policy won't remove capacity from the scalable resource.
}
)

有关自动扩展异步推理端点的 API 的详细信息,请参阅 自动缩放异步推理端点.

配置来自异步推理端点的通知

我们为每个端点调用结果创建两个单独的 SNS 主题,用于成功和错误通知:

sns_client = boto3.client('sns')
response = sns_client.create_topic(Name="Async-Demo-ErrorTopic2")
error_topic = response['TopicArn']
response = sns_client.create_topic(Name="Async-Demo-SuccessTopic2")
success_topic = response['TopicArn']

通知的其他选项包括定期检查 S3 存储桶的输出,或使用 S3 存储桶通知来初始化 AWS Lambda 文件上传功能。 如前所述,SNS 通知包含在端点配置部分中。

有关如何从异步推理端点设置通知的详细信息,请参阅 检查预测结果.

监控异步推理端点

我们使用特定于异步推理的内置附加 CloudWatch 指标监控异步推理端点。 例如,我们监控每个实例中的队列长度 ApproximateBacklogSizePerInstance 和总队列长度 ApproximateBacklogSize.

有关指标的完整列表,请参阅 监控异步推理端点.

我们可以优化端点配置,以获得最具成本效益的高性能实例。 例如,我们可以使用带有 Amazon Elastic Inference 或 AWS Inferentia 的实例。 我们还可以在调整其他模型服务器和容器参数的同时,逐渐将并发级别提高到吞吐量峰值。

CloudWatch 图表

我们模拟了在一段时间内流入异步推理端点的 10,000 个推理请求的流量,该端点使用上一节中描述的 Auto Scaling 策略启用。

以下屏幕截图显示了请求开始流入之前的实例指标。我们从一个运行零个实例的实时端点开始:
使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

下图展示了如何 BacklogSizeBacklogSizePerInstance 随着 Auto Scaling 的启动,指标会发生变化,并且端点上的负载由作为 Auto Scaling 过程的一部分预置的多个实例共享。
使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

如以下屏幕截图所示,实例数量随着推理计数的增加而增加:
使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

以下屏幕截图显示了缩减如何将端点恢复到零运行实例的初始状态:
使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。

清理

在所有请求完成后,我们可以删除端点,类似于删除实时托管端点。 请注意,如果我们将异步推理端点的最小容量设置为零,则在缩减到零后不会产生实例费用。

如果您为终端节点启用了 Auto Scaling,请确保在删除终端节点之前取消将终端节点注册为可扩展目标。 为此,请运行以下代码:

response = client.deregister_scalable_target(ServiceNamespace='sagemaker',ResourceId='resource_id',ScalableDimension='sagemaker:variant:DesiredInstanceCount')

请记住在使用后删除您的端点,因为您将为此演示中使用的实例付费。

sm_client.delete_endpoint(EndpointName=endpoint_name)

您还需要删除 S3 对象和 SNS 主题。 如果您创建了任何其他 AWS 资源来使用和操作 SNS 通知,您可能还想删除它们。

结论

在这篇文章中,我们演示了如何使用 SageMaker 的新异步推理功能来处理作为摘要任务一部分的典型大型输入负载。 对于推理,我们使用了 Hugging Face 的模型并将其部署在异步推理端点上。 我们解释了突发流量、模型处理时间长和研究分析涉及的大量有效负载的常见挑战。 异步推理端点管理内部队列、预定义并发限制、配置响应通知和自动缩减为零的固有能力帮助我们解决了这些挑战。 此示例的完整代码可在 GitHub上.

要开始使用 SageMaker 异步推理,请查看 异步推理.


作者简介

使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。迪内什·库马尔·苏布拉马尼 是位于苏格兰爱丁堡的 UKIR SMB 团队的高级解决方案架构师。 他专攻人工智能和机器学习。 Dinesh 喜欢与各行各业的客户合作,帮助他们解决使用 AWS 服务的问题。 工作之余,他喜欢与家人共度时光、下棋和欣赏各种流派的音乐。

使用 Hugging Face 和 Amazon SageMaker 异步推理端点 PlatoBlockchain 数据智能改进高价值研究。 垂直搜索。 哎。拉古·拉梅沙 是 Amazon SageMaker 服务团队的一名 ML 解决方案架构师。 他专注于帮助客户大规模构建、部署和迁移 ML 生产工作负载到 SageMaker。 他专注于机器学习、人工智能和计算机视觉领域,并拥有 UT Dallas 的计算机科学硕士学位。 在空闲时间,他喜欢旅行和摄影。

时间戳记:

更多来自 AWS机器学习