AWS Machine Learning Blog

Amazon SageMaker AI Async Inference now supports inline request payloads

8.5内容质量
Amazon SageMaker AI Async Inference now supports inline request payloads

TL;DR · AI 摘要

Amazon SageMaker AI Async Inference 现支持内联请求负载,无需上传到 S3,简化流程并减少延迟。

核心要点

  • Amazon SageMaker AI Async Inference 现支持内联请求负载,最大 128,000 字节。
  • 内联负载可减少网络往返,简化客户端代码,降低操作复杂度。
  • 新功能适用于 31 个商业 AWS 区域,无需修改现有异步端点。

结构提纲

按章节快速跳转。

  1. Amazon SageMaker AI Async Inference 现支持内联请求负载,无需上传到 S3

  2. 之前异步推理需要先上传输入负载到 S3,再调用端点。

  3. ·新功能:通过 Body 参数内联负载

    现在 InvokeEndpointAsync 接受 Body 参数,允许直接在请求中发送负载。

  4. 代码示例展示了使用 S3 和使用内联 Body 参数的异步调用方式。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Amazon SageMaker AI Async Inference
    • 新功能:内联请求负载
      • 支持最大 128,000 字节
      • 无需上传到 S3
      • 适用于 31 个 AWS 区域
    • 背景:旧流程
      • 需要上传到 S3
      • 调用端点时传递 S3 URI
      • 输出写入 S3 输出位置

金句 / Highlights

值得收藏与分享的关键句。

  • For payloads up to 128,000 bytes, this removes an entire network round-trip, simplifies client-side code, and reduces the operational surface area of asynchronous inference workloads.

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • The new Body parameter allows payloads to be sent inline in the API request itself, with no S3 upload required.

    第 3 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • The feature is available in 31 commercial AWS Regions, including BOM, PDX, YUL, IAD, and others.

    第 4 段

    ⬇︎ 下载 PNG𝕏 分享到 X
#AWS#SageMaker#AI#异步推理
打开原文

Amazon SageMaker AI 异步推理现在支持内联请求负载 | 人工智能

Amazon SageMaker AI 异步推理现在支持内联请求负载

今天,我们宣布 Amazon SageMaker AI 异步推理现在支持内联负载。客户现在可以直接在 InvokeEndpointAsync API 请求体中发送推理负载,无需在每次调用之前将输入数据上传到 Amazon Simple Storage Service(Amazon S3)。

对于最大为 128,000 字节的负载,这消除了整个网络往返,简化了客户端代码,并减少了异步推理工作负载的操作表面区域。

在本文中,我们将解释这一功能的动机,介绍使用该功能前后客户的体验,并向您展示如何今天开始使用内联负载。

背景:异步推理之前的工作方式

您可以使用 Amazon SageMaker AI 异步推理来排队推理请求并异步处理它们。它适用于具有大负载、可变流量或容忍数秒到数分钟延迟的工作负载。它支持自动扩展到零,使其在突发或批量风格的工作负载中具有成本效率。

到目前为止,每次调用都需要两个步骤:

  • 将输入负载上传到 Amazon S3 存储桶。
  • 调用端点,将 S3 对象 URI 作为 InputLocation 传递。

端点异步处理请求,并将输出写入配置的 S3 输出位置,客户端通过轮询或通过 Amazon Simple Notification Service(Amazon SNS)通知接收输出。

这种两步模式对于大负载(图像、音频、多 MB 文档)非常有效。但对于那些需要比实时推理允许的更长处理时间的客户(输入负载为 KB 级),强制性的 S3 依赖关系增加了不必要的复杂性。

新增内容:通过 Body 参数内联负载

随着今天发布的更新,InvokeEndpointAsync 现在接受一个新参数 Body。当存在时,负载直接在 API 请求中发送,无需 S3 上传。

关键细节:

| 方面 | 详情 | |---|---| | 新参数 | Body,原始字节,上限为 128,000 字节。 | | 最大内联大小 | 128,000 字节(原始负载)。 | | 互斥性 | BodyInputLocation 互斥。API 拒绝同时设置两者的请求。 | | 输出行为 | 保持不变。输出写入配置的 S3 OutputLocation。 | | 端点兼容性 | 设计用于与现有异步端点一起工作;预计不需要模型或容器更改。 | | 错误处理 | 大小和互斥性违规返回同步 ValidationError 响应。 | | 可用性 | 在 31 个商业 AWS 区域中可用(BOM, PDX, YUL, IAD, CMH, SFO, LHR, ICN, SYD, HKG, YYC, GRU, QRO, DUB, CDG, FRA, ZRH, ARN, ZAZ, NRT, KIX, SIN, CGK, MEL, KUL, BKK, HYD, TPE, CPT, MXP, TLV) |

使用前与使用后:客户体验

这一变化在代码中最明显。以下两个示例对同一端点执行相同的异步调用。第一个使用到目前为止所需的 S3 上传步骤,第二个使用内联 Body 参数来替代它。

使用前:首先上传到 S3,然后调用

python
import boto3, json, uuid

s3 = boto3.client("s3")
sagemaker_runtime = boto3.client("sagemaker-runtime")

payload = json.dumps({"inputs": "your prompt here"}).encode("utf-8")

1. 将请求负载上传到 S3(额外延迟 + 成本)

