Amazon SageMaker AI 双向流式推理推出按用量计费
Introducing usage-based pricing for Amazon SageMaker AI bidirectional streaming
Amazon SageMaker AI 双向流式推理新增按用量计费能力,模型提供商可通过伴随 WebSocket 元数据连接上报 AWS Marketplace 软件用量,端点基础设施费用仍单独计收。
针对双向流量的基于用量计量解决了实时语音 AI 的软件计费问题。在 Amazon SageMaker AI 双向流式传输上部署流式模型的客户需为托管模型的端点基础设施付费。与此同时,在 AWS Marketplace 上架产品的模型提供商需要一种方式,对客户在实时流中消耗的资源进行收费。今天,我们宣布推出 Amazon SageMaker 双向(bidi)流式推理的基于用量计量,使模型提供商能够为 AWS Marketplace 软件费用报告实际用量。Amazon SageMaker AI 端点基础设施费用仍然适用。
实时语音 AI 公司 Deepgram 是此功能的发布合作伙伴,将基于用量的语音转文本(STT)和文本转语音(TTS)计费引入 AWS Marketplace。本文基于 Deepgram 与 AWS 之间的一系列创新。首先,我们为 Amazon SageMaker AI 上的实时推理引入了双向流式传输,支持客户端与模型服务器之间的长连接双向流。随后,Deepgram 通过 AWS Identity and Access Management(AWS IAM)临时委派增强了 Amazon SageMaker AI 支持,简化了企业部署的安全身份验证,并通过增强指标扩展了可观测性。现在,借助基于用量计量,我们进一步夯实了生产级实时 AI 的基础,使计费方式与客户消费流式和实时 AI 工作负载的方式保持一致。
为什么流式传输打破了现有计费模式
借助 AWS Marketplace 针对 SageMaker AI 实时请求-响应推理的软件计量,模型提供商可以在 HTTP 响应头中报告单位数量。AWS Marketplace 使用该数量计算软件费用。这适用于在发送响应时即可确定计费数量的请求-响应 API。
双向流式传输则不同。客户端通过 SageMaker AI API 使用 HTTP/2 事件流传输音频并接收转录结果。SageMaker AI 通过 WebSocket 连接到模型服务器。一个会话可能持续 30 秒或 30 分钟。用量随会话运行而累积,最终总量直到会话结束才能确定。仅靠响应头无法在实时会话期间报告周期性用量。
按小时软件定价可以在模型可用期间向客户收费,包括空闲时段。借助基于用量计量,提供商可以使 AWS Marketplace 软件费用与报告的用量保持一致。SageMaker AI 端点基础设施费用保持独立,并在端点预配期间继续适用。
配套元数据流式传输的工作原理
该解决方案在现有推理流之外引入了第二条 WebSocket 连接。当双向流式传输会话开始时,SageMaker AI 会与模型服务器建立两个连接:
- 数据连接:承载推理请求和响应数据,即现有的双向流。
- 元数据连接:专用于计量数据的配套 WebSocket。
模型服务器通过在 WebSocket 升级响应中返回一个头来选择启用:
X-Amzn-SageMaker-Metadata-Stream-Supported: true
随后 SageMaker AI 在 /invocations-bidirectional-stream-metadata 处向模型服务器打开一个配套 WebSocket。两个连接都携带相同的 X-Amzn-SageMaker-Request-Id 头,模型服务器使用该头将计量记录与活动推理会话关联起来。
模型服务器在元数据连接上以 JSON 文本帧的形式发送计量数据。发送记录的频率应与计费模式相匹配:随着用量累积增量发送(推荐),可以在每个单位被消耗时发送,也可以按自上次记录以来消耗的单位定期批量发送。会话结束后应尽快发送任何最终记录。每个帧恰好包含一条计量记录,而不是记录数组。元数据流的速率配额为每个连接每秒一条消息,最大消息大小为 512 字节。
我们建议随着用量累积增量发送计量记录。这样可以在会话意外结束时减少未上报的用量。仅凭传输层送达并不能证明用量已被计费。请对照 AWS Marketplace 报告和买家费用来验证上报的单位数。
{
"Metering": {
"Dimension": "inference.count",
"ConsumedUnits": 720,
"ClientToken": "a3f2b1c0-unique-uuid"
}
}计量消息使用 inference.count 维度,由 ConsumedUnits 提供该维度的数量。如果产品按音频秒数计费,一条报告 12 分钟计量音频的记录会以 720 秒作为 ConsumedUnits: 720。维度名称并不意味着每个请求一个单位。由提供商定义哪些音频算作计量用量,AWS Marketplace 商品将该单位映射到其价格。商品信息显示每个单位一个价格,标注为按请求计费,最多支持三位小数。ClientToken 字段支持幂等性。如果同一连接上出现重复令牌,SageMaker AI 会静默丢弃重复消息。
元数据连接通过 TCP 运行,TCP 在传输层提供有序、可靠的送达。如果连接建立失败或在会话中途断开,默认情况下推理会继续,因为 X-Amzn-SageMaker-Metadata-Stream-Required 默认为 false。当提供商必须在元数据流不可用时停止推理时,请将此标头设置为 true。这一选择以推理可用性换取计量的连续性。它并不保证格式错误或丢失的记录会被计费。
这对客户意味着什么
如果你为转录、联络中心、语音代理或字幕部署实时 AI 模型,新的计量模式会改变 AWS Marketplace 软件费用的计算方式。SageMaker AI 端点基础设施费用仍然适用。
通过 AWS Marketplace 进行透明的按单位计费,意味着用量会直接计入你的 AWS 账单。你可以获得统一的 AWS 账单、通过私有报价协商的费率,并且无需管理与模型提供商之间的单独计费关系。
根据产品的单位定义,为已处理的音频付费。如果产品按音频秒数计费,12 分钟的计量音频等于 720 个计费秒和 ConsumedUnits: 720。一个持续 12 分钟的开放连接本身并不定义可计费的音频数量。提供商的计数规则决定计量用量,而端点基础设施费用仍然单独计算。
模型提供商可以通过 AWS Marketplace 私有报价提供协商的按单位费率或固定价格合同。
我们建议直接与你的 AWS 客户代表或合作伙伴代表讨论。
这对模型提供商意味着什么
如果你是 AWS Marketplace 上的模型提供商,你可以配置模型服务器,通过配套的元数据流在流式推理会话期间上报用量。
SageMaker Marketplace Onboarding Agent Skill 通过可选的推理计量路径加速入门流程。其入门模板宣称支持元数据流,并为配套的 WebSocket 构建经过验证的增量 ConsumedUnits 帧。提交前请审查代码并完成生产环境加固。
通过定义单个单位代表什么,并在会话进行过程中上报单位数,使计费与你的定价模型保持一致。AWS Marketplace 对实时推理按每单位一个价格收费。
以下三步演练介绍了如何集成你的模型服务器,以便在双向流式推理会话期间上报计量数据。
第 1 步:使用数据 WebSocket 响应头选择加入
当 SageMaker AI 打开与你的模型服务器之间的数据 WebSocket 连接时,在你的 WebSocket 升级(101)响应中包含以下响应头:
| 响应头 | 是否必需 | 值 | 描述 | |
| 1 | X-Amzn-SageMaker-Metadata-Stream-Supported |
是(用于选择加入) | TRUE | 表示你的模型服务器支持配套的元数据流。如果缺失或不为 true,则不会尝试建立元数据连接。没有元数据流,该会话就不会针对模型提供商的软件费用进行计量。 |
| 2 | X-Amzn-SageMaker-Metadata-Stream-Required |
否 | true / false |
此响应头仅在 X-Amzn-SageMaker-Metadata-Stream-Supported 为 true 时生效。如果为 true,则元数据连接失败时推理会停止。如果为 false 或缺失,推理会以仅数据模式继续。默认值:false。当计量连续性优先于推理可用性时,请选择 true。此设置不保证对格式错误或丢失的记录进行计费。 |
| 3 | X-Amzn-SageMaker-Metadata-Invocation-Path |
否 | 自定义路径字符串 | 覆盖默认的元数据 WebSocket 路径。默认值:/invocations-bidirectional-stream-metadata。 |
第 2 步:接受元数据 WebSocket 连接
在你的模型服务器返回 X-Amzn-SageMaker-Metadata-Stream-Supported: true 后,SageMaker AI 会在默认路径 /invocations-bidirectional-stream-metadata(或你通过 X-Amzn-SageMaker-Metadata-Invocation-Path 指定的自定义路径)上打开与你的模型服务器之间的第二个 WebSocket 连接。
SageMaker AI 在数据 WebSocket 和元数据 WebSocket 握手时都会包含响应头 X-Amzn-SageMaker-Request-Id。你的模型服务器必须执行以下操作:
- 在元数据路径上接受 WebSocket 升级。
- 使用
X-Amzn-SageMaker-Request-Id将元数据连接与同一推理会话对应的数据连接关联起来。
第 3 步:发送计量消息
在元数据连接上,以 WebSocket 文本帧中的 JSON 对象形式发送计量数据。每个帧必须恰好包含一条计量记录。在此示例中,产品按音频秒数收费,该记录将 12 分钟的计量音频上报为 720 个单位:
{
"Metering": {
"Dimension": "inference.count",
"ConsumedUnits": 720,
"ClientToken": "a3f2b1c0-unique-uuid"
}
}消息字段:
| 字段 | 是否必需 | 类型 | 约束 | 描述 | |
| 1 | Metering |
是 | 对象 | — | 计量记录的容器。 |
| 2 | Metering.Dimension |
是 | 字符串 | 必须为 inference.count |
计费维度。必须为 inference.count。 |
| 3 | Metering.ConsumedUnits |
是 | 数字 | 大于或等于 0 | 自你上一条记录以来消耗的单位数。每条记录单独计费。接受值为 0,但不计费。 |
| 4 | Metering.ClientToken |
否 | 字符串 | 最多 64 个字符 | 用于幂等性的唯一令牌(例如 UUID)。如果在同一连接上多次发送相同的 ClientToken,则只记录第一次出现。 |
随着用量累积,增量发送计量记录,以减少会话意外结束时未上报的用量。将上报的数量与 AWS Marketplace 报告和买家费用进行核对,以验证计费,包括中断会话测试。
约束和限制
| 限制 | 值 | 说明 | |
| 1 | 最大消息大小 | 512 字节 | JSON 文本帧的总大小 |
| 2 | 最大发送速率 | 每个连接每秒 1 条消息 | 超过此速率可能导致消息被丢弃 |
| 3 | 最大 Dimension 长度 | 128 个字符 | — |
| 4 | 最大 ClientToken 长度 | 64 个字符 | — |
| 5 | 每帧消息数 | 恰好 1 条 | 不要在单个帧中批量发送多条计量记录 |
| 6 | 帧类型 | 仅支持文本帧 | 计量不支持二进制帧 |
错误处理与失败模式
Required 头控制当元数据连接不可用时会发生什么。将其设置为 true 以停止推理,或使用默认值 false 让推理以仅数据模式继续。这是在计量连续性与推理可用性之间的选择。无论采用哪种设置,格式错误的消息仍可能被丢弃。
| 场景 | Required = true | Required = false(默认) | |
| 1 | 元数据 WebSocket 连接失败 | 数据流被终止 | 数据流正常继续(仅数据模式) |
| 2 | 元数据 WebSocket 在会话中途断开 | 数据流被终止 | 数据流正常继续。计量停止 |
| 3 | 格式错误的计量消息 | 消息被丢弃。元数据连接保持打开 | 消息被丢弃。元数据连接保持打开 |
| 4 | 数据连接在流中途断开 | 元数据流被关闭 | 元数据流被关闭 |
在 AWS Marketplace 上列出您的模型
- 将您的 AWS 账户注册为 AWS Marketplace 卖家。对于付费产品,请完成税务和银行信息。
- 在受支持的发布区域中,从您的容器创建 SageMaker AI 模型包,并创建一个 AWS Marketplace 可以代入以读取该模型包的 AWS Identity and Access Management (IAM) 角色。
- 在 AWS Partner Central 中,依次选择 Build、Machine learning,然后选择 Create machine learning product,并将该模型包添加为第一个版本。
- 选择按推理定价。您为所有实例类型的实时推理设置一个单价,按请求显示,最多保留三位小数。您还为每种批量转换实例类型设置每小时价格。请在创建商品信息时选择定价模式,因为已发布的商品信息无法在按小时定价和按推理定价之间切换。
- 验证通过后,申请 Public 可见性。对于企业买家,可通过协商的单价或固定价格合同来扩展私有报价。
在发布前验证计费
使用 Limited listing 和加入允许列表的测试买家来验证集成。使用适当的报价(包括在需要时使用私有报价),以便测试能够检验预期的单位与价格映射。
- 运行已知数量的测试。对于按音频秒数定价的产品,发送 12 分钟的计量音频,并检查上报的记录总计为 720 个单位。
- 将模型服务器记录与卖家的使用量报告和买家的费用进行对账。留出时间让报告填充数据,并验证使用类型
<region code>-SMMP:inference.count.m.i.c(例如USE1-SMMP:inference.count.m.i.c中的us-east-1)。确认报价的单位与价格映射,而不是假设固定的报告延迟。 - 测试正常完成、会话中断、元数据流丢失和格式错误的消息。在发布前,与 SageMaker AI 和 AWS Marketplace 团队一起比较每种情况下上报的数量和计费的数量。
- 测试完成后删除测试端点,以避免持续产生基础设施费用。
在 AWS Marketplace 上开始使用 Deepgram
要在 SageMaker AI 上部署带基于使用量计量的 Deepgram,请按照以下步骤操作。
- 在 AWS Marketplace 上订阅您需要的 Deepgram Voice AI 流式模型,例如 Deepgram Nova-3 Monolingual Speech-to-Text (STT) Streaming。
- 使用来自 AWS Marketplace 订阅的 Deepgram 模型包部署 SageMaker AI 实时端点。
- 使用 SageMaker AI 双向流式 API 连接到该端点,并通过其 HTTP/2 事件流传输音频。
Deepgram 的模型服务器会自动计算计量,并由 Amazon SageMaker AI 和 AWS Marketplace 进行处理。你无需在客户端进行任何配置。
清理
完成测试后,请删除 SageMaker AI 实时端点和模型资源,以停止基础设施费用。如果你不再需要该产品,请移除 AWS Marketplace 订阅。
结论
借助双向流式传输的基于用量计量,模型提供商可以将 AWS Marketplace 软件定价与实时会话期间上报的用量保持一致。客户按照产品和报价定义的计量单位支付软件费用。Amazon SageMaker AI 端点基础设施费用仍然单独计算并照常收取。详细了解 Amazon SageMaker AI。
开始使用:
- 对于客户,请在 AWS Marketplace 上订阅 Deepgram Voice AI 流式模型,例如 Deepgram Nova-3 Monolingual Speech-to-Text (STT) Streaming
- 对于模型提供商,请按照本文中的集成演练,为你自己的模型服务器添加基于用量的计量。
致谢
特别感谢 Kareem Syed-Mohammed(首席产品经理)、Susmitha Marupaka(产品营销经理)、Zhengfei Ji(Amazon SageMaker AI 软件开发工程师)和 EJ Ferrell 审阅本文并主导了此功能的开发。
关于作者
Victor Wang
Victor 是 Deepgram 的一名资深软件工程师,也是工程副总裁的技术顾问,常驻加利福尼亚州旧金山。在加入 Deepgram 之前,他曾在 AWS 担任高级解决方案架构师,与生成式 AI 初创公司合作,并在 AWS 担任过工程、咨询和项目管理等职务。他喜欢学习新技术和旅行,飞行里程已超过两百万英里。
Lingran Xia
Lingran 是 AWS 的一名软件开发工程师。他目前专注于提升机器学习模型的推理性能。业余时间,他喜欢旅行和滑雪。
Andre Gomes
Andre 是 AWS 的一名前沿 AI 解决方案架构师,与 AI 初创公司合作,涉及大规模训练、实时推理和 Amazon SageMaker AI。在加入 AWS 之前,Andre 在米纳斯吉拉斯联邦大学获得博士学位,其研究在剑桥大学制造研究所进行,将大语言模型和神经主题建模应用于战略路线图制定。
Daniel Wirjo
Daniel 是 AWS 的一名解决方案架构师,专注于前沿 AI 初创公司。作为曾经的初创公司 CTO,他乐于与创始人和工程领导者合作,在 AWS 上推动增长和创新。工作之余,Daniel 喜欢手捧咖啡散步、欣赏自然和学习新想法。
来源:AWS Machine Learning Blog · aws.amazon.com