我将尝试总结我所知道的,但请注意,我还没有参与过 KubeFlow 项目。
在 Databricks 上的 Kedro
我们的方法是使用 CI 构建我们的项目,然后从笔记本执行管道。我们没有使用kedro 推荐的使用 databricks-connect 的方法,因为Jobs 和 Interactive Clusters(DB-connect 需要它们)之间的价格差异很大。如果您正在处理数 TB 的数据,这很快就会变得相关。
作为 DS,这种方法可能感觉很自然,但作为 SWE,尽管它不是。在笔记本中运行管道感觉很笨拙。它有效,但感觉非工业化。Databricks 在自动启动和关闭集群并为您处理运行时方面表现良好。因此,他们的附加值是将 IaaS 与您分离(稍后会详细介绍)。
GCP 和“云原生”
Pro : GCP 的主要卖点是 BigQuery。这是一个非常强大的平台,仅仅因为你可以从第 0 天开始就保持高效。我见过人们在它之上构建整个 Web API。KubeFlow 不绑定到 GCP,因此您可以稍后将其移植到其他地方。Kubernetes 还允许你在集群、API、流媒体、Web 服务、网站上运行任何你想要的东西。
缺点: Kubernetes很复杂。如果你有 10 多名工程师长期运行这个项目,你应该没问题。但不要低估 Kubernetes 的复杂性。它之于云就像 Linux 之于操作系统世界一样。想想日志管理、嘈杂的邻居(一个用于 Web API 的集群 + 批量 Spark 作业)、多集群管理(每个部门/项目一个集群)、安全性、资源访问等。
IaaS 服务器方法
你的最后一个选择,手动安装服务器是我推荐的一种,只有当你有一个庞大的团队,非常大的数据并且正在构建一个长期的产品,其收入可以承受大量的维护成本。
背后的人
您所在地区的人才市场如何?如果您可以聘请具有 GCP 知识的经验丰富的工程师,我会选择第二种解决方案。GCP 是一个成熟的“原生”平台,因为它为客户抽象了很多东西。如果您的市场主要有 AWS 工程师,那可能是一条更好的选择。如果您有许多 kedro 工程师,那也有相关性。请注意,kedro 是不可知论者,可以在任何地方运行。它实际上只是 python 代码。
主观建议:
在主要从事 AWS 项目和一些 GCP 项目之后,我会选择 GCP。我会使用平台的组件(BigQuery、Cloud Run、PubSub、Functions、K8S)作为工具箱,从中进行选择并围绕它建立一个组织。Kedro 可以在任何这些上下文中运行,作为调度程序触发的作业、作为 Kubernetes 上的容器或作为将数据引入(或引出)BigQuery 的 ETL 管道。
虽然 Databricks 比原始 AWS “管理更少”,但它仍然需要考虑服务器和 VPC 网络费用。BigQuery 只是 GB 查询。函数只是调用计数。这些高级组件将使您能够快速向客户展示价值,并且您只需要在扩展时更深入(RaaS -> PaaS -> IaaS)。
AWS 在 IaaS 上也有这些更高级别的抽象,但总的来说,(在我看来)Google 的产品是最成熟的。主要是因为他们发布了他们在内部使用了近十年的工具,而 AWS 为市场构建了新工具。不过,AWS 是 IaaS 之王。
最后一点内容,两位前同事在今年秋天早些时候讨论了 ML 工业化框架