创建端点时出错。

0

【以下的问题经过翻译处理】 在尝试从训练成功的模型创建端点时发生以下错误:

  • 在Web控制台中:

顾客:生产变体AllTraffic的主要容器未通过ping健康检查。请检查此端点的CloudWatch日志。

  • CloudWatch日志:

执行:“serve”:$PATH中找不到可执行文件

我正在使用Lambda步骤部署模型,就像在这个笔记本中一样。Lambda步骤成功,我可以在控制台中看到模型配置创建成功。

在AWS Web控制台中,当我为已注册的模型创建端点时,出现完全相同的错误,在推理->模型下。在控制台中,我可以看到为模型创建了推理容器,具有以下特征:

  • 映像:763104351884.dkr.ecr.eu-west-3.amazonaws.com/tensorflow-training:2.8-cpu-py39
  • 模式:单个模型
  • 环境变量(键值):

SAGEMAKER_CONTAINER_LOG_LEVEL20

SAGEMAKER_PROGRAM inference.py

SAGEMAKER_REGION eu-west-3

SAGEMAKER_SUBMIT_DIRECTORY/opt/ml/model/code

我不知道出了什么问题,也找不到任何有关此问题的相关信息。需要提供用于推理的自定义Docker映像或其他内容吗?

有关更多详细信息,请查找下面的管道模型步骤代码。非常感谢任何帮助!

model = Model(
    image_uri=estimator.training_image_uri(),
    model_data=step_training.properties.ModelArtifacts.S3ModelArtifacts,
    sagemaker_session=sagemaker_session,
    role=sagemaker_role,
    source_dir='code',
    entry_point='inference.py'
)
step_model_create = ModelStep(
        name="CreateModelStep",
        step_args=model.create(instance_type="ml.m5.large")
 )

register_args = model.register(
        content_types=["*"],
        response_types=["application/json"],
        inference_instances=["ml.m5.large"],
        transform_instances=["ml.m5.large"],
        model_package_group_name="test",
        approval_status="Approved"
)
step_model_register = ModelStep(name="RegisterModelStep", step_args=register_args)
profile picture
专家
已提问 8 个月前20 查看次数
1 回答
0

【以下的回答经过翻译处理】 这里的问题是您的推理模型容器URI 763104351884.dkr.ecr.eu-west-3.amazonaws.com/tensorflow-training:2.8-cpu-py39 使用的是训练镜像,而不是TensorFlow的推理镜像。因为这些镜像都为它们自己的功能进行了优化,所以在这种情况下,训练容器中的serving可执行文件不可用。

通常,特定框架的SDK类会为您处理此查找(例如,链接中的笔记本使用的TensorFlowModel(...),或在从Estimator类调用sagemaker.tensorflow.TensorFlow.deploy(...)时)。

但我在这里看到你正在使用通用的“Model”,所以猜测你不知道(或不想依赖框架)Lambda函数运行时的框架和版本?

我的建议是:

  • 你可以在调用Lambda部署函数之前使用Pipelines中的ModelStep创建你的模型吗?类似于你链接的笔记本使用CreateModelStep的方式。这将把你的框架和版本构建到流水线定义本身中,应该意味着选择推理容器镜像的处理是正确和自动的。

  • 如果你确实需要是动态的,我认为你可能需要找到一种从训练任务中查找至少框架的方法。经过我的测试,你可以使用estimator = sagemaker.tensorflow.TensorFlow.attach(“training-job-name”),然后使用model = estimator.create_model(...)来正确推断出推理容器的具体版本*来自训练作业,但仍然需要知道TensorFlow是正确的框架。我不知道是否有框架无关的等效方法?所以可以尝试描述训练作业,手动判断试用了什么训练框架的信息,然后根据相对应的框架的estimator类的attach()方法来建立模型。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则