簡體   English   中英

如何使用SDK調用Amazon SageMaker的樣本筆記本中的Iris終端節點

[英]How to invoke the Iris endpoint in the sample-notebooks for Amazon SageMaker using SDK

我正在嘗試從示例筆記本中提供的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"

您應該能夠使用適用於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'
)

身體應該被編碼,因為模型知道如何閱讀。 我不確定您為什么決定對編碼方式進行編碼,但是可以嘗試使用更簡單的選項並使用b'前綴。 錯誤消息只是說明該模型無法解碼您的Body輸入。

這是一個工作示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM