View a markdown version of this page

扩展和吞吐量最佳实践 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

扩展和吞吐量最佳实践

本主题介绍了 Amazon Bedrock 终端节点的吞吐量限制和调度是如何运作的,并提供了扩展生成式 AI 应用程序的最佳实践。

Amazon Bedrock 端点

亚马逊 Bedrock 支持两个终端节点进行推理:

  • bedrock-mantle.{region}.api.aws— 支持 OpenAI-compatible 聊天完成和响应 API 以及 Anthropic Messages API。

  • bedrock-runtime.{region}.amazonaws.com— 支持 Bedrock-native InvokeModel 和 Converse API、 OpenAI-compatible 聊天完成和响应 API 以及 Anthropic Messages API。

对于大多数新应用程序,从开始bedrock-runtime。bedrock-mantle当您需要仅在该端点上可用的功能(例如服务器端工具、后台推理、项目、工作区或仅在该端点上可用的模型)时使用。bedrock-mantle你可以在同一个应用程序中使用这两个端点。要进行完整比较,请参阅亚马逊 Bedrock 支持的终端节点。

为什么两个端点的行为不同

两个端点表面使用相同的底层推理引擎,但它们的配额核算和容量选项不同。bedrock-runtime使用每个型号的代币配额,对于某些模型,使用每分钟请求数 (RPM) 配额。bedrock-mantle不强制执行 RPM 配额,并对已发布配额的模型使用单独的输入令牌和输出代币配额。其他模型bedrock-mantle可能不会在服务配额中公开每个账户的配额,但其吞吐量仍受内部服务容量的控制。

配额是上限,并不保证所有按需请求都能立即得到满足。在需求旺盛的时期,请求可能会排队或收到暂时的容量错误。将应用程序设计为限制并发性、队列工作和重试暂时性错误,而不会造成重试激增。

bedrock-mantle 终端:吞吐量和配额

终bedrock-mantle端节点具有以下配额行为:

  • 已发布配额的模型具有单独的每模型、每区域每分钟输入令牌和每分钟输出令牌配额。

  • 该端点不强制执行 RPM 配额。具有相同 RPM 的两个工作负载消耗的容量可能大不相同,因此要通过令牌和并发来规划和速率限制,而不仅仅是 RPM。

  • 当请求被接受时,输入令牌支票包括输入令牌加上请求max_tokens的值。响应完成后,将补充该预留的未使用部分。设置max_tokens不超过您的应用程序需求。

  • 没有公布 TPM 配额的模型目前没有在服务配额中公开每个账户 TPM 配额。这并不意味着吞吐量是无限的;内部服务容量和瞬态速率限制仍然适用。

  • 批量推理和预置吞吐量只能通过以下方式获得。bedrock-runtime Service-tier 并且模型支持因型号而异。

默认值和您的账户分配可能因型号、地区和使用历史记录而异。有关当前值、配额评估详细信息以及申请增加配额的 AWS 支持流程,请参阅基岩地幔端点的配额。有关特定型号模型一览的终端节点、服务级别和功能支持,请参阅适用条款。

基岩运行时端点:吞吐量和配额

终bedrock-runtime端节点具有以下配额行为:

  • Per-model,每个区域的代币配额一起计算输入和输出代币。输出代币根据特定模型的烧毁率消耗配额。

  • 一些模型还具有RPM配额,而其他模型仅受代币配额的约束。检查适用于您使用的确切模型和推理配置文件的配额。

  • Per-minute 而且每日代币配额由在该端点上调用相同模型的推理 API 共享。bedrock-runtime和的分配bedrock-mantle是独立的。

  • 自定义推理配置文件、批量推理和预置吞吐量有单独的配额,只能通过以下方式使用。bedrock-runtime

有关当前配额值、代币销毁详情和配额增加流程,请参阅。基岩运行时端点的配额有关特定型号模型一览的终端节点、服务级别和功能支持,请参阅适用条款。

