首页 > 解决方案 > sagemaker xgboost 输出为 JSON

问题描述

我是 AWS sagemaker 的新手,并试图做一个简单的测试,我试图调用 xgboost 模型。

xgboost_container = sagemaker.image_uris.retrieve("xgboost", 'us-east-1', "1.2-1")

创建模型和端点:

from sagemaker.serializers import JSONSerializer
endp_name ="myendpoint"
acc_model = sm_model.deploy(initial_instance_count=1, 
                instance_type='ml.m5.4xlarge',
                endpoint_name=endp_name, 
                serializer=JSONSerializer(),
                deserializer= sagemaker.deserializers.JSONDeserializer()
                            
               )

创建预测器实例:

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer, JSONSerializer 

sess = sagemaker.Session()

payload ={
"var1":1,
"var2":2,
"var3":3,
"var4":0,
"var5":4,
"var6":0,
"var7":5,
"var8":45,

}

predictor = Predictor(
    endpoint_name=endp_name, sagemaker_session=sess, serializer=JSONSerializer(),
deserializer=JSONSerializer()  )

然后预测:

predictor.predict(payload)

我希望 predictor.predict 的输出是 JSON 格式,但是当我运行它时,我得到了这个。 在此处输入图像描述

需要做什么才能看到输出为 JSON?

PS:如果我删除解串器,我会得到输出为字节: 在此处输入图像描述

如果我将其更改为 CSVDeserializer 我将其输出为: 在此处输入图像描述

标签: amazon-sagemaker

解决方案


请使用 JSON Deserializer 而不是如下所示JSONSerializer的选项。deserializer

这实现了反序列化从推理端点返回的数据的方法。记录在这里

predictor = Predictor(
    endpoint_name=endp_name, sagemaker_session=sess, serializer=JSONSerializer(),
deserializer= JSONDeserializer())

https://sagemaker.readthedocs.io/en/stable/api/inference/deserializers.html#sagemaker.deserializers.JSONDeserializer


推荐阅读