我想对我在使用 Amazon Bedrock 按需资源时收到的 "ThrottlingException"(429 HTTP 状态代码)错误进行故障排除。
简短描述
当您超出服务配额时,Amazon Bedrock 会拒绝您的请求。
Amazon Bedrock 将返回 "ThrottlingException"(HTTP 状态代码: 429)错误,且您会在客户端收到以下错误消息之一:
- "Too many requests, please wait before trying again.You have sent too many requests.Wait before trying again."
- "Your request rate is too high.Reduce the frequency of requests."
- "Too many tokens, please wait before trying again."
解决方法
注意: 如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
监控您的 AWS 服务配额
查看您的 Amazon Bedrock 服务配额,确保您未超出这些配额。以 1 分钟的时间间隔查看 Amazon CloudWatch 指标以识别节流模式。当高峰时段的使用量超出配额时,即使是之前成功的批次也可能会出现资源节流。为确保您的应用程序的请求量不超出配额,请监控 Amazon Bedrock 运行时指标 InputTokenCount 和 Invocations。
某些模型针对每分钟请求数 (RPM) 和每分钟令牌数 (TPM) 设置了单独的配额,Amazon Bedrock 会同时执行这些配额。
新模型版本的配额可能与以前的版本不同。
注意: 服务配额控制面板仅显示已配置的配额,并不显示实时使用情况。要监控实时使用情况,请使用 CloudWatch。
使用跨区域推理配置文件
使用跨区域推理配置文件可在多个 AWS 区域之间动态路由流量,从而为每个请求提供最佳可用性,并在高使用量时段提供更好的性能。每个区域维护独立的容量池。为避免某个区域的容量池出现资源节流,请将请求分配到多个区域。
某些模型(例如 Anthropic Claude 3.5 Sonnet)在特定区域中需要使用跨区域推理配置文件。Anthropic Claude 4.5 Sonnet 等模型还提供全局推理配置文件,有助于管理计划外的流量突增。
有关详细信息,请参阅 GitHub 网站上 amazon-bedrock-workshop 中的跨区域推理代码示例。
注意: 要使用推理配置文件,您必须使用 Amazon Bedrock 支持的区域和模型。
申请增加配额
新 AWS 账户的初始配额可能低于默认配额。某些模型设有不可调整的固定配额。如果您的工作负载流量超过账户的按需配额,请联系 AWS Support 或您的客户经理申请增加配额。AWS 可能会根据使用模式或服务需求调整默认配额。
在您的请求中包含以下信息:
- 要增加的配额的名称
- 模型 ID
- 增加配额的区域
- 对您的使用案例的简要说明
- 您的预计使用量,包括稳定和峰值状态下的每分钟令牌数和请求数,以及每个请求的平均输入和输出令牌数
使用预置吞吐量
如果您有较高的吞吐量需求,请购买预置吞吐量。
注意: 使用预置吞吐量会产生额外费用。有关预置吞吐量定价的信息,请参阅 Amazon Bedrock 定价中的定价模式部分。
有关如何使用预置吞吐量的详细信息,请参阅将预置吞吐量与 Amazon Bedrock 资源结合使用。要使用 AWS CLI 或 Python SDK 创建预置吞吐量,请参阅预置吞吐量的代码示例。
注意: 在购买预置吞吐量之前,请确保您使用的是 Amazon Bedrock 支持的区域和模型。
添加带指数回退的重试机制
当使用按需模式时,Amazon Bedrock 会使用跨多个客户的共享容量池。在服务需求高峰期,即使您的请求在账户的配额范围内,也可能会遇到资源节流。此外,该服务会自动管理所有用户的容量分配。
最佳做法是使用带指数回退和随机抖动的重试机制。如果您使用 AWS SDK,请参阅重试行为。
当达到每分钟配额时,确保重试回退时间持续整整 1 分钟。将您的重试尝试与 60 秒配额刷新周期同步。此外,在 1 分钟内将您的请求分散到多个秒级时段。
采用自适应重试模式的 Python 配置示例:
from botocore.config import Config
config = Config(
retries={
'max_attempts': 10, # Default is 3
'mode': 'adaptive'
}
)
bedrock_runtime = boto3.client('bedrock-runtime', config=config)
解决 "ServiceUnavailable" 错误
出现 "ServiceUnavailable"(HTTP 状态代码 503)错误是由于临时容量限制,而非超出配额。此错误通常会自动解决,但对于关键工作负载,可能需要调整架构。
查看您的 AWS CloudTrail 日志,检查您是否同时收到 "ServiceUnavailable" 错误和 "ThrottlingException" 错误。
如果您同时收到这两种错误,请执行以下操作来解决 "ServiceUnavailable" 错误:
解决未超出配额时出现的意外节流问题
如果您遇到了节流但未超出服务配额,请执行以下操作: