我使用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”的尝试。 有什么方法可以创建第三个端点,还是应该为此创建另一个容器并提供“ /调用”的概率?
答案 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。也许这是一个更简单的起点? :)