首页 > 解决方案 > 使用 Blazingtext 预处理 Sagemaker 推理管道的数据

问题描述

我正在尝试找出为 AWS Sagemaker 的推理端点预处理输入数据的最佳方法。我正在使用 BlazingText 算法。

我不确定最好的前进方式,我会感谢任何指示。

我目前在 Sagemaker 中使用 Jupyter 笔记本训练我的模型,效果很好,但问题是我使用 NLTK 来清理我的数据(瑞典停用词和词干等):

import nltk
nltk.download('punkt')
nltk.download('stopwords')

所以问题真的是,我如何获得与推理端点相同的预处理逻辑?

关于如何进行,我有几个想法:

我想选择第一个选项,但我有点难以理解是否有一个我可以构建的 docker 镜像,并添加我的依赖项,或者我是否需要从头开始构建一些东西。例如,图像 sagemaker-sparkml-serving:2.2 会是一个好的候选者吗?

但也许有更好的方法?

标签: pythonamazon-web-servicesmachine-learningamazon-sagemakerinference

解决方案


尼古拉斯

我建议你试试BentoML

BentoML 是一个用于高性能模型服务的开源框架。只需几行代码,它就可以将 ML 模型转变为生产 API 端点。

对于您的用例:

在 Sagemaker 上的笔记本中,训练模型后,您可以使用 BentoML 定义预测服务规范。此代码构建了一个 BentoService,它需要一个 PickleArtifact,公开一个名为 predict 的 API 端点,并自动包含 pip 依赖项

%%write my_service.py

from bentoml import api, BentoService, artifacts, env
from bentoml.artifacts import PickleArtifact
from bentoml.handlers import DataFrameHandler

@env(auto_pip_dependencies=True)
@artifacts([PickleArtifact('my_model')]
class MyTextClassifier(BentoService):
    def preprocess(self, raw_data):
        ...
        return processed_data;

    @api(DataframeHandler)
    def predict(self, df):
        processed_data = self.preprocess(df)
        return self.artifacts.my_model.predict(processed_data)

在下一个单元格中,加载从前一个单元格定义的类并保存模型。

from my_service import MyTextClassification

service = MyTextClassification()
service.pack('my_model', trained_model)
service.save()
# could also saved the model to S3 bucket
# service.save('s3://my_bucket')

您可以在笔记本中轻松部署到 Sagemaker。

!bentoml sagemaker deploy my-deployment -b {service.name}:{service.version} --api-name predict

这是一个例子。在此示例中,它使用 Keras 构建文本分类模型,然后将模型部署到 Sagemaker 以进行模型服务。

https://github.com/bentoml/gallery/blob/master/keras/text-classification/keras-text-classification.ipynb

免责声明:我是 BentoML 的作者之一。


推荐阅读