TensorFlow Serving将数据发送为b64,而不是Numpy Array



我在SageMaker端点中有一个TensorFlow Serving容器。我可以将一批图像作为Numpy数组,并返回这样的预测:

import numpy as np
import sagemaker
from sagemaker.predictor import json_serializer, json_deserializer
image = np.random.uniform(low=-1.0, high=1.0, size=(1,128,128,3)).astype(np.float32)    
image = {'instances': image}
image = json_serializer(image)
request_args = {}
request_args['Body'] = image
request_args['EndpointName'] = endpoint_name
request_args['ContentType'] = 'application/json'
request_args['Accept'] = 'application/json'
# works successfully
response = sagemaker_session.sagemaker_runtime_client.invoke_endpoint(**request_args)
response_body = response['Body']
predictions = json_deserializer(response_body, response['ContentType'])

通过这种方式,request_args有效载荷的大小很大。我想知道,有没有办法用更压缩的格式发送这个?

我尝试过使用base64json.dumps进行实验,但无法克服Invalid argument: JSON Value: ...错误。不确定这是否不受支持,或者我只是做得不正确。

我已经与AWS支持部门讨论过这一点(请参阅向Sagemaker中部署的tensorflow模型发送请求的比JSON更有效的方法?)。

他们建议可以传入一个自定义的input_fn,该输入将由服务容器使用,在该容器中可以解压缩压缩格式(如protobuf)。

我很快就会测试这个,希望这个东西能起作用,因为它会为输入处理增加很多灵活性。

相关内容

  • 没有找到相关文章

最新更新