SageMaker BatchTransform MultiRecord模式JSON解析错误求助
解决Amazon SageMaker批量转换MultiRecord模式下的JSON解析错误问题
核心原因
当启用MultiRecord策略时,SageMaker会将多条输入记录打包成一个JSON数组发送给模型容器,但你的输入是JSONL(每行一个独立JSON对象)格式,若配置或推理代码未匹配这种打包逻辑,就会触发解析错误。
解决方案
调整输入格式或配置SplitType
如果希望继续使用JSONL输入文件,需在批量转换任务中明确设置SplitType=Line,同时将Content-Type设为application/json。这样SageMaker会按行分割JSONL内容,自动将多行JSON对象打包成一个合法的JSON数组传递给模型。若不想修改配置,可将输入文件转换为标准JSON数组格式:
[ {"number":"0060540745","brand_name":"XYZ","generic_keywords":"123"}, {"number":"0060540745","brand_name":"XYZ","generic_keywords":"123"}, {"number":"0060540745","brand_name":"XYZ","generic_keywords":"123"} ]修改模型推理代码的输入处理逻辑
检查你的模型容器代码(尤其是input_fn函数),确保它能处理JSON数组格式的输入:import json def input_fn(request_body, request_content_type): if request_content_type != "application/json": raise ValueError(f"Unsupported content type: {request_content_type}") data = json.loads(request_body) # 兼容SingleRecord(单个对象)和MultiRecord(数组)两种模式 return data if isinstance(data, list) else [data]这段代码会将输入统一转换为数组格式,确保两种策略下都能正常解析。
验证输入数据的合法性
检查JSONL文件中是否存在格式错误(如空行、引号不闭合、逗号缺失等)。SingleRecord模式下单个行的错误只会影响该条记录,但MultiRecord模式下会导致整个打包后的JSON数组解析失败。可以用jq工具批量验证:jq . example.jsonl若输出无报错,则说明所有行都是合法的JSON对象。
内容的提问来源于stack exchange,提问作者Jeya Kumar
相关产品推荐
相关产品推荐

