这项工作得到了 Anaconda Inc. 的支持。
在 Dask 诞生后的第一年,它完全专注于单节点并行性。当时我们认为,在个人笔记本电脑上高效支持 100GB+ 数据集或在大型工作站上支持 1TB 数据集是提高工作效率的最佳选择,尤其是在避免部署和配置分布式系统的痛苦时。我们仍然相信单节点并行性的效率,但这些年来,Dask 已经扩展到支持更大的分布式系统。
第一年之后,Dask 开始同等重视单节点并行性和分布式并行性。我们维护了 两个完全独立的调度器,每个都针对一种情况进行了优化。这使得 Dask 在单机上非常易于使用,同时在需要时也能用相同的 API 扩展到数千个节点和 100TB+ 数据集。
Dask 的分布式系统有一个中心调度器和许多分布式工作节点。这是当今一种常见的架构,可以扩展到几千个节点。大致来说,Dask 的扩展能力与 Apache Spark 等系统相似,但不如 MPI 等高性能系统。
博客文章或演讲中大多数 Dask 示例都在中等规模的数据集上,通常在 10-50GB 范围内。这一点,再加上 Dask 在单节点中等数据方面的历史,可能让人们对 Dask 的印象比实际情况要谦逊得多。
作为一个小小的提示,这里有一个使用 Dask 与人工创建的太字节数据集上的 50 个 36 核节点进行交互的示例。
对于一个典型的中等规模 Dask 集群来说,这是一个常见的规模。我们通常看到的 Dask 部署规模要么在几十台机器(通常是 Hadoop 风格或临时企业集群),要么在几千台(通常是高性能计算或云部署)。我们在这里展示中等规模的例子仅仅是因为资源有限。该示例中的所有内容都应该可以在再扩展几个数量级时正常工作。
本文其余部分将讨论我们今天看到的阻碍横向扩展的常见原因。这些原因收集自与开源社区成员以及私有合同合作的经验。
如果您正在进行简单的 Map-Reduce 风格并行计算,那么扩展到大量节点会非常顺畅。但是,仍有一些需要注意的限制:
如果您正在使用更复杂的算法(这在 Dask 用户中很常见),那么沿途可能会出现更多问题。高性能计算不是把某件事做得很好,而是把*所有事情都做得不差*。本节列出了在大规模部署中出现的一些问题:
Dask 可以轻松地扩展到几十个节点,就像上面的例子一样,或者数千个节点,我在这里没有展示仅仅是因为资源有限。
Dask 在提供可扩展性的同时,仍然保持了自项目开始以来就定义的灵活性和自由度,以构建自定义系统。然而,可扩展性和自由度的结合使得 Dask 很难完全保护用户不破坏东西。当你能限制用户能做什么时,保护用户会容易得多。当用户遵循 Dask dataframe 或 Dask array 等标准工作流程时,他们可能会没问题,但在千节点规模下以全部创造力进行操作时,必然需要一些专业知识。我们努力提供诊断工具和必要工具来调查问题和控制操作。该项目在这方面每天都在进步,这很大程度上归功于一些外部的专家用户。
您是否在多台机器上使用 Dask 进行有趣的工作?我们很乐意在下面的评论区或通过此在线表格了解情况。