Невозможно вызвать конечную точку SageMaker (модель TensorFlow) с помощью клиента Boto3 из AWS Lambda в python - PullRequest
0 голосов
/ 29 мая 2019

У меня развернута модель TensorFlow с открытой конечной точкой AWS SageMaker. Из Lambda Python я использую клиент Boto3 для вызова конечной точки. Модель TensorFlow принимает 3 входа следующим образом

{'input1' : numpy array , 'input2' : integer ,'input3' :numpy array }

Из Lambda, используя runtime.invoke_endpoint для вызова конечной точки SageMaker. Получение ошибки как Parse Error при вызове API из boto3client Я попытался сериализовать данные в формат csv перед вызовом конечной точки API

Ниже код, написанный на лямбда

payload = {'input1': encoded_enc_inputstanza_in_batch,
'input2' : encoded_enc_inputstanza_in_batch.shape[1],
'input3' : np.reshape([[15]*20],20) }     
infer_file = io.StringIO()
writer = csv.writer(infer_file)
for key, value in payload.items():
  writer.writerow([key, value])
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,                                   
           ContentType='text/csv',
           Body=infer_file.getvalue())

Дополнительные детали Это дополнительные детали - Модель Sagemaker ожидает 3 поля в качестве входных данных - 'input1' - Массив Numpy 'input2' - тип данных Int, 'input3' - массив numpy

Фактический результат -

Traceback (most recent call last):
        File "/var/task/lambda_function.py", line 143, in lambda_handler
        Body=infer_file.getvalue())
        File "/var/runtime/botocore/client.py", line 320, in _api_call
        return self._make_api_call(operation_name, kwargs)
        File "/var/runtime/botocore/client.py", line 623, in _make_api_call
        raise error_class(parsed_response, operation_name)
        END RequestId: fa70e1f3-763b-41be-ad2d-76ae80aefcd0

Ожидаемый результат - успешный вызов конечной точки API.

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

После преобразования данных в текстовый / CSV-формат с разделителями-запятыми обновили ли вы конечную точку для использования данных новой модели? Входные данные должны соответствовать схеме модели. Есть ли запятая в переменной "encoded_enc_inputstanza_in_batch"?

0 голосов
/ 30 мая 2019

Для text / csv значение аргумента Body для invoke_endpoint должно быть строкой с запятыми, разделяющими значения для каждого объекта.Например, запись для модели с четырьмя функциями может выглядеть следующим образом: 1.5,16.0,14,23.0.Вы можете попробовать следующее:

dp = ','.join(str(a) for a in payload)

...