MLOps - 如何刷新 ML 模型
MLOps - How to refresh a ML model
下图显示了我公司用于管理模型生命周期的两条管道。
- 第一个管道“应用程序”与创建托管模型并具有推理逻辑的应用程序组件有关。
- 第二个是“模型”的管道,它导致以二进制格式生成模型。
(模型和应用程序)将一起部署在我们的编排器(一个 kubernetes 集群)中。
我处于应用程序逻辑未更改但模型更改的情况。
我可能会发现自己处于以下情况。
我想有两种方法可以管理编排器上的 运行 时间模型刷新(希望有人建议我其他我没有考虑过的可能性):
- 在应用逻辑中;代码通过采用新模型通过线程管理刷新。
- 优点:没有生成新的容器
- 缺点:能够引入错误。
- 通过管道;管道必须由事件触发(在我的例子中是 git 分支上的合并)并通过执行滚动更新来引入容器。 运行 处的新容器将加载新模型。
- 优点:现有流程
- 缺点:模型的每个新版本都应该提供容器的新构建,即使应用程序逻辑没有改变。
[问题]
有人可以向我推荐这些案例的最佳实践(可能通过图像上的标签系统)吗?
谢谢
基普利科
最无缝的方法是通过 k8s/kubectl 执行 rolling update。这将需要一个新容器,但是,这被认为是最佳实践,因为每个容器都保持原子性和可重现性。通过线程更新模型很难调试。
您可以做的另一种情况是 blue-green deployment 使用 Istio,并在旧模型和新模型之间缓慢移动流量,尽管这需要更多的开销。
下图显示了我公司用于管理模型生命周期的两条管道。
- 第一个管道“应用程序”与创建托管模型并具有推理逻辑的应用程序组件有关。
- 第二个是“模型”的管道,它导致以二进制格式生成模型。
(模型和应用程序)将一起部署在我们的编排器(一个 kubernetes 集群)中。
我处于应用程序逻辑未更改但模型更改的情况。 我可能会发现自己处于以下情况。
我想有两种方法可以管理编排器上的 运行 时间模型刷新(希望有人建议我其他我没有考虑过的可能性):
- 在应用逻辑中;代码通过采用新模型通过线程管理刷新。
- 优点:没有生成新的容器
- 缺点:能够引入错误。
- 通过管道;管道必须由事件触发(在我的例子中是 git 分支上的合并)并通过执行滚动更新来引入容器。 运行 处的新容器将加载新模型。
- 优点:现有流程
- 缺点:模型的每个新版本都应该提供容器的新构建,即使应用程序逻辑没有改变。
[问题] 有人可以向我推荐这些案例的最佳实践(可能通过图像上的标签系统)吗?
谢谢 基普利科
最无缝的方法是通过 k8s/kubectl 执行 rolling update。这将需要一个新容器,但是,这被认为是最佳实践,因为每个容器都保持原子性和可重现性。通过线程更新模型很难调试。
您可以做的另一种情况是 blue-green deployment 使用 Istio,并在旧模型和新模型之间缓慢移动流量,尽管这需要更多的开销。