View a markdown version of this page

使用每秒输出令牌 (OTPS) 进行诊断InvocationLatency增加 - Amazon Bedrock

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

使用每秒输出令牌 (OTPS) 进行诊断InvocationLatency增加

InvocationLatency指标报告推理请求的挂钟时间,从收到请求到生成最后一个输出令牌的时间。该指标本身无法告诉你延迟增加的原因。两个不同的条件可能导致相同的升高值:

  • 该模型生成令牌的速度更慢——服务端吞吐量发生了变化。

  • 该模型为每个请求生成更多令牌——工作负载变化,例如更长的提示、更新的系统提示或产生更长响应的模型更新。

每秒输出令牌 (OTPS) 隔离了吞吐量组件,因此当输出长度增加时,您可以对服务端下降发出警报,而不会产生误报。

注意

OTPS 计算需要该TimeToFirstToken指标,Amazon Bedrock 仅针对直播 API 操作ConverseStream发布该指标,以及。InvokeModelWithResponseStream本节中的程序仅适用于这些操作的流量。

InvocationLatencyTimeToFirstToken、和 OTPS 有何关系

推理请求在模型主机上经过两个计算绑定阶段:

  • 预填充。该模型在一次向前传递中处理整个输入提示并生成第一个输出标记。该阶段的持续时间主要随输入长度而变化,是其主要驱动力TimeToFirstToken

  • 解码。该模型按顺序生成每个后续输出标记,每次向前传递一个标记。该阶段的总时间随输出令牌的数量而变化。 Per-token 对于给定的模型和主机负载,解码时间相当稳定,这使OTPS成为有用的吞吐量信号。

这些阶段在 Amazon Bedrock 运行时指标之间产生了以下关系:

InvocationLatency (ms) = TimeToFirstToken (ms) + (OutputTokenCount / OTPS) * 1000

求解 OTPS 给出了您可以根据已发布的 CloudWatch 指标计算的公式:

OTPS = OutputTokenCount / (InvocationLatency - TimeToFirstToken) * 1000

随着时间的推移,稳定的 OTPS 表明模型正在以预期的吞吐量生成,即使由于InvocationLatency较长的提示或更长的响应而提高了吞吐量。OTPS 下降表示模型端吞吐量发生变化,这是您通常想要发出警报的信号。

使用 CloudWatch 公制数学表达式计算 OTPS

您可以通过在指标数学表达式中组合已发布的 Amazon Bedrock 运行时指标,在 CloudWatch 控制台中绘制 OTPS 图。所需的指标是InvocationLatencyOutputTokenCount、和TimeToFirstToken,都在AWS/Bedrock命名空间中。有关这些指标的说明,请参阅 Amazon Bedrock 运行时指标

  1. 打开 CloudWatch 控制台,选择指标,然后选择所有指标

  2. 搜索Bedrock并选择 “据” ModelId 维度。

  3. 为要监控TimeToFirstToken的型号 ID 选择InvocationLatencyOutputTokenCount、和。

  4. 对于每个选定的指标,将统计数据设置为,p50周期设置为 5 分钟

  5. 选择添加数学,然后选择从空表达式开始

  6. 输入以下表达式并对其进行标记OTPS。调整指标 ID (m1m2m3),使其与您选择的InvocationLatencyOutputTokenCount、和TimeToFirstToken中分配的 ID 相匹配。

    m2 / (m1 - m3) * 1000

现在,该图表显示所选型号每5分钟窗口的p50 OTPS。您可以使用此指标数学表达式作为警报的基础。

在 OTP CloudWatch S 上创建警报

由于 OTPS 是指标数学表达式而不是已发布的指标,因此您可以通过创建指标数学警报来对其发出警报。两种模式很有用,具体取决于您是否已建立吞吐量基准。

静态阈值警报

当您的模型已建立基准 OTPS(例如来自基准测试或历史流量)时,请使用静态阈值警报。

  1. 从上述过程中创建的 OTPS 指标数学表达式中,选择警报图标以创建警报。

  2. 对于阈值类型,选择静态

  3. 对于警报条件,选择低于,然后输入您的阈值。常见的起点是预期基线的 80%。例如,如果您的模型通常达到每秒 55 个令牌,则将阈值设置为每秒 44 个代币。

  4. 在 “其他配置” 下,将评估值设置为 5 个数据点中有 3 个漏洞,以减少瞬态跌落产生的噪音。

  5. 如果要将间隙计为降级,则将缺失数据处理设置为将缺失数据视为泄露;如果预计在低流量期间会丢失数据,则将丢失的数据视为丢失。

异常检测警报

当工作负载模式随时间变化并且您希望阈值自动调整时,请使用异常检测警报。异常检测需要足够的历史数据(至少两周)来构建准确的模型。对于新部署,请从静态阈值开始。

  1. 与前面的步骤一样,使用 OTPS 指标数学表达式创建警报,但对于阈值类型,请选择异常检测

  2. 选择低于波段。OTPS 掉落,而不是尖峰,表示降级。

  3. 将异常检测阈值设置为 2 或 3 个标准差。值越低,警报越敏感。

  4. 使用 5 个评估周期中的 3 个。

  5. 按照静态阈值过程中的说明设置缺失数据处理。

使用以编程方式创建警报 AWS 适用于 Python 的 SDK(Boto3)

以下 Python 示例使用 AWS 适用于 Python 的软件开发工具包 (Boto3) 来创建上一节中描述的静态阈值警报。将MODEL_IDOTPS_THRESHOLD、和AlarmActions,替换为适合您环境的值。

import boto3 cw = boto3.client("cloudwatch", region_name="us-east-1") MODEL_ID = "us.anthropic.claude-sonnet-4-5-20250929-v1:0" ALARM_NAME = "Bedrock-OTPS-Low" OTPS_THRESHOLD = 44 # tokens/s; set to ~80% of your expected baseline cw.put_metric_alarm( AlarmName=ALARM_NAME, AlarmDescription="Fires when Bedrock OTPS drops below threshold, indicating model-side throughput degradation.", Metrics=[ { "Id": "m1", "MetricStat": { "Metric": { "Namespace": "AWS/Bedrock", "MetricName": "InvocationLatency", "Dimensions": [{"Name": "ModelId", "Value": MODEL_ID}], }, "Period": 300, "Stat": "p50", }, "ReturnData": False, }, { "Id": "m2", "MetricStat": { "Metric": { "Namespace": "AWS/Bedrock", "MetricName": "OutputTokenCount", "Dimensions": [{"Name": "ModelId", "Value": MODEL_ID}], }, "Period": 300, "Stat": "p50", }, "ReturnData": False, }, { "Id": "m3", "MetricStat": { "Metric": { "Namespace": "AWS/Bedrock", "MetricName": "TimeToFirstToken", "Dimensions": [{"Name": "ModelId", "Value": MODEL_ID}], }, "Period": 300, "Stat": "p50", }, "ReturnData": False, }, { "Id": "otps", "Expression": "m2 / (m1 - m3) * 1000", "Label": "OTPS", "ReturnData": True, }, ], ComparisonOperator="LessThanThreshold", Threshold=OTPS_THRESHOLD, EvaluationPeriods=5, DatapointsToAlarm=3, TreatMissingData="ignore", AlarmActions=[], # add SNS ARN, for example "arn:aws:sns:us-east-1:123456789012:my-topic" ) print(f"Alarm '{ALARM_NAME}' created.")