Sagemaker-其他端点

时间:2019-01-28 13:41:58

标签: python amazon-web-services docker scikit-learn amazon-sagemaker

我使用scikit Learn创建了自己的模型。除了标准端点,“ / ping”和“ / invocations”外,我还添加了第三个端点“ / estimates”(它称为predict_probabilities())。

当我在本地运行容器时,所有端点都能正常工作。当我将其部署为Sagemaker'/ invocations'上的端点时,它可以正常工作。使用相同的身份验证令牌(由Postman生成),调用'/ estimates'给我一个错误:

<AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>

我什至看不到在CloudWatch中调用“ / estimates”的尝试。 有什么方法可以创建第三个端点,还是应该为此创建另一个容器并提供“ /调用”的概率?

2 个答案:

答案 0 :(得分:2)

我假设您在看到AccessDeniedException时正试图调用https://runtime.sagemaker.us-west-2.amazonaws.com/endpoints/<YOUR_ENDPOINT_NAME>/estimates

如果是这种情况,则与您针对未映射到SageMaker Runtime API的URL发出请求有关。如果没有这种映射,SigV4不会解释或签署您的请求,因此无法对您进行身份验证。

为了调用端点,您应该始终将请求发送到https://runtime.sagemaker.us-west-2.amazonaws.com/endpoints/<YOUR_ENDPOINT_NAME>/invocations。如documentation所述,SageMaker总是通过/invocations路径将请求转发到您的模型容器。

如果您希望将不同的模型行为捆绑到同一容器中,建议您在InvokeEndpoint请求中包含一个CustomAttribute。该标头将传递到您的容器,然后容器会根据自定义属性值做出不同的响应。

答案 1 :(得分:0)

您似乎正在使用自定义容器,因此很难确切知道发生了什么:)我之前遇到过此问题:您是否尝试过GET和POST?

仅供参考,SageMaker现在包括一个用于sklearn的内置开放源代码容器:https://github.com/aws/sagemaker-scikit-learn-container。也许这是一个更简单的起点? :)