python - 使用 Blazingtext 预处理 Sagemaker 推理管道的数据
问题描述
我正在尝试找出为 AWS Sagemaker 的推理端点预处理输入数据的最佳方法。我正在使用 BlazingText 算法。
我不确定最好的前进方式,我会感谢任何指示。
我目前在 Sagemaker 中使用 Jupyter 笔记本训练我的模型,效果很好,但问题是我使用 NLTK 来清理我的数据(瑞典停用词和词干等):
import nltk
nltk.download('punkt')
nltk.download('stopwords')
所以问题真的是,我如何获得与推理端点相同的预处理逻辑?
关于如何进行,我有几个想法:
构建一个安装了 python 库和数据的 docker 容器,其唯一目的是预处理数据。然后在推理管道中使用这个容器。
以与笔记本外部库相同的方式将 Python 库和脚本提供给现有容器
使用我需要的库构建一个自定义的 fastText 容器,并在 Sagemaker 之外运行它。
可能会起作用,但感觉像是“黑客”:构建一个安装了正确 Python 库和数据并调用 Sagemaker 端点的 Lambda 函数。我担心冷启动延迟,因为预测流量会很低。
我想选择第一个选项,但我有点难以理解是否有一个我可以构建的 docker 镜像,并添加我的依赖项,或者我是否需要从头开始构建一些东西。例如,图像 sagemaker-sparkml-serving:2.2 会是一个好的候选者吗?
但也许有更好的方法?
解决方案
尼古拉斯
我建议你试试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 以进行模型服务。
免责声明:我是 BentoML 的作者之一。
推荐阅读
- ios - 导航标题视图中的 UICollectionView 对选择没有响应
- c++ - unordered_set 中的唯一元素,在迭代时擦除和添加?
- php - 如果语言不是英语,如何将字符串转换为 DateTime
- java - 关于用Java编写文件的奇怪问题
- javascript - Vue/Vuex 必须点击两次才能更新数组
- sql - 双字/缩写&SQL,如何区分?
- javascript - 使用脚本标签重定向到另一个 html 页面
- python - 同一图表上的垂直箱线图
- python - 通过添加到变量号来调用函数中的变量?
- visual-studio-code - 如何将“alt + control + click”打开定义重新绑定到vs代码中的键盘快捷方式