首页 > 解决方案 > Sagemaker 批量转换错误“模型容器无法响应 ping;确保 /ping 端点已实施并以 HTTP 200 状态响应”

问题描述

我的任务是通过 Sagemaker Batch Transform 进行大规模推理。

我一直在关注教程:自带容器,https://github.com/aws/amazon-sagemaker-examples/blob/master/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb

我遇到了很多问题,并通过搜索堆栈溢出来解决它们。但是,有一个问题仍然会导致麻烦。

当我同时使用 20 个 EC2 实例运行相同的代码和相同的数据集时,有时我会收到错误“模型容器无法响应 ping;请确保 /ping 端点已实现并以 HTTP 200 状态响应”,有时我不会吨。

我发现最令人沮丧的是,我已经没有为 /ping 做任何事情(见下面的代码)

@app.route("/ping", methods=["GET"])
def ping():
    """Determine if the container is working and healthy. In this sample container, we declare it healthy if we can load the model successfully."""
    # health = ScoringService.get_model() is not None  # You can insert a health check here
    # status = 200 if health else 404
    
    status = 200
    return flask.Response(response="\n", status=status, mimetype="text/csv")

错误怎么可能仍然发生?

我从一些帖子中读到(例如,如何向 Sagemaker 端点添加健康检查? )说“ping 响应应在 2 秒超时内返回”。

如何增加 ping 响应超时?一般来说,我能做些什么来防止错误发生?

标签: amazon-web-servicesdockernginxamazon-ecsamazon-sagemaker

解决方案


快速澄清一下,SageMaker 批量转换和创建实时端点是两个不同的方面。对于 [Batch Transform],您不使用持久端点,而是创建一个可以对大量数据执行推理的转换器对象。可以在此处查看使用 Batch 的自带方法的示例。

无论是批处理还是实时,都必须通过 /ping。确保您在此路线中加载模型。通常,如果您的模型未正确加载,则会导致发出运行状况检查错误。这是另一个BYOC 示例,在 predictor.py 中,您可以看到我在 /ping 路由中加载模型。

最后不确定您所说的同时 20 个实例是什么意思?您是否使用 20 个实例支持端点?


推荐阅读