提交新活动

谢谢!您的提交已收到!
糟糕!提交表单时出错。

提交新闻报道

谢谢!您的提交已收到!
糟糕!提交表单时出错。

注册获取新闻简报

谢谢!您的提交已收到!
糟糕!提交表单时出错。
2021年5月21日

Dask库的稳定性

作者:

Dask 最近发展得很快。有时这也会导致一些问题。

从历史上看,这并不是问题,根据我们去年的调查,大多数用户对Dask的稳定性相当满意。

然而,去年该项目经历了很大的演变,这反过来导致了代码的频繁变动。这可能会给下游用户带来一些困扰,但也意味着未来会有更多非渐进式的变化。我们稍微优先考虑了长期增长而非短期稳定性。

变革的动机

驱动这些变化主要有两个结构性原因

     
  1. 计算规模的增加
  2.  
  3. 组织规模的增加

计算规模

如今的Dask被应用于更广泛的问题领域、更多样化的硬件环境,并且比以往更常用于更大规模的计算。

应对多维度规模的增长,我们从几个方面重新设计了Dask的内部基础设施。

     
  1. 我们改变了Dask图的表示方式以及与调度器通信的方式
  2.  
  3. 我们将Dask的内部状态机抽象出来并使其更加规范化
  4.  
  5. 我们用Cython重写了调度器的大部分代码
  6.  
  7. 我们彻底改进了所有Dask服务器之间消息的序列化方式
  8.  
  9. 现在我们比以前更细粒度地跟踪内存使用情况
  10.  
  11. ……等等

我们一直在进行所有这些内部更改,并尽量减少对众多下游用户社区(Xarray、Prefect、RAPIDS、XGBoost等)的影响。这很大程度上归功于这些下游开发者社区,他们帮助我们识别、隔离并解决我们在进行这些底层变化时表面出现的微小波动。

组织规模

从历史上看,Dask的核心由相对少数人维护,主要来自Anaconda。有几十个开发者在各种 dask-foo 项目上工作,但只有一小部分人会考虑序列化、状态机等方面的问题。特别是,我个人跟踪了每一个问题,并且了解整个项目。每当潜在冲突出现时,我通常都能及早发现。

所有这些都发生了巨大变化。

首先,现在有几个由多家公司组成的团队在研究Dask内部的不同部分。

其次,我们还花了一些时间重新设计了Dask内部的部分,使其更易于维护。Dask的调度就像一个制作精良的钟表。从历史上看,钟表的某些部分是由个人以工匠般的方式建造和设计的。现在我们以团队思维重新设计事物。这带来了更易于维护的设计,但也意味着我们正在拆开钟表并重新组装。找到所有缺失的零件需要一些时间 :)

这对您今天的影响

这都始于去年底我们切换到日历版本控制(去年12月,Dask版本2.30.1变更为2020.12.0)。您可能已经注意到

     
  1. 对版本不匹配更加敏感(当我们更改Dask协议时,不同版本的Dask无法很好地相互通信)
  2.  
  3. 发布版本存在稳定性问题(2020.12尤其糟糕)
  4.  
  5. 在发布时,dask和distributed版本之间的 依赖关系更加紧密

这将如何影响您

我们合并了一个拉取请求 (PR),用于更改将高级图移动到Dask Dataframes调度器时的默认行为。这应该会大大减少提交大型计算时的延迟,并且优化几乎没有延迟。它还为我们提供了一条通道,可以将关于您的计算的大量更多语义信息发送给调度器,这可能会在未来带来新的可视化和更智能的调度。

这可能也会破坏一些东西。

需要说明的是,Dask、distributed、xarray、prefect、rapids和其他下游项目的所有测试都通过了。我们在这方面做了功课,但几乎可以肯定我们遗漏了什么。

这只是未来几个月将发生的几个较大变化之一。在我们进行这些较大的转变时,感谢您的耐心和参与。无论好坏,最终用户是最后的测试套件 :)