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