使用SageMaker Predictor调用predict返回Byte类型对象的问题
问题解决:SageMaker Predict返回Bytes类型结果
问题原因
你的代码存在两个关键问题:
- 参数名错误:初始化
Predictor时,你写了deserializers(复数),但正确的参数名是deserializer(单数),导致反序列化器未生效,predict方法直接返回原始的bytes响应。 - 反序列化器不匹配:模型返回的是JSON格式内容(从输出的
b'{"probabilities": ...}'可看出),但你使用了CSVDeserializer,即使参数名正确也无法正确解析。
解决方案
方案1:修正参数名并使用匹配的反序列化器
直接修改Predictor初始化代码,使用正确参数名和对应JSONDeserializer:
from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer from sagemaker.deserializers import JSONDeserializer # 修正参数名为deserializer,使用JSONDeserializer适配返回格式 predictor1 = Predictor( endpoint_name=predictor.endpoint_name, serializer=CSVSerializer(), deserializer=JSONDeserializer() ) result = predictor1.predict(data) print(type(result)) print(result)
执行后会直接得到解析后的字典类型结果,无需手动处理bytes。
方案2:手动解码解析(临时应急)
如果暂时不想调整反序列化器,可以手动处理bytes:
import json result = predictor1.predict(data) # 先解码bytes为字符串,再解析为JSON对象 parsed_result = json.loads(result.decode('utf-8')) print(type(parsed_result)) print(parsed_result)
这种方法适合快速验证,但推荐使用方案1,符合SageMaker规范用法。
内容的提问来源于stack exchange,提问作者Karki
相关产品推荐
相关产品推荐