了解 HTTP 错误响应

HTTP 429

429 的回复表示该请求未被接受。检查 API-specific 错误类型,而不是仅依赖 HTTP 状态。ThrottlingException或速率限制错误通常表示请求超过了账户配额或服务速率限制。一些运行时操作还使用 HTTP 429 进行。ModelNotReadyException打开bedrock-mantle,检查输入和输出 TPM 使用情况和请求max_tokens值;端点没有 RPM 配额。开启bedrock-runtime,如果模型有 RPM 配额,请检查组合的代币配额和 RPM。

HTTP 503

503 响应表示由于需求高或容量限制,该服务暂时无法处理请求。这并不表示您已超过账户配额。重试具有指数退避和抖动的瞬态响应。如果响应仍然存在,请停止增加流量,减少并发性,并在支持时考虑不同的区域或跨区域推理。

HTTP 529 () overloaded_error

当模型由于需求高或服务容量不足而暂时无法处理请求时,某些模型 API 返回 529。将其视为瞬态容量错误。如果响应包含Retry-After标头,请至少等待该持续时间再重试,并添加抖动以使客户端不会同时重试。

有关 API-specific 原因和解决步骤,请参阅Amazon Bedrock API 错误代码故障排除。

推荐的错误处理

暂时性错误

仅重试可以安全重试的错误,例如瞬态限制和容量错误。如果服务返回Retry-After标头,请兑现该标题。否则,使用随机抖动实现指数退避:

  • 以短暂的延迟(例如 1 秒)开始。

  • 增加每次重试后的延迟时间,并设定最大延迟上限,以适应应用程序的延迟预算。

  • 增加随机抖动,避免工作者间同步重试。

  • 使用符合应用程序延迟目标的有限重试预算。例如,将操作限制为总共六次尝试:初始请求和最多五次重试。

大多数 AWS SDK 和流行的 HTTP 库都为这种模式提供了内置支持。 Retry-setting 名称不同:botocore total_max_attempts 包含初始请求,而OpenAI和Anthropic SD max_retries Ks仅计算重试次数。因此,以下示例使用不同的数值来提供相同的示例六次尝试预算。

例重试基岩运行时的配置 (AWS SDK/boto3)
import boto3 from botocore.config import Config config = Config(retries={"total_max_attempts": 6, "mode": "standard"}) client = boto3.client("bedrock-runtime", config=config)
例重试基岩斗篷的配置 (OpenAI SDK)
from openai import OpenAI client = OpenAI( api_key=api_key, base_url=f"https://bedrock-mantle.{region}.api.aws/v1", max_retries=5, )
例重试基岩斗篷的配置 (Anthropic SDK)
import anthropic client = anthropic.Anthropic( api_key=api_key, base_url=f"https://bedrock-mantle.{region}.api.aws/anthropic", max_retries=5, )

根据模型和操作记录的最大推理持续时间,将连接和读取超时与重试分开配置。超时时间短于有效的长时间运行推理请求可能会导致可避免的重试和重复工作。

持续的容量错误

如果您持续收到 503 或 529 错误,则仅重试即可放大负载。该服务可能遇到临时容量限制,或者工作负载可能超过该模型和区域的当前可用容量。执行以下步骤:

  • 停止缓冲区并返回到上一个稳定的请求率和并发级别。

  • 使用有限的客户端并发、速率限制和请求队列。

  • 推迟或删除优先级较低的请求,直到容量恢复为止。

  • 对于bedrock-runtime,在模型支持时使用跨区域推理。对于可预测的持续工作负载,请评估预置吞吐量。

  • 如果问题仍然存在,请查看 AWS 运行状况控制面板并联系 AWS 支持部门,告知请求 ID 和 UTC 时间戳。

提高吞吐量

On-demand 容量可能因型号、地区和时间而异。并非配额内的所有请求都能保证在需求旺盛的时期内成功,因此在启动工作负载、更改模型或区域或大幅增加流量时,应逐渐增加配额。这对于没有公布的每账户配额的bedrock-mantle模型尤其重要。

