本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用每秒输出令牌 (OTPS) 进行诊断InvocationLatency增加
该InvocationLatency指标报告推理请求的挂钟时间,从收到请求到生成最后一个输出令牌的时间。该指标本身无法告诉你延迟增加的原因。两个不同的条件可能导致相同的升高值:
-
该模型生成令牌的速度更慢——服务端吞吐量发生了变化。
-
该模型为每个请求生成更多令牌——工作负载变化,例如更长的提示、更新的系统提示或产生更长响应的模型更新。
每秒输出令牌 (OTPS) 隔离了吞吐量组件,因此当输出长度增加时,您可以对服务端下降发出警报,而不会产生误报。
注意
OTPS 计算需要该TimeToFirstToken指标,Amazon Bedrock 仅针对直播 API 操作ConverseStream发布该指标,以及。InvokeModelWithResponseStream本节中的程序仅适用于这些操作的流量。
InvocationLatencyTimeToFirstToken、和 OTPS 有何关系
TimeToFirstToken推理请求在模型主机上经过两个计算绑定阶段:
-
预填充。该模型在一次向前传递中处理整个输入提示并生成第一个输出标记。该阶段的持续时间主要随输入长度而变化,是其主要驱动力
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 运行时指标。
-
打开 CloudWatch 控制台,选择指标,然后选择所有指标。
-
搜索
Bedrock并选择 “依据” ModelId 维度。 -
为要监控
TimeToFirstToken的型号 ID 选择InvocationLatencyOutputTokenCount、和。 -
对于每个选定的指标,将统计数据设置为,
p50将周期设置为 5 分钟。 -
选择添加数学,然后选择从空表达式开始。
-
输入以下表达式并对其进行标记
OTPS。调整指标 ID (m1、m2、m3),使其与您选择的InvocationLatencyOutputTokenCount、和TimeToFirstToken中分配的 ID 相匹配。m2 / (m1 - m3) * 1000
现在,该图表显示所选型号每5分钟窗口的p50 OTPS。您可以使用此指标数学表达式作为警报的基础。
在 OTP CloudWatch S 上创建警报
由于 OTPS 是指标数学表达式而不是已发布的指标,因此您可以通过创建指标数学警报来对其发出警报。两种模式很有用,具体取决于您是否已建立吞吐量基准。
静态阈值警报
当您的模型已建立基准 OTPS(例如来自基准测试或历史流量)时,请使用静态阈值警报。
-
从上述过程中创建的 OTPS 指标数学表达式中,选择警报图标以创建警报。
-
对于阈值类型,选择静态。
-
对于警报条件,选择低于,然后输入您的阈值。常见的起点是预期基线的 80%。例如,如果您的模型通常达到每秒 55 个令牌,则将阈值设置为每秒 44 个代币。
-
在 “其他配置” 下,将评估值设置为 5 个数据点中有 3 个漏洞,以减少瞬态跌落产生的噪音。
-
如果要将间隙计为降级,则将缺失数据处理设置为将缺失数据视为泄露;如果预计在低流量期间会丢失数据,则将丢失的数据视为丢失。
异常检测警报
当工作负载模式随时间变化并且您希望阈值自动调整时,请使用异常检测警报。异常检测需要足够的历史数据(至少两周)来构建准确的模型。对于新部署,请从静态阈值开始。
-
与前面的步骤一样,使用 OTPS 指标数学表达式创建警报,但对于阈值类型,请选择异常检测。
-
选择低于波段。OTPS 掉落,而不是尖峰,表示降级。
-
将异常检测阈值设置为 2 或 3 个标准差。值越低,警报越敏感。
-
使用 5 个评估周期中的 3 个。
-
按照静态阈值过程中的说明设置缺失数据处理。
使用以编程方式创建警报 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.")