python AWS Sagemaker:当您上传自己的本地训练的SKlearn模型tarball时,entry_point文件中需要哪个函数/代码来进行预测?

5ssjco0h  于 2023-05-21  发布在  Python
关注(0)|答案(1)|浏览(111)

我们在本地训练sklearn模型,然后将其作为 *.tar.gz文件上传到S3,以便通过Sagemaker部署它。在那里,我们使用Sagemaker自己的SKLearnModel docker镜像,旨在将我们的模型部署到Sagemaker端点。我们的方法与this threadover here中描述的方法类似。
这基本上就是我们Sagemaker jupyter notebook中的代码:

from sagemaker.sklearn.model import SKLearnModel

sagemaker_model = SKLearnModel(model_data='s3://ourModelS3Bucket/ourModelTarball.tar.gz',
                                 role='arn:aws:iam::someNumber:role/OurPredefinedRole',
                                 entry_point='our_entry_point.py')

predictor = sagemaker_model.deploy(initial_instance_count=1,
                                   instance_type='ml.t2.large') #be careful which instance you choose!

我们想知道的是,我们如何为我们的模型编写入口点代码(这里称为'our_entry_point. py'),以便Sagemaker可以成功部署它?
它必须包含一个predict()函数吗?它是像脚本一样从上到下执行的吗?还是我们必须定义一个if __name__ == "__main__": block?这是特别相关的,因为我们可能希望在执行预测本身之前添加一些额外的特征生成/选择。
任何帮助都是非常受欢迎的,无论是直接的答案还是可能提供答案的文档/教程的链接。到目前为止,Sagemaker文档和一些Github examples是相当有帮助的。

bq8i3lrv

bq8i3lrv1#

我建议你看一下:

但直接回答你的问题:对于代码的可移植性来说,主块总是一个好主意。SageMaker确实支持但不需要在entry_point脚本中指定这样的块(参见上面的示例)。相反,SageMaker将从该文件导入所需的函数,而不执行主块。
在需要定义的函数方面,上述文档指出:
在服务模型之前,必须先加载它。SageMaker Scikit-learn模型服务器通过调用脚本中必须提供的model_fn函数来加载模型。model_fn应具有以下签名:

SageMaker Scikit-learn模型服务器提供了这些函数的默认实现。您可以在宿主脚本中为这些函数提供自己的实现。如果您省略了任何定义,那么SageMaker Scikit-learn模型服务器将使用该函数的默认实现。
因此,看起来您必须定义model_fn,但其他所有内容都是可选的(这也可以在示例中看到)

相关问题