View a markdown version of this page

使用每秒輸出字符 (OTPS) 診斷InvocationLatency增加 - Amazon Bedrock

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用每秒輸出字符 (OTPS) 診斷InvocationLatency增加

InvocationLatency 指標會報告推論請求的時鐘時間,從收到請求的時間到產生最後一個輸出字符的時間。此指標本身無法告訴您延遲增加的原因。相同的升高值可能來自兩個不同的條件:

  • 模型產生字符的速度較慢 — 服務端輸送量變更。

  • 模型會在每次請求產生更多權杖:工作負載變更,例如較長的提示、更新的系統提示,或產生較長回應的模型更新。

每秒輸出字符數 (OTPS) 會隔離輸送量元件,因此您可以在服務端降級時發出警示,而不會在輸出長度增加時產生誤報。

注意

OTPS 計算需要 TimeToFirstToken 指標,Amazon Bedrock 只會針對串流 API 操作 ConverseStreamInvokeModelWithResponseStream 發佈該指標。本節中的程序僅適用於這些操作上的流量。

InvocationLatencyTimeToFirstToken和 OTPS 的關聯方式

推論請求會通過模型主機上的兩個運算限制階段:

  • 預先填充。模型會在單一向前傳遞中處理整個輸入提示,並產生第一個輸出字符。此階段的持續時間主要以輸入長度進行擴展,並且是 的主要驅動因素TimeToFirstToken

  • 解碼。模型會依序產生每個後續輸出字符,每個向前傳遞一個字符。此階段的總時間會隨著輸出字符的數量而擴展。對於指定的模型和主機負載,每個金鑰解碼時間相當穩定,這使得 OTPS 成為有用的輸送量訊號。

這些階段會在 Amazon Bedrock 執行時間指標之間產生下列關係:

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

解決 OTPS 提供您可以從已發佈 CloudWatch 指標運算的公式:

OTPS = OutputTokenCount / (InvocationLatency - TimeToFirstToken) * 1000

隨著時間的推移,穩定的 OTPS 表示模型以預期的輸送量產生,即使由於較長的提示或較長的回應InvocationLatency而升高。OTPS 下降表示模型端輸送量變更,這是您通常想要警示的訊號。

使用 CloudWatch 指標數學表達式計算 OTPS

您可以在 CloudWatch 主控台中將發佈的 Amazon Bedrock 執行時間指標合併為指標數學表達式,以繪製 OTPS。所需的指標為 InvocationLatencyOutputTokenCountTimeToFirstToken,全部都在 AWS/Bedrock 命名空間中。如需這些指標的說明,請參閱 Amazon Bedrock 執行時期指標

  1. 開啟 CloudWatch 主控台,然後選擇指標,然後選擇所有指標

  2. 搜尋Bedrock並選取 By ModelId 維度。

  3. 針對您要監控TimeToFirstToken的模型 ID InvocationLatency選取 OutputTokenCount、 和 。

  4. 對於每個選取的指標,將統計資料設定為 p50,並將期間設定為 5 分鐘

  5. 選擇新增數學,然後從空表達式開始

  6. 輸入下列表達式並標記 OTPS。調整指標 IDs (m1m2m3) 以符合指派給 OutputTokenCountInvocationLatency和 選項TimeToFirstToken中的 IDs。

    m2 / (m1 - m3) * 1000

圖形現在會顯示所選模型每 5 分鐘的 p50 OTPS 時段。您可以使用此指標數學表達式作為警示的基礎。

在 OTPS 上建立 CloudWatch 警示

由於 OTPS 是指標數學表達式而非發佈的指標,因此您可以透過建立指標數學警示來對其發出警示。兩種模式很有用,取決於您是否已建立輸送量基準。

靜態閾值警示

當您為模型建立基準 OTPS 時,請使用靜態閾值警示,例如基準測試或歷史流量。

  1. 從上述程序中建立的 OTPS 指標數學表達式中,選擇警示圖示以建立警示。

  2. 對於閾值類型,選擇靜態

  3. 針對警示條件,選擇低於 並輸入您的閾值。常見的起點是預期基準的 80%。例如,如果您的模型通常每秒達到 55 個字符,請將閾值設定為每秒 44 個字符。

  4. 在其他組態下,將評估設定為 5 個資料點中的 3 個,以減少暫時性下降的雜訊。

  5. 如果您希望差距計為降級,請將遺失資料處理設定為將遺失資料視為違規,或者如果預期在低流量期間遺失資料,則將遺失資料視為遺失。

異常偵測警示

當工作負載模式隨時間變化,且您希望閾值自動調整時,請使用異常偵測警示。異常偵測需要足夠的歷史資料 (至少兩週) 來建置準確的模型。對於新部署,請從靜態閾值開始。

  1. 從 OTPS 指標數學表達式建立警示,如上述程序所示,但對於閾值類型,請選擇異常偵測

  2. 選擇低於頻帶。OTPS 下降,而不是峰值,表示降級。

  3. 將異常偵測閾值設定為 2 或 3 個標準差。較低的值會產生更敏感的警示。

  4. 使用 5 個評估期間中的 3 個。

  5. 如靜態閾值程序所述,設定遺失的資料處理方式。

使用適用於 Python 的 AWS SDK (Boto3) 以程式設計方式建立警示

下列 Python 範例使用適用於 Python 的 AWS SDK (Boto3) 來建立上一節所述的靜態閾值警示。AlarmActionsMODEL_IDOTPS_THRESHOLD和 取代為您的環境適用的值。

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.")