本工作由 Anaconda Inc. 支持

我很高兴地宣布 Dask 0.19.0 版本发布。这是一个重要的版本,包含错误修复和新功能。上一个版本 0.18.2 于 7 月 23 日发布。这篇博文概述了自 6 月 14 日发布的 0.18.0 版本博文以来的一些值得注意的变化。

你可以使用 conda 安装 Dask

conda install dask

或者从 PyPI 使用 pip 安装

pip install dask[complete] --upgrade

完整的变更日志在此处提供

值得注意的变化

过去两个月里进行了大量工作,但大多数变化都较小且分散。稳定性、与上游库(如 Numpy 和 Pandas)的功能对等性以及性能都得到了显著提升,但这很难浓缩成博文形式。

尽管如此,以下是新版本中一些更令人兴奋的变化。

Python 版本

我们已经取消了对 Python 3.4 的官方支持,并增加了对 Python 3.7 的官方支持。

在 Hadoop 集群上部署

在过去的几个月里,Jim Crist 构建了一套工具,用于在 YARN(Hadoop 集群中使用的主要集群管理器)上部署应用程序。

  • Conda-pack:打包 Conda 环境以便分发到分布式集群,尤其是在可能没有 Python 或 Conda 的情况下。
  • Skein:轻松地从非 JVM 系统启动和管理 YARN 应用程序。
  • Dask-Yarn:一个基于 Skein 的轻量库,用于启动和管理 Dask 集群。

Jim 在最近的两篇博文中介绍了 Skein 和 Dask-Yarn

实现 Actors

一些高级工作负载希望直接管理和修改 worker 上的状态。像 Dask 这样的基于任务的框架可以使用长时间运行的任务来强制实现这种工作负载,但这是一种不舒服的体验。

为了解决这个问题,我们在标准的任务调度系统之外,为 Dask 添加了一个实验性的 Actor 框架。这提供了更低的延迟,消除了调度开销,并提供了直接修改 worker 状态的能力,但失去了一些便利性,如弹性和诊断。采用 Actor 的想法是毫不犹豫地借鉴了 Ray Project :)

class Counter:
    def __init__(self):
        self.n = 0

    def increment(self):
        self.n += 1
        return self.n

counter = client.submit(Counter, actor=True).result()

>>> future = counter.increment()
>>> future.result()
1

你可以在 Actors 文档中了解更多关于 actors 的信息。

控制面板改进

Dask 控制面板是理解分布式性能的关键工具。在本次发布中,我们解决了一些新手用户会遇到的可访问性问题。

保存任务流图

现在,你可以通过将计算封装在 get_task_stream 上下文管理器中来保存任务流记录。

from dask.distributed import Client, get_task_stream
client = Client(processes=False)

import dask
df = dask.datasets.timeseries()

with get_task_stream(plot='save', filename='my-task-stream.html') as ts:
    df.x.std().compute()
