如何在AWS SageMaker中运行预训练模型?

5

我有一个预训练的model.pkl文件和与之相关的所有其他ml模型文件。我想要将其部署到AWS SageMaker上。 但是没经过训练,如何将其部署到AWS SageMaker呢?因为在AWS SageMaker的fit()方法中会运行训练命令并将model.tar.gz推送到S3位置,当使用deploy()方法时,它会使用相同的S3位置来部署模型,我们不手动创建与AWS模型相同的S3位置,并使用一些时间戳给它命名。如何在S3位置中放置我们自己的个性化model.tar.gz文件,并使用相同的S3位置调用deploy()函数。


这个回答解决了你的问题吗?如何使用Dockerfile在AWS SageMaker中运行Python文件 - Pramesh Bajracharya
1个回答

7
您需要做的只有以下几步:
  1. 将您的模型存储在任意S3位置,以 model.tar.gz 压缩格式进行存档。
  2. 提供一个推理脚本,以SageMaker兼容的docker镜像形式存在,并且能够读取您的 model.pkl,通过该脚本对模型进行推理。
  3. 创建一个端点(endpoint),将相关信息与您的推理代码关联起来。
当您请求部署端点时,SageMaker将下载您的model.tar.gz并解压缩到服务器docker镜像的适当位置,即 /opt/ml/model
根据您使用的框架,您可以使用预先存在的docker镜像(Scikit-learn、TensorFlow、PyTorch、MXNet),或者您可能需要创建自己的docker镜像。
  • 有关自定义镜像的创建,请参见此处的规范,这里是两个自定义容器的示例:Rsklearn(由于现在有预先构建的docker镜像以及SageMaker sklearn SDK,所以sklearn的这个示例已不太相关)。
  • 有关利用现有容器的Sklearn、PyTorch、MXNet、TF,请查看此示例:在SageMaker Sklearn容器中使用随机森林。在此示例中,没有任何限制阻止您部署在其他地方训练的模型。请注意,如果训练/部署环境不匹配,由于某些软件版本差异,您可能会遇到错误。
对于您的以下经验:

当使用deploy方法时,它使用相同的s3位置来部署模型,我们不需要手动创建与aws模型相同的位置,并使用一些时间戳给它命名。

是的,当使用deploy方法时,SageMaker将使用与训练相同的S3位置来部署模型。您不需要手动创建一个位置,SageMaker会自动为您处理。

我同意有时使用SageMaker Python SDK(SageMaker的多种可用SDK之一)的演示可能会误导人,因为它们经常利用刚刚训练过的Estimator可以在同一个会话中部署(Estimator.deploy(..)),而无需实例化将推理代码映射到模型工件的中间模型概念。这种设计可能是为了代码紧凑性而进行的,但在现实生活中,给定模型的训练和部署可能来自在不同系统上运行的不同脚本。要在同一会话中部署训练过的模型是完全可能的,您需要实例化一个sagemaker.model.Model对象,然后将其部署。


有没有部署预训练的TensorFlow模型到SageMaker的逐步详细说明? - wawawa
嗨,Olivier,感谢分享。在这篇文章中,它使用了一个.h5格式的文件,并使用笔记本实例进行部署。我将我的模型从.h5转换为.tar.gz文件,并有一个Python脚本来创建模型。只是想知道是否有一种方法可以使用它们来部署模型到SageMaker? - wawawa
据我所知,SageMaker只能理解.tar.gz格式,那么我能否使用model.tar.gz文件创建端点? - wawawa
SageMaker需要model.tar.gz文件,但你放在tar.gz里面的内容是自由选择的,可以是任何东西。对于SageMaker TFServing集成,它必须是一个TensorFlow SavedModel。 - Olivier Cruchant
@OlivierCruchant 你能看一下这个吗? https://dev59.com/877pa4cB1Zd3GeqP5L-J - Muhammad Arsalan Hassan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接