Я могу успешно отправлять пакеты изображений в виде массива на мою конечную точку SageMaker, настроенную с использованием обслуживания TF, и получить ответ, например так:
def predict_random_batch(self, batch_size, verbose=0, initial_args=None):
batch = np.random.uniform(low=-1.0, high=1.0, size=(batch_size,self.size,self.size,3))
data = {'instances': np.asarray(batch).astype(self.dtype)}
if verbose: self.total_size(data)
request_args = self._create_request_args(data, initial_args)
response = self.sagemaker_session.sagemaker_runtime_client.invoke_endpoint(**request_args)
probs = self._handle_response(response)['predictions']
return probs
predictor.predict_random_batch(3)
Однако массив numpy очень большой. Я пытаюсь сжать пакеты изображений перед отправкой. Это то, что я пытаюсь:
def predict_random_batch_TEST(self, batch_size, verbose=0, initial_args=None):
import base64
batch = np.random.uniform(low=-1.0, high=1.0, size=(batch_size,self.size,self.size,3))
batch = batch.astype(self.dtype)
encoded_input_string = base64.b64encode(batch)
input_string = encoded_input_string.decode("utf-8")
instance = [{"b64": input_string}]
data = json.dumps({"instances": instance})
request_args = self._create_request_args(data, initial_args)
if verbose: self.total_size(data)
response = self.sagemaker_session.sagemaker_runtime_client.invoke_endpoint(**request_args)
probs = self._handle_response(response)['predictions']
return probs
Однако это возвращает ошибку:
ModelError: Произошла ошибка (ModelError) при вызове
Операция InvokeEndpoint: получена ошибка клиента (400) от модели с
сообщение "{" ошибка ":" Значение JSON:. , , Не является объектом "}"
Кто-нибудь знает, как я могу сжать пакет изображений, чтобы иметь возможность отправлять пакет большего размера? Очевидно, SM устанавливает ограничение полезной нагрузки в 5 МБ, которое не очень велико при отправке в виде массива.