跳过主要内容

大规模计算

Metaflow 使得在云端运行计算变得简单。Metaflow 允许你混合和匹配各种可扩展计算的模式,而不是为所有计算需求规定一种范式,保持简单的事情简单,同时使高级用例成为可能。

当您的需求较小时,您可以将 Metaflow 作为任何 Python 代码运行,例如 notebook 或本地脚本。当您需要更多计算能力时,比如在 GPU 上训练模型或处理大型数据框,您可以通过添加一行代码来完成任务。或者,您可以并行执行甚至数千个此类任务,或在多个 GPU 上训练大型模型,例如 LLM。

当您的需求增长时,您甚至可以 混合和匹配各种计算环境 来创建跨本地、内部数据中心和各种公共云的先进工作流程。

下面,我们提供了Metaflow支持的计算模式的概述,并附有更多细节的指引。重要的是,您可以自由组合这些模式,即使在单个流中。

note

要启用Metaflow的云计算能力 - @batch@kubernetes - 您需要先 部署一个Metaflow堆栈。在部署之前,要测试这些概念,请尝试Metaflow Sandbox

通过本地执行快速开发

当你运行一个没有特殊装饰器的流,例如 通过输入 python linear.py run 运行 LinearFlow, 该流会像任何 Python 脚本或笔记本一样在你的计算机上本地运行。

这使您能够快速开发和测试代码,而无需依赖工作站外的任何基础设施。

将您的代码作为一个流运行可以提供即时的性能优势:如果您的流有 分支循环, Metaflow 利用多个 CPU 核心通过将并行任务作为单独的进程运行来加速计算。除了 Metaflow 并行化任务外,您还可以通过使用优化的 Python 库,例如PyTorch来利用 GPU,或像XGBoost这样的库来利用多个 CPU 核心,从而加速计算。

在多个CPU核心上并行化Python

如果你需要执行中等数量的计算——太多而无法在顺序的 Python 代码中处理,但又不足以使用 foreach 来进行并行任务——Metaflow 提供了一个助手函数,parallel_map,它可以在多个 CPU 核心上并行执行 Python 函数。例如,你可以使用 parallel_map 以 1M 项的批次并行处理一个 10M 项的列表。

请求计算 @resources

如果您的作业需要的资源超出了您的工作站可用的资源,例如更多的内存或更多的GPU,Metaflow可以轻松地在云实例上远程运行任务:只需用@resources装饰器标注该步骤

在这种情况下,Metaflow 使用 支持的计算后端之一,AWS Batch 或 Kubernetes,在云端远程执行任务。

这通常是扩展计算以处理更大数据集或模型的最简单方法。就像用一行代码获得更大的计算机一样。虽然更大的云实例成本更高,但它们只在@step执行的时间内需要,因此这种方法也可以是经济有效的。这种扩展方式称为垂直扩展

请求GPU和其他硬件加速器

ML/AI 工作负载通常需要硬件加速,例如 GPU。了解更多有关 a dedicated page about hardware-accelerated compute 的信息。

通过现货实例节省资金

您可以通过利用临时实例来减少云成本。除了在临时实例被终止时自动重试任务,Metaflow 允许您在终止之前优雅地退出和清理任务

并行执行步骤

如果你想并行执行两个或多个 @step请将它们 branch

当你在本地运行一个带分支的流程时,每个 @step 都在独立的进程中运行,利用你工作站中的多个CPU核心来加速处理。当你 远程执行流程(或其某些步骤) 时,每个 @step 在一个独立的容器中运行,这允许你甚至可以并行运行一千个步骤。

分支在两种情况下非常方便:

  1. 您有可以独立执行的单独操作。

  2. 您想为不同的数据集分配单独的 @resources(或其他装饰器),例如构建一个小型的使用CPU的模型和一个大型的使用GPU的模型。只需创建分支,每个分支都有自己的一组装饰器。

使用 foreach 并行运行多个任务

在机器学习、人工智能和数据处理领域,一个非常常见的场景是对每个数据分片或一组参数执行相同的操作,例如数据转换或模型训练。

Metaflow的 foreach 类似于 Python的内置 map 函数,允许 您将一个函数 - 或者在Metaflow的情况下,一个 @step - 应用到列表中的所有元素。

branch 的区别在于 foreach 对所有元素应用 相同的操作,利用 数据并行性,而 branch 对每个元素应用 不同的操作,利用 任务并行性

Metaflow 的超能力是您可以 并行运行这些任务,在云中同时处理甚至数千个项目。因此,您可以使用 foreaches 来处理大型数据集,训练多个模型,或并行运行超参数搜索,也就是说,执行任何可以从 水平扩展 中受益的 令人尴尬的并行 操作。

用于控制并行性的选项

请注意,无论您的列表大小为多少,您都可以使用the --max-workers flag控制实际并行运行的任务数量。此外,当您的列表很长时,您还需要increase --max-num-splits when you list is long

使用临时计算集群进行分布式计算

Metaflow 支持的最先进的计算模式是分布式计算。在这种情况下,Metaflow 会动态设置一个实例集群,这些实例可以相互通信,例如,在多个 GPU 实例上训练大型语言模型(LLM)。

虽然有许多其他方法可以设置这样的集群,但Metaflow的一个主要好处是您可以将临时集群嵌入到更大的工作流程中,而无需单独维护集群。了解更多信息请访问关于分布式计算的专门页面