[英]Unable to call XG-Boost endpoint created in sagemaker using AWS-Lambda
我在 AWS-Sagemaker 上訓練了一個 xgboost model 並創建了一個端點。 現在我想使用 AWS Lambda 和 AWS API 調用端點。 我創建了一個 lambda function 並為我的 xgboost model 添加了下面提到的代碼。 當我嘗試對其進行測試時,function 正在引發 ParamValidation 錯誤。 這是我的代碼
import json
import os
import csv
import io
import boto3
endpointname =os.environ['endpointname'] #name of the endpoint I created in sagemaker
runtime = boto3.client('runtime.sagemaker')
def lambda_handler(event, context):
print("Recieved Event: "+json.dumps(event,indent=2))
data=json.loads(json.dumps(event))
print(data)
response = runtime.invoke_endpoint(EndpointName=endpointname,ContentType='text/csv',Body=data)
print(response)
result = json.loads(response['Body'].read().decode())
print(int(float(result))) #sagemaker xgb returns bytes type for the test case
我創建的測試事件是dict類型。 function 拋出Invalid type for parameter Body, value: {'Time':'7'}, type: <class 'dict'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
這意味着我應該將 byte 或 bytearray 而不是 dict 類型傳遞到我的事件中。 但是當我閱讀此AWS Lambda 文檔時,它說我的事件類型只能是 dict、int、list、float、str 或 None 類型。 我按照這個aws 文檔中提到的步驟創建了我的 lambda function。 有人可以解釋為什么我的代碼會拋出上述錯誤嗎?
data=json.loads(json.dumps(event))
是一個冗余操作。 data=event
將返回True
。 我們為測試用例提供的事件是 dict 類型的。 它有一個鍵值對。 鍵可以是任何東西,值應該是由逗號分隔的所有預測變量的單個字符串。 為了預測 output,我們需要測試用例的值。 因此,例如聲明payload=data['key']
然后在response
中更改Body=payload
。 然后它將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.