更便宜的替代编排工作流程 将所有内容打包到训练任务中使用 Cloud Functions 启动/停止 Composer在小型虚拟机中自托管 AirflowDockerize 一切并使用 CloudRun 进行训练

问题描述

我目前正在将 ML 模型投入生产,并且正在研究我应该依靠哪种工具来编排整个过程:

  1. 从 BQ 获取数据。
  2. 做一些特征工程和一般数据预处理
  3. 创建训练/测试分组。
  4. 以 .csv 格式转储数据(在 gs 存储桶中)
  5. 开始训练工作并保存模型工件

一个单独的阶段模型将用于:

  1. 从 BQ 表的输入中检索批量预测。
  2. 在不同的 BQ 表中插入上面计算的预测。

现在,我完全理解编排这样的工作流将是 Cloud Composer 的最佳选择,但该项目是为非营利组织设计的,每月 381 欧元的定价对他们来说不是小事。

因此,我不得不考虑以下选项:

将所有内容打包到训练任务中

一种选择可能是通过将所有内容打包到 AI 平台训练任务中来分解训练工作流程。

使用 Cloud Functions 启动/停止 Composer

我在想以下几点:

  1. 使用 Cloud Functions 启动 Composer 实例
  2. 找到一种从另一个 Cloud Functions 函数启动 Airflow 工作流程的方法
  3. 在工作流程结束后发送发布/订阅消息
  4. 使用上述发布/订阅消息来触发另一个将停止 Composer 实例的 Cloud Function。

在小型虚拟机中自托管 Airflow

这显然需要更多的研究才能让它发挥作用。特别是因为我不知道如何在 Nginx 中实现 oauth。

Dockerize 一切并使用 CloudRun 进行训练

这可能看起来像:

  1. 在 Docker 容器中打包训练作业(具有不同的训练/服务任务入口点)
  2. 使用 Cloud Scheduler(或 Cloud Functions 函数,我仍然需要考虑这个问题)启动 Cloudrun 并执行所有需要的任务。

AFAIK Cloudrun 仍然有 15 分钟的运行时硬上限,所以这个选项可能根本不可行......


我应该如何解决这个问题?我不确定我是否忽略了比上面列出的选项更简单的东西。

解决方法

最近有这个产品https://cloud.google.com/workflows,你可以用它来管理,例如调用BQ api来创建中间表(带有特征工程和转换),然后导出数据,最后触发模型训练. 工作流编排可能是免费的,因为目前有一个免费层,您只需为 BQ 查询、存储和培训付费。