Dask 开发日志
这项工作得到了 Continuum Analytics、XDATA 项目 以及 Moore Foundation 的数据驱动发现倡议的支持。
为了增加透明度,我每周都会撰写博客,介绍前一周在 Dask 及相关项目上所做的工作。本日志涵盖 2017-01-01 至 2016-01-17 期间完成的工作。这里提到的任何内容都尚未准备好用于生产环境。这篇博文是匆忙写成的,因此请勿期待精致的润色。
过去几周的主题
- 分布式调度器的稳定性增强和微发布
- 撰写 NASA 拨款申请
- Dask-EC2 脚本
- Dataframe Categorical 灵活性(进行中)
- 通信重构(进行中)
稳定性增强和微发布
我们发布了 dask.distributed 版本 1.15.1,其中包含近期 1.15.0 发布后的重要错误修复。存在许多小问题协同作用,导致任务被错误地移除。这通常是可以接受的,因为 Dask 调度器能够修复缺失的部分(利用使 Dask 具备弹性的相同机制),所以直到系统在一些更重要的实际 Dask 部署中部署后,我们才注意到这个缺陷。如果您有兴趣,可以查看 PR dask/distributed #804,其中包含了完整的详细说明。说明以如下一行结束:
这是一个很好的练习,说明了如何将大多数正常工作的组件耦合起来,却很容易产生一个有缺陷的系统。
这还增加了其他修复,例如与新 Bokeh 0.12.4 版本的兼容性问题等。
撰写 NASA 拨款申请
我一直在撰写提交给 NASA 的提案,希望能获得资金支持,以便在大气和海洋科学领域进行 100TB 规模的分布式 Dask+XArray 工作。非常感谢那些在此提供支持的科学合作者。
Dask-EC2 启动
Dask-EC2 项目 通过一个小的命令行界面,在亚马逊弹性计算云 (EC2) 上部署 Anaconda、一个 Dask 集群和 Jupyter notebooks。
pip install dask-ec2 --upgrade
dask-ec2 up --keyname KEYNAME \
--keypair /path/to/ssh-key \
--type m4.2xlarge
--count 8
对于刚入门的人和我们 Dask 开发者运行基准测试时,这个项目可能**非常有用**;但如果 AWS 或 Dask 接口发生变化而我们没有维护这个项目,它也可能**非常糟糕**。多亏了 Ben Zaitlen 的巨大努力,`dask-ec2 再次回到了**非常有用**的状态,我希望它能保持一段时间。
如果您一直想在真实集群上尝试 Dask,并且已经拥有 AWS 凭据,那么这可能是最简单的方法。
这似乎已经开始显现回报。本周有几位新开发者提交了几个无关的拉取请求。
Dataframe Categorical 灵活性
分类变量可以在处理文本数据时显著提升性能。目前,Dask 的数据帧支持分类变量,但它们要求预先知道所有类别。如果类别集合很小,这很容易做到,比如医学研究中可能出现的 ["Healthy", "Sick"]
这样的类别,但这需要完整读取数据集,如果类别不是提前知道的,比如所有患者的名字。
Jim Crist 正在修改这项功能,使得 Dask 可以在 dask/dask #1877 中处理包含未知类别的 categorical 列。组成 Dask 的各个 pandas dataframes 可能包含不同的类别,这些类别在必要时进行合并。这个区别可能看起来很小,但在许多实际用例中,它出人意料地限制了性能。
通信重构
自从最近的 worker 重构和优化以来,很明显在某些密集型应用中,worker 间的通信已成为主要的瓶颈。Antoine Pitrou 目前正在 重构 Dask 的网络通信层,以便将来容纳更多的通信选项。这是一个雄心勃勃的项目。对我来说,非常高兴能有像 Antoine 这样的人来研究这个问题。
博客评论由 Disqus 提供支持