5

我在 sagemaker 中部署了一个端点,并试图通过我的 python 程序调用它。我用邮递员测试过它,它工作得很好。然后我写了调用代码如下

import boto3
import pandas as pd
import io
import numpy as np

def np2csv(arr):
    csv = io.BytesIO()
    np.savetxt(csv, arr, delimiter=',', fmt='%g')
    return csv.getvalue().decode().rstrip()


runtime= boto3.client('runtime.sagemaker')
payload = np2csv(test_X)

runtime.invoke_endpoint(
    EndpointName='<my-endpoint-name>',
    Body=payload,
    ContentType='text/csv',
    Accept='Accept'
)

现在当我运行它时,我得到一个验证错误

ValidationError: An error occurred (ValidationError) when calling the InvokeEndpoint operation: Endpoint <my-endpoint-name> of account <some-unknown-account-number> not found.

在使用邮递员时,我已经给出了我的访问密钥和密钥,但我不确定在使用 sagemaker api 时如何传递它。我也无法在文档中找到它。

所以我的问题是,如何使用本地机器上的 sagemaker api 来调用我的端点?

4

3 回答 3

5

当您使用任何 AWS 开发工具包(包括用于 Amazon SageMaker 的开发工具包)时,您需要在用于运行代码的机器上配置您的 AWS 账户的凭证。如果您使用的是本地计算机,则可以使用 AWS CLI 流程。您可以在 Python SDK 页面上找到详细说明:https ://aws.amazon.com/developers/getting-started/python/

请注意,当您将代码部署到不同的机器时,您必须确保为 EC2、ECS、Lambda 或任何其他目标提供允许调用此特定端点的角色。虽然在您的本地计算机中,可以授予您管理员权限或其他许可权限,但当您部署到远程实例时,您应该尽可能地限制权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sagemaker:InvokeEndpoint",
            "Resource": "arn:aws:sagemaker:*:1234567890:endpoint/<my-endpoint-name>"
        }
    ]
}
于 2018-01-28T04:31:53.470 回答
5

我也有这个问题,结果证明是我region错了。

愚蠢但值得一试!

于 2019-01-27T18:02:01.137 回答
0

根据@Jack 的回答,我运行aws configure并更改了default region name它并且它起作用了。

于 2020-03-12T10:51:35.100 回答