1

下图显示了我们公司用于管理模型生命周期的两条管道。

在此处输入图像描述

  • 第一个管道“应用程序”涉及创建托管模型并具有推理逻辑的应用程序组件。
  • 第二个,“模型”,是一个以二进制格式生成模型的管道。

(模型和应用程序)将一起部署在我们的编排器(kubernetes 集群)中。

在此处输入图像描述

我处于应用程序逻辑不会改变但模型会改变的情况。我会发现自己处于以下情况。

在此处输入图像描述

我想有两种方法可以管理协调器上的运行时模型刷新(希望有人建议我其他我没有考虑过的可能性):

  1. 在应用程序逻辑中;代码通过采用新模型通过线程管理刷新。
    • 优点:没有生成新容器
    • 缺点:能够引入错误。
  2. 通过管道;管道必须由事件触发(在我的情况下是 git 分支上的合并),并通过执行滚动更新来引入容器。运行时的新容器将加载新模型。
    • 优点:现有流程
    • 缺点:模型的每个新版本都应该提供容器的新构建,即使应用程序逻辑没有改变。

[问题] 是否有人可以建议我针对这些案例(可能通过图像上的标签系统)的任何最佳实践?

谢谢基普利科

4

1 回答 1

1

最无缝的方式是通过 k8s/kubectl进行滚动更新。这将需要一个新容器,但是,这被认为是最佳实践,因为每个容器都保持原子性和可重复性。通过线程更新模型将很难调试。

您可以做的另一个场景是使用 Istio进行蓝绿部署,并在新旧模型之间缓慢移动流量,尽管这需要更多开销。

于 2021-02-06T17:18:16.037 回答