View a markdown version of this page

초당 출력 토큰(OTPS)을 사용하여 InvocationLatency 증가 진단 - Amazon Bedrock

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

초당 출력 토큰(OTPS)을 사용하여 InvocationLatency 증가 진단

InvocationLatency 지표는 요청이 수신된 시점부터 마지막 출력 토큰이 생성된 시점까지 추론 요청의 벽시계 시간을 보고합니다. 이 지표 자체로는 지연 시간이 증가한 이유를 알 수 없습니다. 동일한 상승된 값은 두 가지 조건에서 발생할 수 있습니다.

  • 모델이 토큰을 더 느리게 생성하여 서비스 측 처리량이 변경됩니다.

  • 모델은 더 긴 프롬프트, 업데이트된 시스템 프롬프트 또는 더 긴 응답을 생성하는 모델 업데이트와 같은 워크로드 변경 등 요청당 더 많은 토큰을 생성하고 있습니다.

초당 출력 토큰(OTPS)은 처리량 구성 요소를 격리하므로 출력 길이가 늘어날 때 거짓 긍정을 생성하지 않고 서비스 측 성능 저하를 경고할 수 있습니다.

참고

OTPS 계산에는 Amazon Bedrock이 스트리밍 API 작업 ConverseStreamInvokeModelWithResponseStream에 대해서만 게시하는 TimeToFirstToken 지표가 필요합니다. 이 섹션의 절차는 해당 작업의 트래픽에만 적용됩니다.

InvocationLatency, TimeToFirstToken및 OTPS의 관련성

추론 요청은 모델 호스트에서 두 개의 컴퓨팅 바운드 단계를 통과합니다.

  • 미리 채우기. 모델은 전체 입력 프롬프트를 단일 전달 패스로 처리하고 첫 번째 출력 토큰을 생성합니다. 이 단계의 지속 시간은 주로 입력 길이에 따라 조정되며의 주요 동인입니다TimeToFirstToken.

  • 디코딩합니다. 모델은 각 후속 출력 토큰을 순차로 생성하며, 전달 패스당 하나의 토큰을 생성합니다. 이 단계의 총 시간은 출력 토큰 수에 따라 조정됩니다. 토큰당 디코딩 시간은 지정된 모델 및 호스트 로드에 대해 상당히 안정적이므로 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를 그래프로 표시할 수 있습니다. 필요한 지표는 AWS/Bedrock 네임스페이스TimeToFirstTokenInvocationLatencyOutputTokenCount, 및 입니다. 이러한 지표에 대한 자세한 설명은 Amazon Bedrock 런타임 지표 섹션을 참조하세요.

  1. CloudWatch 콘솔을 열고 지표를 선택한 다음 모든 지표를 선택합니다.

  2. ModelId 차원을 검색Bedrock하고 선택합니다.

  3. 모니터링할 모델 ID에 TimeToFirstToken 대해 InvocationLatencyOutputTokenCount, 및를 선택합니다.

  4. 선택한 각 지표에 대해 통계를 로 설정하고 p50 기간을 5분으로 설정합니다.

  5. 수학 추가를 선택한 다음 빈 표현식으로 시작을 선택합니다.

  6. 다음 표현식을 입력하고 레이블을 지정합니다OTPS. 지표 IDs(m1, m2, m3)를 조정하여 선택 TimeToFirstToken 항목에서 InvocationLatency, OutputTokenCount및에 할당된 IDs와 일치시킵니다.

    m2 / (m1 - m3) * 1000

이제 그래프에 선택한 모델의 5분 기간당 p50 OTPS가 표시됩니다. 이 지표 수학 표현식을 경보의 기준으로 사용할 수 있습니다.

OTPS에서 CloudWatch 경보 생성

OTPS는 게시된 지표가 아닌 지표 수학 표현식이므로 지표 수학 경보를 생성하여 경보를 발생시킵니다. 처리량 기준이 설정되어 있는지 여부에 따라 두 가지 패턴이 유용합니다.

정적 임계값 경보

벤치마킹 또는 과거 트래픽과 같이 모델에 대해 설정된 기준 OTPS가 있는 경우 정적 임계값 경보를 사용합니다.

  1. 이전 절차에서 생성한 OTPS 지표 수학 표현식에서 경보 아이콘을 선택하여 경보를 생성합니다.

  2. 임곗값 유형에서 정적을 선택합니다.

  3. 경보 조건에 대해 보다 낮음을 선택하고 임계값을 입력합니다. 일반적인 시작점은 예상 기준의 80%입니다. 예를 들어 모델이 일반적으로 초당 55개의 토큰을 달성하는 경우 임계값을 초당 44개의 토큰으로 설정합니다.

  4. 추가 구성에서 평가를 위반 데이터 포인트 5개 중 3개로 설정하여 일시적 딥으로 인한 노이즈를 줄입니다.

  5. 격차를 성능 저하로 계산하려는 경우 누락된 데이터를 위반으로 처리하거나 트래픽이 적은 기간 동안 누락된 데이터가 예상되는 경우 누락된 데이터를 누락으로 처리하도록 누락된 데이터 처리를 설정합니다.

이상 탐지 경보

시간이 지남에 따라 워크로드 패턴이 다양하고 임계값이 자동으로 조정되도록 하려는 경우 이상 탐지 경보를 사용합니다. 이상 탐지에는 정확한 모델을 구축하기 위한 충분한 기록 데이터(최소 2주)가 필요합니다. 새 배포의 경우 정적 임계값으로 시작합니다.

  1. 이전 절차와 같이 OTPS 지표 수학 표현식에서 경보를 생성하지만 임계값 유형에서 이상 탐지를 선택합니다.

  2. 밴드보다 낮음을 선택합니다. OTPS는 급증하지 않고 저하를 나타냅니다.

  3. 이상 탐지 임계값을 표준 편차 2 또는 3으로 설정합니다. 값이 낮을수록 경보가 더 민감해집니다.

  4. 평가 기간 5개 중 3개를 사용합니다.

  5. 정적 임계값 절차에 설명된 대로 누락된 데이터 처리를 설정합니다.

AWS SDK for Python(Boto3)을 사용하여 프로그래밍 방식으로 경보 생성

다음 Python 예제에서는 Python용 AWS SDK(Boto3)를 사용하여 이전 섹션에 설명된 정적 임계값 경보를 생성합니다. MODEL_ID, OTPS_THRESHOLDAlarmActions를 환경에 적합한 값으로 바꿉니다.

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