为Metaflow部署基础设施
尽管您可以在您的笔记本电脑上轻松开始使用Metaflow,但Metaflow的主要优势在于它能够扩展到外部计算集群以及部署到生产级工作流协调器。要利用这些功能,您需要适当地配置Metaflow及其背后的基础设施。另有一份指南,Metaflow Resources for Engineers涵盖了与此类部署相关的所有内容。本页面提供了一个快速概述。
支持的基础设施组件
由于现代数据科学/机器学习应用程序由多个相互连接的系统驱动,因此将它们组织成基础设施堆栈是有用的,就像下面所示的那样 (为什么?请点击这里)。您可以看到所有受支持系统的商标,您可以利用这些商标来启用每一层。
将这个插图视为一个菜单,它允许你制作自己的披萨:你可以定制自己的外皮、酱料、配料和奶酪。你可以根据现有的业务基础设施以及组织的需求和偏好来做选择。幸运的是,Metaflow 为所有这些组合提供了一致的 API,因此你甚至可以在稍后更改选择,而无需重写你的流程。
下表解释了Metaflow的五种主要部署选项以及每种选项支持的组件。您可以选择在以下环境中部署Metaflow:
- 仅本地 环境 - 只需在任何工作站上
pip install metaflow。 - AWS 在 EKS 作为 Kubernetes 平台 或者 使用 AWS 管理的服务。
- Azure 在 AKS 作为一个 Kubernetes 平台。
- 谷歌云 在 GKE 作为 Kubernetes 平台上。
- 任何 Kubernetes 集群 包括本地部署。
| 层 | 组件 | 描述 | 仅本地 | AWS | Azure | GCP | K8s |
|---|---|---|---|---|---|---|---|
| 建模 | 任何Python库 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| 部署 | 开源的生产级工作流调度器 | 🟢 | 🟢 | 🟢 | 🟢 | ||
| 部署 | AWS 管理的生产级工作流协调器 | 🟢 | |||||
| 部署 | 流行的开源工作流调度器 | 🟢 | 🟢 | 🟢 | 🟢 | ||
| 版本控制 | Metaflow 在本地文件中的跟踪 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| 版本控制 | Metaflow 在中央数据库中的跟踪 | 🟢 | 🟢 | 🟢 | 🟢 | ||
| orchestration | Metaflow 的本地工作流调度器 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| 计算 | Metaflow 任务作为本地进程 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| 计算 | AWS管理的批量计算服务 | 🟢 | |||||
| 计算 | 开源批处理计算平台 | 🟢 | 🟢 | 🟢 | 🟢 | ||
| 数据 | Metaflow工件在本地文件中 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | |
| 数据 | Metaflow 工具的 AWS 管理存储中的工件 | 🟢 | 🟢 | ||||
| 数据 | 在 Azure 管理的存储中的 Metaflow 工件 | 🟢 | 🟢 | ||||
| 数据 | Metaflow 在谷歌管理的存储中的工件 | 🟢 | 🟢 |
请注意,使用本地调度器进行快速原型设计在所有这些选项中都得到支持,但唯一的本地选项不支持与外部计算层的可扩展性,也不支持生产级部署。
您可以通过注册一个 Metaflow Sandbox,轻松在浏览器中免费测试 AWS/Azure/GCP/Kubernetes 堆栈。
示例堆栈
以下是我们看到的一些典型部署:
本地:轻松原型制作
只需 pip install metaflow 来部署这个栈
这是您在本地安装 Metaflow时默认获得的栈。它的主要优点是零配置和维护 - 它开箱即用。这是开始使用 Metaflow 的好方法。
当你想要开始与多个人协作,这需要一个中心元数据服务,或者你想要开始运行更大规模的工作负载,或者你想要部署你的工作流,以便它们即使在你的笔记本电脑休眠时也能运行,请查看下面更具功能的技术栈。
低维护性可扩展原型,由AWS驱动
如果你正在寻找最简单和最实惠的方式来扩展计算到云端,包括基于云的GPU,那么这个堆栈是一个很好的选择。考虑一下这些好处:
- 工件存储在AWS S3中,因此您无需担心存储不足或数据丢失。
- 可扩展性由 AWS Batch 管理,初始设置后无需维护。
- AWS Batch 是非常具成本效益的:您只需按秒支付使用的 EC2 实例时间,没有额外费用。为了进一步降低计算成本,您可以利用临时实例。
在这个堆栈中,主要缺失的部分是 一个高可用的工作流协调器 ,你可以通过升级到下面的选项轻松添加它。此外,拥有更复杂计算需求的大型团队可能会发现 AWS Batch 有所限制,在这种情况下,你可以考虑基于 Kubernetes 的堆栈。
低维护的全栈,由AWS驱动
如果您需要完整的数据科学/机器学习基础设施,但希望尽量减少设置和管理的工作量,选择此选项。您将获得上述所述的AWS Batch的所有好处,以及在AWS Step Functions上的生产部署,这是一个由AWS管理的高可用性、可扩展的工作流编排器。Metaflow在中央元数据服务中跟踪所有内容,使协作变得简单。
以下是未使用此技术栈的主要原因:
- 您想使用除AWS之外的其他云。
- 您需要一个比AWS托管服务所能提供的更可定制的工作流协调器和计算平台。
- 此堆栈不支持 event-triggering。如果此功能对您很重要,请考虑使用基于Kubernetes的堆栈。
可定制的全栈在AWS上,由Kubernetes驱动
如果你的工程团队有使用Kubernetes的经验,他们可能更喜欢一个与现有安全政策、可观察性工具和部署机制兼容的熟悉技术栈。在这种情况下,这个以Kubernetes为基础的技术栈,结合Kubernetes上的计算和在可靠、可扩展的开源 Argo Workflows 上的部署,是一个不错的选择。
这个堆栈可以在AWS的EKS上轻松部署,利用S3作为数据存储。或者,一些公司在本地使用Minio作为S3兼容的数据存储来运行这个堆栈。
这个堆栈需要比上面的AWS原生堆栈更多的维护,尽管如果您的组织已经熟悉Kubernetes,基本的设置是相当可管理的。
定制化的全栈解决方案在Azure上,基于Kubernetes
如果您需要一个全栈的DS/ML平台在Azure上,这个基于Kubernetes的堆栈是一个不错的选择。它与在AWS上运行的EKS上的堆栈相同,S3基础的数据存储被Azure Blob Storage替代。
这个堆栈会产生基于 AKS 的 Kubernetes 集群的典型维护开销,如果您的组织已经使用 AKS,这不应该增加太多负担。
可自定义的全栈服务,基于Kubernetes,运行于Google Cloud
如果您需要一个完整的 DS/ML 平台在 Google Cloud 上,这个基于 Kubernetes 的堆栈是一个不错的选择。它与在 AWS 上运行的 EKS 的堆栈相同,基于 S3 的数据存储已被 Google Cloud Storage 替换。
这个堆栈产生了基于GKE的Kubernetes集群的典型维护开销,如果你的组织已经使用GKE,这不会增加太多负担。
如果您对堆栈不确定,只需运行 pip install metaflow 来安装本地堆栈,然后继续查看 教程。您创建的流将在这些堆栈上无须更改地工作。