跳至内容

如何对使用 Amazon Bedrock 按需资源时出现的"ThrottlingException"错误进行故障排除?

2 分钟阅读
0

我想对我在使用 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 运行时指标 InputTokenCountInvocations

某些模型针对每分钟请求数 (RPM) 和每分钟令牌数 (TPM) 设置了单独的配额,Amazon Bedrock 会同时执行这些配额。

新模型版本的配额可能与以前的版本不同。

**注意:**服务配额控制面板仅显示已配置的配额,不显示实时使用情况。要监控实时使用情况,请使用 CloudWatch。

使用跨区域推理配置文件

使用跨区域推理配置文件可在多个 AWS 区域之间动态路由流量,从而为每个请求提供最佳可用性,并在高使用量时段提供更好的性能。每个区域维护独立的容量池。为避免某个区域的容量池出现节流,请将请求分配到多个区域。

某些模型(例如 Anthropic Claude 3.5 Sonnet)在特定区域中需要使用跨区域推理配置文件。

有关详细信息,请参阅 GitHub 网站上 amazon-bedrock-workshop 中的跨区域推理代码示例。

**注意:**要使用推理配置文件,您必须使用 Amazon Bedrock 支持的区域和模型

申请增加配额

新账户的初始配额可能低于默认配额。某些模型设有不可调整的固定配额。如果您的工作负载流量超过账户的按需配额,请联系 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"错误

出现"ServiceUnavailableException"(HTTP 状态代码 503)错误是由于临时容量限制,而非超出配额。此错误通常会自动解决,但对于关键工作负载,可能需要调整架构。

查看您的 AWS CloudTrail 日志,检查您是否收到"ServiceUnavailable"和"ThrottlingException"错误。

如果您收到这两个错误,请执行以下操作来解决"ServiceUnavailableException"错误:

解决未超出配额时出现的意外节流问题

如果您遇到了节流但未超出服务配额,请执行以下操作: