python - AWS Sagemaker,InvokeEndpoint 操作,模型错误:“使用序列设置数组元素。”
问题描述
我正在尝试调用以前部署在 Amazon SageMaker 上的 Endpoint。这是我的代码:
import numpy as np
import boto3
client = boto3.client('sagemaker-runtime')
def np2csv(arr):
csv = io.BytesIO()
np.savetxt(csv, arr, delimiter=',', fmt='%g')
return csv.getvalue().decode().rstrip()
endpoint_name = 'DEMO-XGBoostEndpoint-2018-12-12-22-07-28'
test_vector = np.array([3.60606061e+00,
3.91395664e+00,
1.34200000e+03,
4.56100000e+03,
2.00000000e+02,
2.00000000e+02])
csv_test_vector = np2csv(test_vector)
response = client.invoke_endpoint(EndpointName=endpoint_name,
ContentType='text/csv',
Body=csv_test_vector)
这是我得到的错误:
() 中的 ModelErrorTraceback (最近一次调用最后一次) 1 响应 = client.invoke_endpoint(EndpointName=endpoint_name, 2 ContentType='text/csv', ----> 3 Body=csv_test_vector)
/home/ec2-user/anaconda3/envs/python2/lib/python2.7/site-packages/botocore/client.pyc in _api_call(self, *args, **kwargs) 318 "%s() 只接受关键字参数。” % py_operation_name) 319 # 这个范围内的“self”是指BaseClient。--> 320 返回 self._make_api_call(operation_name, kwargs) 321 322 _api_call。名称= str(py_operation_name)
/home/ec2-user/anaconda3/envs/python2/lib/python2.7/site-packages/botocore/client.pyc in _make_api_call(self, operation_name, api_params) 621 error_code = parsed_response.get("Error", {} ).get("Code") 622 error_class = self.exceptions.from_code(error_code) --> 623 raise error_class(parsed_response, operation_name) 624 else: 625 return parsed_response
ModelError:调用 InvokeEndpoint 操作时发生错误 (ModelError):收到来自模型的客户端错误 (415),消息为“使用序列设置数组元素。”。请参阅 https://us-east-1.console.aws.amazon.com/cloudwatch/home?region=us-east-1#logEventViewer:group=/aws/sagemaker/Endpoints/DEMO-XGBoostEndpoint-2018-12- 12-22-07-28 在帐户 249707424405 中获取更多信息。
解决方案
这有效:
import numpy as np
import boto3
client = boto3.client('sagemaker-runtime')
endpoint_name = 'DEMO-XGBoostEndpoint-2018-12-12-22-07-28'
test_vector = [3.60606061e+00,
3.91395664e+00,
1.34200000e+03,
4.56100000e+03,
2.00000000e+02,
2.00000000e+02])
body = ',',join([str(item) for item in test_vector])
response = client.invoke_endpoint(EndpointName=endpoint_name,
ContentType='text/csv',
Body=body)
推荐阅读
- python - 按条件查找数据框中行和列的所有索引
- python - 使用 Celery 注册多个任务
- javascript - 使用 RegEx 和 Quill JS 将一组禁用词加粗?
- oracle - 使用 Oracle MERGE INTO 将两个表中的数据合并到第三个表中
- c# - 使用 Span 的 Base64 编码
在 dotnetcore 2.1 - angular - 在触发承诺后从 catch 子句访问“this”
- html - 如何删除图像创建的空白?
- javascript - 我如何嘲笑这个错误回调?
- hadoop - hive sql搜索字符串中每个字母的模式
- asp.net - PartialViews 中的输入掩码问题 - Asp.Net Core