Dask 最近发展得很快。有时这也会导致一些问题。
从历史上看,这并不是问题,根据我们去年的调查,大多数用户对Dask的稳定性相当满意。
然而,去年该项目经历了很大的演变,这反过来导致了代码的频繁变动。这可能会给下游用户带来一些困扰,但也意味着未来会有更多非渐进式的变化。我们稍微优先考虑了长期增长而非短期稳定性。
驱动这些变化主要有两个结构性原因
如今的Dask被应用于更广泛的问题领域、更多样化的硬件环境,并且比以往更常用于更大规模的计算。
应对多维度规模的增长,我们从几个方面重新设计了Dask的内部基础设施。
我们一直在进行所有这些内部更改,并尽量减少对众多下游用户社区(Xarray、Prefect、RAPIDS、XGBoost等)的影响。这很大程度上归功于这些下游开发者社区,他们帮助我们识别、隔离并解决我们在进行这些底层变化时表面出现的微小波动。
从历史上看,Dask的核心由相对少数人维护,主要来自Anaconda。有几十个开发者在各种 dask-foo 项目上工作,但只有一小部分人会考虑序列化、状态机等方面的问题。特别是,我个人跟踪了每一个问题,并且了解整个项目。每当潜在冲突出现时,我通常都能及早发现。
所有这些都发生了巨大变化。
首先,现在有几个由多家公司组成的团队在研究Dask内部的不同部分。
其次,我们还花了一些时间重新设计了Dask内部的部分,使其更易于维护。Dask的调度就像一个制作精良的钟表。从历史上看,钟表的某些部分是由个人以工匠般的方式建造和设计的。现在我们以团队思维重新设计事物。这带来了更易于维护的设计,但也意味着我们正在拆开钟表并重新组装。找到所有缺失的零件需要一些时间 :)
这都始于去年底我们切换到日历版本控制(去年12月,Dask版本2.30.1变更为2020.12.0)。您可能已经注意到
我们合并了一个拉取请求 (PR),用于更改将高级图移动到Dask Dataframes调度器时的默认行为。这应该会大大减少提交大型计算时的延迟,并且优化几乎没有延迟。它还为我们提供了一条通道,可以将关于您的计算的大量更多语义信息发送给调度器,这可能会在未来带来新的可视化和更智能的调度。
这可能也会破坏一些东西。
需要说明的是,Dask、distributed、xarray、prefect、rapids和其他下游项目的所有测试都通过了。我们在这方面做了功课,但几乎可以肯定我们遗漏了什么。
这只是未来几个月将发生的几个较大变化之一。在我们进行这些较大的转变时,感谢您的耐心和参与。无论好坏,最终用户是最后的测试套件 :)