>>> ts.data
[{'key': "('make-timeseries-edc372a35b317f328bf2bb5e636ae038', 0)",
  'nbytes': 8175440,
  'startstops': [('compute', 1535661384.2876947, 1535661384.3366017)],
  'status': 'OK',
  'thread': 139754603898624,
  'worker': 'inproc://192.168.50.100/15417/2'},

  ...

这提供了在此期间在每个 worker 上完成的每个任务的开始和结束时间。它还将这些数据保存为 HTML 文件,你可以与他人分享。这对于团队内部沟通性能问题非常有价值。我通常将 HTML 文件作为 gist 上传,然后使用 rawgit.com 分享。

$ gist my-task-stream.html
https://gist.github.com/f48a121bf03c869ec586a036296ece1a

适应不同的屏幕尺寸

控制面板的布局设计用于在单个屏幕上使用,与 Jupyter notebook 并排放置。许多 Dask 开发者在使用笔记本电脑时就是这样操作的,但由于以下两个原因之一,许多用户并非如此操作:

  1. 他们在办公室环境中工作,拥有多个屏幕
  2. 他们是 Dask 的新手,不习惯将屏幕分成两半

在这些情况下,控制面板的样式会变得很奇怪。幸运的是,Luke CanavanDerek Ludwig 最近大幅改进了控制面板的 CSS,使其能够在窄屏和宽屏之间切换。以下是快照。

Jupyter Lab 扩展

现在,你可以使用最新更新的 dask-labextension,将控制面板窗格直接嵌入到 Jupyter Lab 中。

jupyter labextension install dask-labextension

这允许你直接在 JupyterLab 中布置自己的控制面板。你可以组合不同页面上的图表,控制它们的大小等等。你需要提供控制面板服务器的地址(在本地机器上默认为 http://localhost:8787),但之后所有设置应该在会话之间持久化。现在,当我打开 JupyterLab 并启动 Dask Client 时,我看到的是这样:

感谢 Ian Rose 在这方面所做的大部分工作。

外展/推广

Dask 故事

使用 Dask 的人们一直在 Dask Stories 上分享他们的使用经验。在过去几个月里,以下人员撰写并分享了他们的经验:

  1. Sidewalk Labs 的城市建模 作者:Brett Naul
  2. 蚊子基因组测序 作者:Alistair Miles
  3. Full Spectrum 的借贷和银行服务 作者:Hussain Sultan
  4. 在 IceCube 检测宇宙射线 作者:James Bourbeau
  5. Pangeo 的大地科学大数据处理 作者:Ryan Abernathey
  6. 美国国家大气研究中心的水文建模 作者:Joe Hamman
  7. 移动网络建模 作者:Sameer Lalwani
  8. 空间科学与工程中心的卫星图像处理 作者:David Hoese

这些故事帮助人们了解 Dask 在哪些场景下适用、哪些场景下不适用,并提供了关于它如何在实践中使用的有用背景信息。我们欢迎对本项目做出进一步贡献。这对于更广泛的社区非常有价值。

Dask 示例

The Dask-Examples 仓库维护着易于运行的示例,可以在小型机器上使用 Dask,适用于入门级笔记本电脑或小型云实例。这些示例托管在 mybinder.org 上,并已集成到我们的文档中。最近出现了许多新的示例,特别是在机器学习领域。我们鼓励大家点击下面的链接尝试它们。

Binder

其他项目

  • dask-image 项目最近发布了。它包含许多围绕 dask array 的图像处理例程。

    该项目主要由 John Kirkham 维护。

  • Dask-ML 最近发布了一个错误修复版本

  • 用于自动化机器学习的 TPOT 库最近发布了一个新版本,增加了 Dask 支持以并行化模型训练。更多信息可在 TPOT 文档中找到。

致谢

自 6 月 14 日以来,以下人员对以下仓库做出了贡献

用于并行算法的核心 Dask 仓库

  • Anderson Banihirwe
  • Andre Thrill
  • Aurélien Ponte
  • Christoph Moehl
  • Cloves Almeida
  • Daniel Rothenberg
  • Danilo Horta
  • Davis Bennett
  • Elliott Sales de Andrade
  • Eric Bonfadini
  • GPistre
  • George Sakkis
  • Guido Imperiale
  • Hans Moritz Günther
  • Henrique Ribeiro
  • Hugo
  • Irina Truong
  • Itamar Turner-Trauring
  • Jacob Tomlinson
  • James Bourbeau
  • Jan Margeta
  • Javad
  • Jeremy Chen
  • Jim Crist
  • Joe Hamman
  • John Kirkham
  • John Mrziglod
  • Julia Signell
  • Marco Rossi
  • Mark Harfouche
  • Martin Durant
  • Matt Lee
  • Matthew Rocklin
  • Mike Neish
  • Robert Sare
  • Scott Sievert
  • Stephan Hoyer
  • Tobias de Jong
  • Tom Augspurger
  • WZY
  • Yu Feng
  • Yuval Langer
  • minebogy
  • nmiles2718
  • rtobar

用于分布式计算的 dask/distributed 仓库

  • Anderson Banihirwe
  • Aurélien Ponte
  • Bartosz Marcinkowski
  • Dave Hirschfeld
  • Derek Ludwig
  • Dror Birkman
  • Guillaume EB
  • Jacob Tomlinson
  • Joe Hamman
  • John Kirkham
  • Loïc Estève
  • Luke Canavan
  • Marius van Niekerk
  • Martin Durant
  • Matt Nicolls
  • Matthew Rocklin
  • Mike DePalatis
  • Olivier Grisel
  • Phil Tooley
  • Ray Bell
  • Tom Augspurger
  • Yu Feng

包含易于运行示例的 dask/dask-examples 仓库

  • Albert DeFusco
  • Dan Vatterott
  • Guillaume EB
  • Matthew Rocklin
  • Scott Sievert
  • Tom Augspurger
  • mholtzscher

博客评论由 Disqus 提供支持