0

我正在尝试从tensorflow_iris_dnn_classifier_using_estimators示例笔记本中提供的端点调用端点。在示例中,它使用部署过程中生成的相同 python 对象调用端点。在大型系统中,我需要知道如何在没有此对象的情况下调用此端点,并且可能使用不同的语言。这是我尝试过的:

import struct
import boto3

client = boto3.client('sagemaker-runtime')

query = [6.4, 3.2, 4.5, 1.5]
buf = struct.pack('%sf' % len(query), *query)

response = client.invoke_endpoint(
    EndpointName='sagemaker-tensorflow-py2-cpu-2018-01-16-18-22-54-458',
    Body=buf
)

我在做什么错?我从 cloudwatch 收到以下错误:

[2018-01-16 19:51:21,091] ERROR in serving: 'utf8' codec can't decode byte 0xcd in position 0: invalid continuation byte
2018-01-16 19:51:21,091 ERROR - model server - 'utf8' codec can't decode byte 0xcd in position 0: invalid continuation byte
10.32.0.2 - - [16/Jan/2018:19:51:21 +0000] "POST /invocations HTTP/1.1" 500 0 "-" "AHC/2.0"
4

2 回答 2

0

您应该能够使用适用于 SageMaker 的 AWS 开发工具包支持的任何语言使用 InvokeEndpoint 调用推理。

Python SDK 就是您在上面的示例中所拥有的,但类似的语法可以在 java、JavaScript、.NET 等中完成。

python API 参考 ( http://boto3.readthedocs.io/en/latest/reference/services/sagemaker-runtime.html ) 中的调用是

response = client.invoke_endpoint(
    EndpointName='string',
    Body=b'bytes'|file,
    ContentType='string',
    Accept='string'
)

Body 应该被编码,因为模型知道如何阅读。我不确定您为什么决定按照您的方式进行编码,但您可以尝试更简单的选项并使用 b' 前缀。错误消息只是说该模型无法解码您的 Body 输入。

于 2018-01-22T06:50:18.843 回答
0

这是一个工作示例:

import boto3

client = boto3.client('runtime.sagemaker')

with open('iris.csv', 'rb') as f:
    payload = f.read()

result = client.invoke_endpoint(
    EndpointName='test-endpoint-iris',
    Body=payload,
    ContentType='text/csv',
    Accept='Accept'
)

print(result['Body'].read().decode())

还要确保您iris.csv的代码中不包含标签/标题或将其删除。

预测的示例数据文件:

5.1,3.5,1.4,0.2
4.9,3,1.4,0.2
4.7,3.2,1.3,0.2
4.6,3.1,1.5,0.2
5,3.6,1.4,0.2
于 2019-01-25T13:17:44.237 回答