这项工作由 Anaconda Inc. 和来自 Moore Foundation 的数据驱动发现计划提供支持。

我很高兴宣布发布 Dask 0.15.3 版本。此版本包含稳定性增强和错误修复。本博客文章概述了自 8 月 30 日 0.15.2 版本发布以来的一些重要变更。

您可以使用 conda 安装 Dask

conda install -c conda-forge dask

或者从 PyPI 使用 pip 安装

pip install dask[complete] --upgrade

Conda 包在 conda-forge 通道中均可用。几天后将在 defaults 通道中可用。

完整的变更日志可在此处查看

以下是一些重要变更。

掩码数组

Dask.array 现在支持 类似于 NumPy 的掩码数组

In [1]: import dask.array as da

In [2]: x = da.arange(10, chunks=(5,))

In [3]: mask = x % 2 == 0

In [4]: m = da.ma.masked_array(x, mask)

In [5]: m
Out[5]: dask.array<masked_array, shape=(10,), dtype=int64, chunksize=(5,)>

In [6]: m.compute()
Out[6]:
masked_array(data = [-- 1 -- 3 -- 5 -- 7 -- 9],
             mask = [ True False  True False  True False  True False  True False],
       fill_value = 999999)

这项工作主要由 Jim Crist 完成,并得到英国气象局的部分资助,以支持 Iris 项目

atop 中的常量

Dask.array 专家会对 atop 函数很熟悉,该函数为相当一部分 dask.array 功能提供支持,并常用于构建自定义算法。当给定索引为 None 时,此函数现在支持常量。

atop(func, 'ijk', x, 'ik', y, 'kj', CONSTANT, None)

Worker 的内存管理

Dask worker 在达到分配内存限制的 60% 时会将多余数据溢写到磁盘。之前,我们只通过累加 worker 生成的每块数据的内存使用量来衡量内存使用。这在某些情况下可能会失效:

  1. 我们对每块数据的估计有误
  2. 用户代码消耗了大量内存而我们未能跟踪到

为了弥补这一点,我们现在还使用带有 psutil 模块的系统工具定期检查 worker 的内存使用情况。如果进程使用率上升到 70% 左右,我们会将数据转储到磁盘;如果上升到 80% 以上,则停止运行新任务;如果上升到 95% 以上,则重启 worker(假设 worker 有一个 nanny 进程)。

破坏性变更:之前,dask-worker 进程的 --memory-limit 关键字指定了 60% 的“开始推送到磁盘”限制。因此,如果您有 100GB 内存,之前您可能这样启动 dask-worker:

dask-worker ... --memory-limit 60e9  # before specify 60% target

一旦 worker 内存中达到 60GB 数据,它就会开始推送到磁盘。然而,现在我们将此含义更改为分配给进程的全部内存量。

dask-worker ... --memory-limit 100e9A  # now specify 100% target

当然,您不必指定此限制(许多人不会)。它会为您自动选择。如果您之前从未关心过这个,那么现在也不必开始关心。

关于内存管理的更多信息请参见此处:https://distributed.dask.org.cn/en/latest/worker.html?highlight=memory-limit#memory-management

统计分析 (Statistical Profiling)

Worker 现在每 10ms 轮询其 worker 线程,并记录正在使用的函数。此信息可在诊断仪表板的新“Profile”页面上查看。它提供了与典型任务流图正交且通常更详细的信息。

这些图表可在每个 worker 上查看,聚合视图可在 scheduler 上查看。底部的时序图允许您选择计算的时间窗口以限制并行分析。

关于诊断性能的更多信息请参见此处:https://distributed.dask.org.cn/en/latest/diagnosing-performance.html

致谢

自 8 月 30 日 0.15.2 版本发布以来,以下人员对 dask/dask 仓库做出了贡献:

  • Adonis
  • Christopher Prohm
  • Danilo Horta
  • jakirkham
  • Jim Crist
  • Jon Mease
  • jschendel
  • Keisuke Fujii
  • Martin Durant
  • Matthew Rocklin
  • Tom Augspurger
  • Will Warner

自 9 月 2 日 1.18.3 版本发布以来,以下人员对 dask/distributed 仓库做出了贡献:

  • Casey Law
  • Edrian Irizarry
  • Matthew Rocklin
  • rbubley
  • Tom Augspurger
  • ywangd

博客评论由 Disqus 提供支持