如何使用 Bulkinferrer 从之前在 Tensorflow Extended (TFX) 中推送的模型进行预测
Posted
技术标签:
【中文标题】如何使用 Bulkinferrer 从之前在 Tensorflow Extended (TFX) 中推送的模型进行预测【英文标题】:How to predict with Bulkinferrer from a previously pushed model in Tensorflow Extended (TFX) 【发布时间】:2021-12-16 07:37:01 【问题描述】:在 TFX 管道中,我们如何使用BulkInferrer
?
将BulkInferrer
与训练有素的model
或pushed_model
连接起来是相当标准的。但是,如果我不想再次训练模型,我会喜欢使用先前训练的 model
或 pushed_model
并使用 BulkInferrer
进行批量推理(有点像使用 BulkInferrer
服务)。有可能吗?
如果不是,BulkInferrer
组件的目的是什么,只是为了在整个训练之后进行一次性预测或验证?
任何建议或cmets将不胜感激,谢谢。
【问题讨论】:
【参考方案1】:BulkInferrer 是 TFX 库中最新添加的组件,用于支持未标记数据的批量推理。
Robert Crowe 在最近的BEAM summit
中很好地将 BulkInferrer 定位在推理管道中以下是为什么有人会使用 BulkInferrer 的用例列表,试图在 ml-pipelines 而不是 data-pipelines 的情况下使用它:
-
在批处理作业中定期进行,例如每晚运行以推断前一天收到的数据的分数。例如,当推理延迟较高且需要离线运行以使用分数填充缓存时,或者当需要推理大量实例时。
当推理结果预计不会直接返回到推理请求(即实时)但可以异步执行时。例如,在新模型发布之前对其进行影子测试。
以事件驱动的方式。例如,在推断成批数据并检测到模型漂移时触发模型重新训练。
用于成本优化。例如,在低吞吐量模型/服务上,cpu/gpu 实例的空闲时间可能很长。
要在您的 ML 管道中执行此操作而不重新训练您的模型,您可以在管道的末尾添加 BulkInferrer,如果输入和配置没有更改,则可以添加 reuse the results from previous runs。这是由 Kubeflow 管道上的 Argo 和 Tekton 工作流管理器实现的,因为他们实现了 TFX,请参阅 step caching。
【讨论】:
谢谢一百万,这真的有助于我理解这个组件。我想我所需要的就是在管道中启用cache
。只是一个后续问题,既然我有来自管道p-1
的pushed_model
的工件,是否可以创建一个新的管道p-2
并从p-1
加载这个pushed_model
以运行BulkInferrer
p-2
?
当然可以,可以参考p-1使用trainer.outputs['model']
频道制作的神器(模型)
再次感谢您的帮助。我确实在尝试使用trainer.outputs['model']
作为Bulkinferrer
的模型输入,但是,它们来自不同的运行(比如run-1
和run-2
),所以我必须从@987654342 中选择trainer.outputs['model']
@(run-1
)并加载为Channel
类型并将其提供给p-2
(run-2
)中的Bulkinferrer
。到目前为止,我没有任何运气将trainer.outputs['model']
加载为Channel
类型,你介意给我一些详细的例子吗?我怎样才能做到这一点?
从您的元数据存储中获取它怎么样?如果您使用 MLMD,您可以查询上一次运行的模型,例如根据其名称。
感谢您的帮助,我花了一段时间才弄清楚解析器的工作原理。贝当克特! @TheofilosPapapanagiotou以上是关于如何使用 Bulkinferrer 从之前在 Tensorflow Extended (TFX) 中推送的模型进行预测的主要内容,如果未能解决你的问题,请参考以下文章