跳过主要内容

可扩展计算和数据

在你本地原型化一个流程并与之迭代了一段时间后,你可能会面临这样的问提:如何在不耗尽内存的情况下用更多数据测试流程?或者,如何让模型训练得更快?你可以尝试优化代码以在你的笔记本上运行得更好,但这样的过早优化可能不是你时间的最佳利用。

相反,您可以利用云来获得更大的笔记本电脑或更多笔记本电脑(虚拟的,而非字面上的)。这就是Metaflow开发中的第二阶段:使用云扩展流程。Metaflow使这变得简单——无需更改代码——在您完成初步工作以配置Metaflow的基础设施之后。

超大规模流程

以下是Metaflow如何在技术和组织上帮助您的项目更具可扩展性:

  1. 您可以通过简单地添加一行代码使现有流程可扩展, @resources。这样您就可以在流程中请求更多的CPU、内存或GPU。或者,您 可以在多个实例上进行并行处理,甚至是数千个实例。

  2. 一旦你的项目开始展示出使用实际规模工作负载的潜力,它可能会开始吸引同事的关注。Metaflow 包含许多功能,例如 namespaces,通过允许许多人在不意外干扰彼此工作的情况下进行贡献,从而使协作更加顺畅。

可扩展的高性能代码的简单模式

没有单一的魔法公式来实现可扩展性。Metaflow 提供了一套实用的、常用的模式,帮助你根据具体需求让代码更加可扩展和高效。

这些模式分为三类:

  • 性能优化: 你可以通过利用现成的高性能库,如 XGboostPyTorch,来提高代码的性能。或者,如果你需要更自定义的解决方案,你可以利用Python的数据工具广阔的生态,包括像 Numba 这样的编译器来加速你的代码。

  • 扩展能力: 不应低估现代大型服务器的计算能力,尤其是那些配备了GPU的服务器。在考虑其他因素之前,你可以简单地在更强大的云实例上运行一个步骤。Metaflow与Kubernetes(适用于所有主要云平台)和AWS Batch集成,这两者都可以根据需求提供此类机器。

  • 扩展: 除了在单个实例上执行代码,Metaflow 还使得在任意数量的实例上并行化步骤变得简单,利用 Kubernetes 和 AWS Batch,让您可以访问几乎无限的计算能力。除了许多独立的任务,您还可以动态创建大型计算集群,例如用于训练大型(语言)模型。

通常,提升可扩展性的有效方案是这三种技术的结合: 从高性能的Python库开始,在大型实例上运行它们,如有必要,尽可能广泛地进行并行处理。此外,除了计算方面的考虑,高效加载数据是Metaflow可以提供帮助的地方。

无论您使用Metaflow还是其他任何系统,大规模执行都会带来一些额外的问题:规模越大,您遭遇虚假失败的可能性越高。此外,您需要确保您的执行环境,包括您依赖的任何库,在代码执行的每个地方都是始终可用的。由于这些问题在所有大规模项目中都是常见的麻烦,Metaflow也帮助管理这些问题。

你将学习什么

在本节中,您将学习如何使您的流能够处理更多数据并加快执行速度。您还将学习如何通过更好地组织结果来扩展多个团队的项目。我们将涵盖六个主题:

  1. 在云中扩展计算
  2. 管理执行环境
  3. 处理失败
  4. 检查点进度
  5. 高效加载和存储数据
  6. 组织结果以便更顺畅的协作

在继续之前,请确保为Metaflow配置基础设施或注册一个Metaflow沙盒