推荐的升级程序

  1. 估算每个终端节点、模型和区域的目标代币速率和并发性。对于bedrock-mantle,分别跟踪输入和输出令牌,并将请求的max_tokens值包括在输入令牌准入估算值中。

  2. 从目标下方的已知稳定基线开始。如果您没有基准,请从较小的代表性负载开始,而不是发送完整的目标音量。

  3. 保持每个级别足够长的时间以观察请求成功率、 429/503 /529 错误、延迟百分比、令牌消耗、并发和队列深度。

  4. 一次增加一个受控步骤。一次只能更改一个主要载荷维度,这样您就可以确定回归的原因。

  5. 如果节流、容量错误或延迟超过阈值,请暂停渐变,执行任何Retry-After标题,然后返回到最后一个稳定级别。

  6. 继续进行直到达到目标,然后对将获得生产流量的每个模型和区域重复验证。

从工作负载的延迟和流量模式中选择步长和观察周期。不要使用 RPM 作为唯一的控制信号:即使 RPM 保持不变,请求令牌大小和响应长度也可能显著改变容量消耗。

如需增加bedrock-mantle配额,请关注请求提高配额。对于bedrock-runtime,关注请求提高配额。

其他最佳实践

  • 使用功能标志在模型之间逐步转换流量,而不是一次切换所有流量。

  • 将大型工作负载分散在几分钟内,并考虑一天中的时间模式以避开高峰使用期。

  • 使用输入大小、输出大小、延迟和并发性的代表性分布进行测试。避免突然发送一连串的测试请求。

  • 使用代币感知客户端速率限制、限定并发和限定队列。 RPM-only 限制器不能防止请求大小的变化。

  • 对于异步、高容量的离线任务,请启用批量推理。bedrock-runtime

  • 对于支持的模型和可以容忍可变延迟的非时间敏感型请求,可以考虑 Flex 服务层。

区域可用性和跨区域推断

On-demand 容量是区域性的,可能因地区而异。如果您的工作负载以单个区域为目标,则在需求旺盛的时期可能会遇到容量错误。使用 bedrock-runtime,在模型和您的数据驻留要求支持全球跨区域推理时使用。如果您实施自己的区域故障转移,请验证模型在每个目标区域的可用性并进行限定重试,这样故障转移就不会造成流量激增。

获取帮助

  • 吞吐量规划 -估算每个模型和区域的峰值输入和输出令牌、响应延迟、并发和排队容差。包括特定工作负载的预留空间,并联系您的 AWS 账户 团队进行大型或关键业务发布。

  • 性能优化 -监控提示大小、生成的令牌max_tokens、延迟百分比和缓存使用情况(如果支持)。优化提示和输出限制,以避免保留或消耗不必要的令牌。

  • 支持上报 — 提交 AWS 支持案例时,请包括终端节点、区域、模型或推理配置文件 ID、HTTP 状态和 API 错误类型、请求 ID、UTC 时间戳、令牌速率、请求率、并发性以及您的扩展时间表。

建议总结

场景 建议
一般工作负载 首先是bedrock-runtime。bedrock-mantle用于需要它的功能或模型。请参阅亚马逊 Bedrock 支持的终端节点。
短暂的 429、503 或 529 错误 检查 API 错误类型。对于可重试的错误,在有限的重试Retry-After预算内使用指数退避和抖动来兑现并重试。
持续的容量错误 停止递增,返回到最后一个稳定级别,限制并发和队列,推迟优先级较低的工作,并在支持的情况下使用跨区域推理。
配额规划 使用单独的输入和输出 TPM。bedrock-mantle在适用的情况下,使用组合的代币配额、代币销毁和 RPM。bedrock-runtime
大型离线处理 对异步任务使用批量推理。使用 Flex 服务层处理受支持的、非时间敏感且可以容忍可变延迟的请求。