input_key = f"async-input/{uuid.uuid4()}.json" s3.put_object(Bucket="my-async-bucket", Key=input_key, Body=payload) input_location = f"s3://my-async-bucket/{input_key}"

2. 调用端点

response = sagemaker_runtime.invoke_endpoint_async( EndpointName="my-async-endpoint", InputLocation=input_location, ContentType="application/json", )

print(response["OutputLocation"])

code

这种方法需要:

- 配置 S3 客户端和输入存储桶。

- 调用者具有 AWS Identity and Access Management (IAM) s3:PutObject 权限。

- 一种命名方案(如 UUID 或类似方式)以避免键冲突。

- 一种清理策略用于处理过期的输入对象。

### 之后:内联发送负载

import boto3, json

sagemaker_runtime = boto3.client("sagemaker-runtime")

payload = json.dumps({"inputs": "your prompt here"}).encode("utf-8")

一次调用,无需上传到 S3,无需输入存储桶

response = sagemaker_runtime.invoke_endpoint_async( EndpointName="my-async-endpoint", Body=payload, ContentType="application/json", )

print(response["OutputLocation"])

code

无需 S3 客户端、无需 UUID、无需输入存储桶、无需输入路径上的 IAM 权限、无需清理过期对象。

## 客户优势

内联发送负载可以减少每个请求的一个网络跳转和一个依赖项。这转化为五个具体优势:

- 减少延迟。每个请求减少一次网络往返和一次 S3 PUT 操作。对于扇出工作负载,这种延迟节省会显著累积。

- 更简单的架构。避免了输入存储桶的配置、生命周期策略、跨账户访问模式以及调用者在输入路径上的 IAM s3:PutObject 权限。

- 更少的错误路径。请求是一个单一的 API 调用。它要么入队,要么不入队。

- 成本更低。每次内联调用都消除了输入上传的 S3 PUT 费用。

- 立即获得验证反馈。大小和互斥错误会同步返回。

## 何时使用每种方法

内联负载通常对于小型负载是更简单的选择,但 InputLocation 仍有其适用场景。使用以下表格来决定哪种方法适合特定的工作负载:

| 场景 | 推荐方法 | 原因 |
|------|----------|------|
| 负载 <= 128,000 字节(JSON 提示、结构化数据) | 内联 | 避免一次网络往返和 S3 PUT 费用。 |
| 负载 > 128,000 字节(图像、音频、大型文档) | 先上传到 S3 | 负载较大时,上传到 S3 更合适。 |
| 混合工作负载,负载大小不一 | 按大小分支 | 对于小负载使用内联,对于大负载使用 S3 上传。 |
| 需要将输入数据保留在 S3 中用于审计或重放 | 使用 InputLocation | 保持输入在您的存储桶中。 |

## 入门

请参阅示例代码笔记本,以获得完整的操作指南。

在开始之前,请确保您已具备以下条件:

- 一个现有的 Amazon SageMaker AI 异步推理端点(使用 `aws sagemaker describe-endpoint --endpoint-name my-async-endpoint` 进行验证)。

- 已安装并配置了最新版本的 Python AWS SDK(Boto3)以及凭证。

- 具有 sagemaker:InvokeEndpointAsync 的 IAM 权限。

- 为您的异步端点配置了一个 S3 输出存储桶(例如,my-output-bucket)。

注意:遵循本指南将使用可计费的 AWS 资源。SageMaker AI 异步推理端点会根据实例小时数收费,S3 存储桶会根据存储和请求收费。完成教程后,请遵循清理步骤以避免持续收费。

### 步骤

内联负载支持目前可用。要使用它:

- 更新你的 AWS SDK。安装或升级 Boto3 到最新版本:pip install --upgrade boto3。

- 验证安装:pip show boto3。

- 替换你的调用代码。在你的应用程序中,将 S3 上传 + InputLocation 模式替换为直接使用 Body 参数,如前面的代码示例所示。

- 通过使用 Body 参数调用 InvokeEndpointAsync API 来测试你的调用。

- 验证响应中包含 OutputLocation 字段。

- 轮询或监控 S3 OutputLocation,以确认你的推理结果已成功写入。

无需对端点配置、模型容器或输出 S3 设置进行任何更改。

## 清理

为了避免持续收费,请删除本演练中使用的资源:

- 如果为测试创建了 SageMaker AI 端点,请将其删除:aws sagemaker delete-endpoint --endpoint-name my-async-endpoint

- 删除输出 S3 存储桶(如果不再需要)。警告:删除 S3 存储桶将永久删除其中的对象。请确认你已备份需要保留的任何推理结果:aws s3 rb s3://my-output-bucket --force

- 删除专门为本教程创建的任何 IAM 策略。

## 结论

SageMaker AI 异步推理的内联负载支持消除了异步推理工作流程中的一个常见摩擦点:每个请求都必须进行 S3 上传。对于大多数大小在 128,000 字节以内的推理负载,你现在可以仅进行一次 API 调用,让 SageMaker AI 处理其余部分。

该功能设计为向后兼容。现有的 InputLocation 工作流程将继续保持不变。一旦请求被接受,内联和 S3 输入的处理方式相同,模型无论输入来源如何都会接收到相同的请求。

今天就通过更新你的 AWS SDK 并在 SageMaker AI InvokeEndpointAsync API 上使用 Body 参数来开始使用。要了解更多关于异步推理的信息,请参阅 Amazon SageMaker AI 异步推理文档。

## 作者简介

'\"