【问题标题】:Unable to call XG-Boost endpoint created in sagemaker using AWS-Lambda无法使用 AWS-Lambda 调用在 sagemaker 中创建的 XG-Boost 端点
【发布时间】:2019-11-15 14:58:08
【问题描述】:

我在 AWS-Sagemaker 上训练了一个 xgboost 模型并创建了一个端点。现在我想使用 AWS Lambda 和 AWS API 调用端点。我创建了一个 lambda 函数并为我的 xgboost 模型添加了下面提到的代码。当我尝试对其进行测试时,该函数会引发 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类型。该函数正在抛出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 doc 时,它说我的事件类型只能是 dict、int、list、float、str 或 None 类型。我按照this aws doc 中提到的步骤创建了我的 lambda 函数。有人可以解释为什么我的代码会抛出上述错误吗?

【问题讨论】:

    标签: python amazon-web-services machine-learning aws-lambda amazon-sagemaker


    【解决方案1】:

    data=json.loads(json.dumps(event)) 是一个冗余操作。 data=event 将返回 True。我们为测试用例提供的事件是 dict 类型的。它有一个键值对。键可以是任何东西,值应该是由逗号分隔的所有预测变量的单个字符串。为了预测输出,我们需要测试用例的值。因此,例如声明payload=data['key'],然后在response 中更改Body=payload。然后就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2022-06-16
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多