如何将TensorFlow端点JSON响应转为text/csv?SageMaker监控问题
AWS SageMaker Model Monitor 问题解答
1. 能否将端点输出转为text/csv格式?
可以,有两种可行方案:
- 修改模型推理脚本:在TensorFlow模型的
serve函数中,直接提取predictions中的二维数组值,拼接为逗号分隔的CSV字符串返回,同时设置响应的Content-Type为text/csv; charset=utf-8。 - 自定义输出序列化器:创建SageMaker端点时,自定义输出序列化器(继承
BaseSerializer),将模型返回的JSON响应中的predictions扁平化处理为CSV格式字符串,指定Content-Type为text/csv; charset=utf-8。
2. 输入输出改为JSON后,预处理脚本监控任务失败
由于无法查看img1的具体报错,以下是常见排查方向:
- 检查预处理脚本的JSON解析逻辑:确保能正确从JSONL格式的输入输出数据中提取特征、预测值、真值等字段,避免因字段缺失或格式不匹配导致解析错误。
- 验证S3数据格式:确认输入输出数据是每行一个JSON对象的合法JSONL格式,而非单个JSON数组或其他不符合要求的格式。
- 检查执行角色权限:确保监控任务的执行角色拥有访问S3数据路径、CloudWatch日志、SageMaker资源的完整权限,避免因权限不足导致任务终止。
- 查看CloudWatch日志:在CloudWatch中找到对应监控任务的日志流,获取详细报错信息,定位具体问题(如脚本语法错误、数据读取失败等)。
3. 批量转换场景监控任务未触发处理
使用$["predictions"]作为JSONPath但任务未触发,可能存在以下问题:
- 批量输出格式错误:批量转换的输出必须是每行一个预测对象的JSONL格式(如每行
{"predictions":[[0.8]]}),不能是包含所有预测的单个JSON数组,否则Model Monitor无法解析数据。 - JSONPath表达式不准确:原预测格式为二维数组
[[0.8],[0.5]],$["predictions"]会提取整个二维数组,需指定到具体数值层级,比如$["predictions"][0][0]来获取单个概率值,确保概率属性能正确提取数值。 - 触发条件未满足:检查
create_monitoring_schedule中schedule_config的触发规则(如数据量阈值、时间间隔),确认是否积累了足够数量的批量数据达到触发条件。 - 输入路径配置错误:确保监控调度的输入数据源正确指向批量转换的输出路径,且路径下存在符合格式要求的数据文件。
- 查看调度日志:在CloudWatch Events中查看监控调度的触发记录,或在SageMaker控制台查看任务状态详情,确认是否有触发失败的具体原因。
内容的提问来源于stack exchange,提问作者SRIRAM SIDHARTHA R
相关产品推荐
相关产品推荐

