TensorFlow, обслуживающий отправку данных как b64 вместо Numpy Array - PullRequest
0 голосов
/ 21 января 2019

У меня есть контейнер обслуживания TensorFlow в конечной точке SageMaker.Я могу взять пакет изображений в виде массива 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 велик, делая это таким образом.Мне интересно, есть ли способ отправить это в более сжатом формате?

Я пытался поэкспериментировать с base64 и json.dumps, но не могу получить ошибки Invalid argument: JSON Value: ....Не уверен, что это не поддерживается или я просто делаю это неправильно.

1 Ответ

0 голосов
/ 23 января 2019

Я говорил об этом со службой поддержки AWS (см. Более эффективный способ отправки запроса, чем JSON, для развернутой модели тензорного потока в Sagemaker? ).

Они предполагают, что можно передать пользовательский input_fn, который будет использоваться обслуживающим контейнером, где можно распаковать сжатый формат (например, protobuf).

Я буду тестировать это в ближайшее время, и, надеюсь, эта штука сработает, поскольку она добавит большую гибкость обработке ввода.

...