首页 > 解决方案 > Sagemaker:指定自定义入口点会导致未找到错误

问题描述

我正在尝试将使用 tensorflow 训练的对象检测模型部署到 sagemaker。我能够在模型创建期间在不指定任何入口点的情况下部署它,但事实证明这样做仅适用于小尺寸图像(Sagemaker 的限制为 5MB)。我用于此的代码如下:

from sagemaker.tensorflow.serving import Model

# Initialize model ...
model = Model(
    model_data= s3_path_for_model,
    role=sagemaker_role,
    framework_version="1.14",
    env=env)

# Deploy model ...
predictor = model.deploy(initial_instance_count=1,
                         instance_type='ml.t2.medium')


# Test using an image ...
import cv2
import numpy as np

image_content = cv2.imread("PATH_TO_IMAGE",
                           1).astype('uint8').tolist()
body = {"instances": [{"inputs": image_content}]}

# Works fine for small images ...
# I get predictions perfectly with this ...
results = predictor.predict(body)

所以,我四处搜索,发现我需要传递一个entry_pointforModel()才能预测更大的图像。就像是:

model = Model(
        entry_point="inference.py",
        dependencies=["requirements.txt"],
        model_data=  s3_path_for_model,
        role=sagemaker_role,
        framework_version="1.14",
        env=env
)

但是这样做会给出FileNotFoundError: [Errno 2] No such file or directory: 'inference.py'。请在这里提供一点帮助。我正在使用sagemaker-python-sdk. 我的文件夹结构如下:

model
    |__ 001
          |__saved_model.pb
          |__variables
                |__<contents here>

    |__ code
          |__inference.py
          |__requirements.txt

注意:我也尝试过 ./code/inference.py 和 /code/inference.py。

标签: pythonamazon-web-servicestensorflowtensorflow-servingamazon-sagemaker

解决方案


5MB 是实时端点的硬限制。

您确定需要传递如此大的图像进行预测吗?大多数用例适用于较小、较低分辨率的图像。

如果您需要实时预测,一种解决方法是在预测请求中传递图像 S3 URI(而不是图像本身),然后从 S3 加载图像。

如果您不需要实时预测,您应该查看批量转换,它不会强制执行该大小限制:https ://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html


推荐阅读