You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS监控发送至SageMaker端点的请求负载大小以计费?

监控SageMaker端点输入数据大小的实现方案

下面是几种在AWS生态内实现该需求的可行方案:

1. 在入口层统计数据大小

如果你的应用有API网关作为SageMaker端点的前置入口,可以在API网关的集成请求阶段挂载Lambda函数,通过函数读取请求体的字节长度,将数据上报到CloudWatch自定义指标,或者直接存入DynamoDB用于后续计费核算。
要是客户端直接调用SageMaker端点,那就在客户端代码里计算请求数据的字节数,再通过AWS SDK把数据推送到CloudWatch自定义指标,或者写入计费相关的数据库。

2. 自定义模型容器日志记录

改造你的SageMaker模型容器,在推理代码里读取输入请求的字节大小,以结构化日志(比如JSON格式)输出。之后可以用CloudWatch Logs Insights分析这些日志提取指标,或者用Lambda订阅CloudWatch Logs实时处理日志,把数据大小同步到计费系统。
示例Python推理代码片段:

import json
import sys

def handler(data, context):
    # 计算输入数据字节大小
    data_size = sys.getsizeof(json.dumps(data))
    # 输出结构化日志
    print(json.dumps({"event_type": "inference_request", "data_size_bytes": data_size}))
    # 执行推理逻辑
    return {"result": "your_inference_result"}

3. 用Lambda做中间代理

搭建一个Lambda函数作为SageMaker端点的代理,所有客户请求先发到这个Lambda。在Lambda里计算请求体的字节大小,完成统计后再转发请求到SageMaker端点。同时把数据大小信息写入CloudWatch自定义指标或者计费数据库,方便后续汇总计费。
示例Lambda代理代码片段:

import boto3
import json

sagemaker_runtime = boto3.client('sagemaker-runtime')
ENDPOINT_NAME = 'your-target-endpoint'

def lambda_handler(event, context):
    request_body = event['body']
    # 计算请求数据字节大小
    data_size = len(request_body.encode('utf-8'))
    
    # 上报到CloudWatch自定义指标
    cloudwatch = boto3.client('cloudwatch')
    cloudwatch.put_metric_data(
        Namespace='SageMaker/Inference',
        MetricData=[
            {
                'MetricName': 'RequestDataSizeBytes',
                'Dimensions': [
                    {'Name': 'EndpointName', 'Value': ENDPOINT_NAME},
                    {'Name': 'CustomerId', 'Value': event['requestContext']['authorizer']['customerId']} # 假设从授权信息取客户ID
                ],
                'Value': data_size,
                'Unit': 'Bytes'
            }
        ]
    )
    
    # 转发请求到SageMaker端点
    response = sagemaker_runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME,
        ContentType='application/json',
        Body=request_body
    )
    
    result = json.loads(response['Body'].read().decode())
    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

4. 借助AWS X-Ray追踪数据

开启X-Ray对SageMaker端点的追踪,在X-Ray分段中添加自定义注解记录请求数据大小。之后可以通过X-Ray的API或控制台查询这些注解数据,不过这种方式更适合单请求详情追踪,批量统计需要结合其他工具处理。

内容的提问来源于stack exchange,提问作者bnicholl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:14:54