在预先创建的模型/端点上运行预测

时间:2019-08-14 19:55:38

标签: python jupyter endpoint amazon-sagemaker inference

我已经通过Sagemaker Jupyter笔记本实例中的单独脚本创建了一个端点。我试图在另一个脚本中访问该端点并对其进行推断。

我不知道可以执行的任何操作,特别是拉取端点并将其分配给变量。

过去,我部署了一个链接到RCF的端点,如下所示:

#This creates an endpoint
rcf_inference = rcf.deploy(
    initial_instance_count=1,
    instance_type='ml.m4.xlarge',
)
print('Endpoint name: {}'.format(rcf_inference.endpoint))

我在另一个脚本中使用了rcf_inference变量来运行推理,我想在这里遵循相同的路线,但是无法重新部署rcf。

#This grabs the data we want to test from an s3
s3=boto3.client('s3')
obj=s3.get_object(Bucket=bucket,Key=testingDataKey)


prediction_data = pandas.read_csv(io.BytesIO(obj['Body'].read()))
prediction_data_numpy=np.array(prediction_data)

#This line runs the test data and stores it in results. 
#I do not have a rcf_inference variable, so I can't run it this way though.
#results = rcf_inference.predict(prediction_data_numpy)

predictor = RealTimePredictor(endpoint=endpoint, accept=CONTENT_TYPE_CSV)
results=predictor.predict(prediction_data_numpy.tobytes())

必须有某种方法来调用我的端点并将其分配给此变量,对吗?我的目标是获取此变量并对其进行推断,就像在其他脚本中所做的一样。通过当前方法运行时,出现“无法评估提供的有效负载”的信息。

2 个答案:

答案 0 :(得分:1)

使用RealTimePredictor,您的方法是正确的。只要您在同一地区,并使用正确的端点名称,一切就可以按预期进行。

我假设RCF代表RandomCutForest,这是SageMaker Python SDK中受支持的算法。在这种情况下,就默认序列化/反序列化而言,部署该算法时提供的预测变量类很可能具有不同的配置。请使用该类或复制相同的配置:https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/amazon/randomcutforest.py#L152

答案 1 :(得分:0)

如果我错了,请纠正我,但这听起来像是您在寻找“ DescribeEndpoint” API调用。

您可能正在寻找以下几行内容:

sagemaker.Session().describe_endpoint(EndpointName=endpoint_name)

在sagemaker-python-sdk存储库中查看以下代码段,以获取一个工作示例:https://github.com/aws/sagemaker-python-sdk/blob/db6c55ec4a21dbd59e264e2ab9fc1e8494aa781f/tests/integ/test_mxnet_train.py#L131

让我知道是否有帮助!