Sagemaker:指定自定义入口点会给出未找到错误



我正在尝试将使用张量流训练的对象检测模型部署到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)

所以,我用谷歌搜索了一下,发现我需要传递一个Model()entry_point才能预测更大的图像。像这样:

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]没有这样的文件或目录:"inference.py"。请在这里帮一点忙。我正在使用sagemaker-python-sdk. 我的文件夹结构为:

model
|__ 001
|__saved_model.pb
|__variables
|__<contents here>
|__ code
|__inference.py
|__requirements.txt

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

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

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

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

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

最新更新