【问题标题】:Preprocessing data for Sagemaker Inference Pipeline with Blazingtext使用 Blazingtext 预处理 Sagemaker 推理管道的数据
【发布时间】:2020-04-07 09:18:33
【问题描述】:

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

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

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

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

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

我对如何进行有一些想法:

  • 构建一个安装了 python 库和数据的 docker 容器,其唯一目的是预处理数据。然后在推理管道中使用这个容器。

  • 将 Python 库和脚本提供给现有容器,方法与为笔记本的外部库提供相同的方式

  • 使用我需要的库构建一个自定义 fastText 容器并在 Sagemaker 之外运行它。

  • 可能会起作用,但感觉像“黑客”:构建一个安装了正确 Python 库和数据并调用 Sagemaker 端点的 Lambda 函数。我担心冷启动延迟,因为预测流量会很低。

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

但也许还有更好的方法?

【问题讨论】:

    标签: python amazon-web-services machine-learning amazon-sagemaker inference


    【解决方案1】:

    尼古拉斯

    我建议你试试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 的作者之一。

    【讨论】:

    • 感谢您的回答,它看起来很有前途,应该很合适......如果我能让它工作......使用 Sagemaker 笔记本,我得到一个“TypeError:无法腌制 SSLContext对象”试图调用 .save()。所以我设置了一个本地笔记本并尝试做一个最小的配置来让它工作。但没有运气。虽然不同的错误。现在我得到:“PicklingError: 来自 save_reduce() 的参数必须是一个元组”。
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多