我部署了一个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端点。
答案 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”变量中是否有逗号?