我知道萨吉梅克不支持多模型端点的内建图像分类算法。。但是,在文档中,他们暗示要构建一个自定义容器,以便使用具有多模型端点功能的“任何其他框架或算法”:
若要使用任何其他框架或算法,请使用SageMaker推理工具包构建支持多模型端点的容器。有关信息,请参见使用多模型服务器构建自己的容器。
理想情况下,我希望将我已经培训过的许多(20+)图像分类模型部署到单个端点,以节省成本。然而,在阅读了“构建您自己的容器”指南之后,我仍然不太清楚如何为非自定义算法生成的模型构建自定义推理容器。大多数教程和示例笔记本都提到了使用Py火炬或Sklearn。我不清楚是否可以使用这些库对我用内置图像分类算法创建的模型进行推理。
是否有可能创建一个容器来支持不受支持的内置Sagemaker算法的多模型端点?如果是这样的话,是否有人能暗示这是如何做到的呢?
发布于 2021-02-03 19:01:31
是的,可以将内置的图像分类模型部署为SageMaker多模型端点。关键是图像分类使用Apache MXNet。您可以提取模型工件(SageMaker将它们存储在名为model.tar.gz in S3的zip文件中),然后将它们加载到MXNet中。SageMaker MXNet容器支持多模型端点,因此您可以使用它来部署模型。
如果您从该算法解压缩model.tar.gz,您将发现三个文件:
图像-分类-*。
image-classification-symbol.json
model-shapes.json
image-classification-0000.params,容器期望这些文件被命名为MxNet模型-符号.model和模型-shapes.json。因此,我解压缩了zip文件,重命名了这些文件,并对它们进行了重新压缩。有关MXNet容器的更多信息,请查看GitHub存储库。
之后,可以使用带有以下代码的MXNet SDK将模型部署为单个SageMaker端点:
from sagemaker import get_execution_role
from sagemaker.mxnet.model import MXNetModel
role = get_execution_role()
mxnet_model = MXNetModel(model_data=s3_model, role=role,
entry_point='built_in_image_classifier.py',
framework_version='1.4.1',
py_version='py3')
predictor = mxnet_model.deploy(instance_type='ml.c4.xlarge', initial_instance_count=1)
Python脚本的入口点现在可以是一个空Python文件。我们将使用MXNet容器提供的默认推理处理。
默认的MXNet容器只接受JSON、CSV和Numpy数组作为有效输入。因此,您必须将输入格式化为这三种格式中的一种。下面的代码演示了我是如何使用Numpy数组实现的:
import cv2
import io
np_array = cv2.imread(filename=img_filename)
np_array = np_array.transpose((2,0,1))
np_array = np.expand_dims(np_array, axis=0)
buffer = io.BytesIO()
np.save(buffer, np_array)
response = sm.invoke_endpoint(EndpointName='Your_Endpoint_name', Body=buffer.getvalue(), ContentType='application/x-npy')
一旦您有了一个使用MXNet容器的端点,就应该能够使用SageMaker MultiDataModel构造函数在多模型端点中运行它。
如果希望使用不同的输入数据类型,以便不必在应用程序代码中进行预处理,则可以在input_fn脚本中提供MxNet容器中的entry_point方法。看这里获取更多信息。如果这样做,您可以直接将图像字节传递给SageMaker,而无需格式化numpy数组。
https://stackoverflow.com/questions/65819978
复制相似问题