amazon-web-services - Sagemaker 推理管道 - 自定义容器无法通过 ping 检查,但未发送 ping 请求?
问题描述
我有一个自定义容器,当它自己部署到端点时可以正常工作。我也在使用 SageMaker 模型容器。我试图在推理管道中将这两者堆叠在一起。两者都托管在 Elastic Container Registry 上。
当我将自定义容器部署为常规端点时,SageMaker 开始发出 ping 请求,这些请求在日志中如下所示
10.32.0.2 - - [18/Aug/2021:09:05:26 +0000] "GET /ping HTTP/1.1" 200 1 "-" "AHC/2.0"
但是,当我将其部署为推理管道内的容器时,使用
response = sm_client.create_model(
ModelName=pipeline_name,
Containers=[
{
"Image": 'ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/model-v1-0-0-0:latest',
"ModelDataUrl": "s3://bucket/models/artifacts/custom-image-training-2021-08-18-07-55-00-997/output/model.tar.gz"
},
{
"Image": '174872318107.dkr.ecr.us-west-2.amazonaws.com/object2vec:1',
"ModelDataUrl": "s3://bucket/models/income/output/o2v-08-13-13-03-11-train/output/model.tar.gz"
}
],
ExecutionRoleArn=role,
InferenceExecutionConfig={
'Mode': 'Serial'
},
)
print("{}\n".format(response))
自定义容器未通过 ping 检查。
在日志中,我可以看到 gunicorn 服务器正在启动,但是没有记录任何 GET 请求,最终它会因健康检查失败而超时。为什么这(不)会发生?看起来容器已准备好响应 ping 请求,但没有发出任何请求。
对于预构建的 SageMaker 模型映像,日志看起来完全不同 - 它以“使用参数调用的 Docker 入口点:服务”开头,并且没有任何持续的运行状况 ping。所以我想知道预建图像的执行方式是否与自定义图像不同,以及是否需要在 create_model 请求中指定我正在使用自定义模型。我尝试了一些不同的参数,但没有运气。但是我很困惑它如何要求容器通过健康 ping 检查,然后不发出 GET 请求?
就像我说的那样,我可以将它们部署到自己的端点。当部署为单个端点时,日志看起来相同,除了作为单个端点定期发生的 GET /ping 请求,但当容器包含在推理管道中时不会发生。
endpoint_config 和端点的其余代码
response = sm_client.create_endpoint_config(
EndpointConfigName=pipeline_name,
ProductionVariants=[
{
"VariantName": "DefaultVariant",
"ModelName": pipeline_name,
"InitialInstanceCount": 1,
"InstanceType": "ml.m4.xlarge",
},
],
)
response = sm_client.create_endpoint(
EndpointName=pipeline_name,
EndpointConfigName=pipeline_name
)
print("{}\n".format(response))
解决方案
推荐阅读
- mysql - 使用 WHERE EXISTS 条件时的性能问题
- netsuite - 验证自定义子列表网络套件上的行
- javascript - 使用 JavaScript scrollIntoView 会导致元素被遮挡
- python - 数字 1 到 3 的范围
- ruby-on-rails - Rails 在渲染模板时关闭控制台日志记录
- python - 如何从 ipyparallel 引擎打印到主进程?
- neo4j - 检索列表中的最后一个节点以进行进一步处理
- java - Akka EventSource 流 API 中的 HTTP2 客户端支持?
- html - 如何堆叠社交图标
- sql - XQuery - 检查一组是否包含另一组(得到零结果)