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

SageMaker模型监控:如何修改EndpointOutput数据捕获编码?

解决方案:修改SageMaker DataCapture的EndpointOutput编码

要解决数据捕获中EndpointOutput与Input编码不匹配的问题,核心是让模型端点返回与输入一致的CSV格式输出,以下是可行的方法:

1. 自定义推理脚本(推荐方案)

内置的XGBoost、LightGBM等容器的输出编码是固定的(XGBoost默认返回BASE64,LightGBM/CatBoost默认返回JSON),要修改输出格式,必须自定义推理逻辑:

  • 编写inference.py脚本,在predict函数中将模型的预测结果转换为CSV格式的字符串。
  • 设置响应的Content-Type为text/csv,确保端点返回CSV格式数据。
  • 使用SageMaker的脚本模式或自定义容器部署模型,这样数据捕获时的EndpointOutput就会是CSV编码,与输入匹配。

示例推理脚本片段:

import pandas as pd
import xgboost as xgb

def model_fn(model_dir):
    model = xgb.Booster()
    model.load_model(f"{model_dir}/model.bst")
    return model

def predict_fn(input_data, model):
    dmatrix = xgb.DMatrix(input_data)
    predictions = model.predict(dmatrix)
    # 将预测结果转换为CSV字符串
    return pd.DataFrame(predictions).to_csv(index=False, header=False)

def output_fn(prediction, accept):
    # 指定响应类型为CSV
    return prediction, 'text/csv'

2. 调整端点部署的Content-Type配置

部署模型时,明确指定端点的Content-Type和Accept参数为text/csv,配合自定义推理脚本,强制容器使用CSV格式返回结果,避免默认编码逻辑生效。

3. 数据捕获文件后处理(临时 workaround)

如果暂时无法重新部署模型,可以通过后处理转换捕获文件的编码:

  • 创建Lambda函数,监听数据捕获文件所在的S3桶事件。
  • 当新的捕获文件生成时,解码BASE64格式的EndpointOutput,转换为CSV格式,再将修改后的文件保存到新的S3路径。
  • 修改监控调度的数据源为这个新路径,让分析器读取转换后的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:30:21