集成模型

已完成

应规划如何集成模型,因为这会影响模型训练方式或使用的训练数据。 若要集成模型,需要将模型部署到终结点。 可以将模型部署到终结点进行实时或批量预测

将模型部署到终结点

训练模型时,目标通常是将模型集成到应用程序中。

若要轻松地将模型集成到应用程序中,可以使用终结点。 简单地说,终结点可以是一个 Web 地址,应用程序可以调用它来获取消息。

将模型部署到终结点时,有两个选项:

  • 获取实时预测
  • 获取批量预测

获取实时预测

如果希望模型在传入任何新数据时对其进行评分,则需要实时预测。

当应用程序(如移动应用或网站)使用模型时,通常需要实时预测。

假设你有一个包含产品目录的网站:

  1. 客户在网站上选择产品,例如衬衫。
  2. 根据客户的选择,模型会立即推荐产品目录中的其他项目。 网站显示模型的推荐。

显示网店网站的示意图。衬衫显示在顶部,基于衬衫的推荐产品显示在底部。

客户可以随时在网店中选择产品。 你希望模型可以立即找到推荐的产品。 网页加载和显示衬衫详细信息所需的时间是获取推荐产品或预测所需的时间。 然后,当显示衬衫时,还可以显示推荐的产品。

获取批量预测

如果希望模型分批对新数据进行评分,并将结果另存为文件或数据库,则需要批量预测。

例如,可以训练预测未来每周橙汁销量的模型。 通过预测橙汁销量,可以确保供应量足以满足预期需求。

假设你要可视化报表中的所有历史销售数据。 您需要将预测的销量包含在同一份报告中。

显示具有多个图形的报表的示意图。一个图形是一个折线图,其中蓝色箭头突出显示预测值。

虽然橙汁全天销售,但你只想每周计算一次预测值。 可以收集整个星期的销售数据,并仅在拥有整周的销售数据时调用模型。 数据点的集合称为批。

决定是实时部署还是批量部署

若要决定是设计实时部署解决方案还是批量部署解决方案,需要考虑以下问题:

  • 预测应多久生成一次?
  • 多久需要结果?
  • 预测应该单独生成还是批量生成?
  • 执行模型需要多少计算能力?

确定必要的评分频率

一种常见方案是使用模型为新数据评分。 在实时或批量获取预测之前,必须先收集新数据。

有多种方法可以生成或收集数据。 还可以以不同的时间间隔收集新数据。

例如,可以每分钟从物联网 (IoT) 设备收集温度数据。 每次客户从你的网店购买产品时,你都可以获得交易数据。 或者,可以每三个月从数据库提取一次财务数据。

通常,有两种类型的用例:

  1. 需要模型在传入新数据后立即对其进行评分。
  2. 可以计划或触发模型,以对随时间推移收集的新数据进行评分。

显示实时预测和批量预测的可视化表示形式的示意图。

需要实时预测还是批量预测不一定取决于收集新数据的频率。 相反,这取决于需要生成预测的频率和速度。

如果在收集新数据时立即需要模型预测,则需要实时预测。 如果仅在特定时间使用模型预测,则需要批量预测。

确定预测数

要问自己的另一个重要问题是需要单独生成预测还是批量生成预测。

演示单独预测和批量预测之间的差异的一种简单方法是想象一个表格。 假设你有一个客户数据表,其中每一行代表一个客户。 对于每个客户,你都有一些人口统计数据和行为数据,例如他们从你的网店购买的产品数量以及其上次购买日期。

根据此数据,可以预测客户流失:客户是否会再次从你的网店进行购买。

训练模型后,可以决定是否要生成预测:

  • 单独:模型接收单行数据,并返回单个客户是否会再次购买。
  • 批量:模型在一个表中接收多行数据,并返回每个客户是否会再次购买。 结果被整理到一个包含所有预测的表中。

使用文件时,还可以生成单独或批量预测。 例如,使用计算机视觉模型时,可能需要对单个图像进行单独评分,或者在一个批处理中对图像集合进行评分。

考虑计算成本

除了在训练模型时使用计算,部署模型时也需要计算。 根据是将模型部署到实时终结点还是批处理终结点,将使用不同类型的计算。 若要决定是将模型部署到实时终结点还是批处理终结点,必须考虑每种类型的计算成本。

如果需要实时预测,则需要始终可用的计算,并且能够(几乎)立即返回结果。 Azure 容器实例 (ACI) 和 Azure Kubernetes 服务 (AKS) 等容器技术在这种场景中非常理想,因为它们能够为已部署的模型提供轻量级的基础设施。

但是,将模型部署到实时终结点并使用此类容器技术时,计算始终运行。 部署模型后,需要持续支付计算费用,因为无法暂停或停止计算,因为模型必须始终可用于即时预测。

或者,如果需要批量预测,则需要能够处理大型工作负载的计算。 理想情况下,可以使用计算群集,该群集可以使用多个节点对数据进行并行批量评分。

使用可以并行批处理数据的计算群集时,计算可以在触发批处理评分时由工作区预配,在没有要处理的新数据时纵向缩减到 0 个节点。 通过使工作区缩减空闲计算群集的规模,可以节省大量成本。