无法使用python中的AWS Lambda的Boto3客户端调用SageMaker端点(TensorFlow模型)

时间:2019-05-29 17:33:09

标签: amazon-web-services numpy tensorflow lambda amazon-sagemaker

我部署了一个TensorFlow模型,并公开了AWS SageMaker终端节点。 从Lambda Python中,我正在使用boto3客户端调用终结点。 TensorFlow模型接受以下3个输入

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

从Lambda使用runtime.invoke_endpoint调用SageMaker端点。 从boto3client调用API时将错误获取为“解析错误” 在调用API端点之前,我尝试将数据序列化为csv格式

下面用Lambda编写的代码

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 :(得分:0)

对于text / csv,invoke_endpoint的Body参数的值应该是一个字符串,并用逗号分隔每个功能的值。例如,具有四个功能的模型的记录可能类似于:1.5、16.0、14、23.0。您可以尝试以下操作:

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

答案 1 :(得分:0)

将数据转换为以逗号分隔的text / csv格式后,是否更新了端点以使用新的模型数据?输入数据需要匹配模型的架构。 “ encoded_enc_inputstanza_in_batch”变量中是否有逗号?