提交新事件

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

提交新闻报道

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

订阅时事通讯

谢谢!您的提交已收到!
糟糕!提交表单时出了问题。
2018年7月8日

Dask 开发日志

作者

这项工作由 Anaconda Inc 支持

为了提高透明度,我正努力更频繁地撰写博客,介绍 Dask 及相关项目的当前工作进展。这里没有任何内容已准备好投入生产。这篇博客文章写得仓促,因此不应期待精雕细琢。

Dask 及相关项目在2018年6月的当前工作包括以下内容

  1. Yarn 部署
  2. 更多机器学习示例
  3. 增量机器学习
  4. HPC 部署配置

Yarn 部署

Dask 开发者经常被问到如何将 Dask 部署到我的 Hadoop/Spark/Hive 集群上?。直到最近,我们才有了比较好的答案。

大多数 Hadoop/Spark/Hive 集群实际上是 Yarn 集群。Yarn 是许多集群最常用的集群管理器,这些集群通常用于运行 Hadoop/Spark/Hive 作业,包括从 Cloudera 或 Hortonworks 等供应商购买的任何集群。如果您的应用程序可以在 Yarn 上运行,那么它在这里就可以成为一等公民。

不幸的是,Yarn 之前只能通过 Java API 访问,这使得 Dask 很难与之交互。现在这种情况正在改变,有几个项目正在进行,包括

  • dask-yarn:一种在 Yarn 集群上启动 Dask 的简便方法
  • skein:一种在 Yarn 集群上启动通用服务的简便方法(这主要是 dask-yarn 的底层支持)
  • conda-pack:一种将 conda 包捆绑到一个可重新部署的环境中的简便方法,这在 Yarn 上启动 Python 应用程序时非常有用

这项工作全部由 Jim Crist 完成,我相信他目前正在撰写一篇关于这个话题的博客文章。尽管 dask-yarn 上周已软发布,大家应该尝试一下并在 dask-yarn 问题跟踪器 上报告反馈。如果您想在集群上获得直接帮助,现在是时候了,因为 Jim 正积极开展这项工作,并且尚未被用户请求淹没,所以通常有很多时间来调查特定案例。

from dask_yarn import YarnCluster
from dask.distributed import Client

# 创建一个集群,每个 worker 有两个核心和八 GB 内存
cluster = YarnCluster(environment='environment.tar.gz',
worker_vcores=2,
worker_memory="8GB")
# 扩展到十个这样的 worker
cluster.scale(10)

# 连接到集群
client = Client(cluster)

更多机器学习示例

Dask 维护了一个包含简单示例的 Binder,展示了使用该项目的各种方法。这使得人们可以在网页上点击链接,快速进入在云端运行的 Jupyter Notebook。这是一个快速体验和学习新项目的有趣方式。

以前,我们为数组、数据帧、延迟计算、机器学习等提供了单一示例。

现在 Scott Sievert 正在扩展机器学习部分的示例。到目前为止,他已经提交了以下两个示例

  1. 使用 Scikit-Learn 和大型数据集进行增量训练
  2. Dask 和 XGBoost

我相信他正在计划更多示例。如果您使用dask-ml 并有建议或想提供帮助,您可以参与 dask-ml 问题跟踪器dask-examples 问题跟踪器

增量训练

上面提到的增量训练作为示例也是比较新的。这是一种 Scikit-Learn 风格的元估计器(meta-estimator),它包装了支持 `partial_fit` 方法的其他估计器。它使得能够以增量或批处理方式在大型数据集上进行训练。

之前

from sklearn.linear_model import SGDClassifier

sgd = SGDClassifier(...)

import pandas as pd

for filename in filenames
df = pd.read_csv(filename)
X, y = ...

sgd.partial_fit(X, y)

之后

from sklearn.linear_model import SGDClassifier
from dask_ml.wrappers import Incremental

sgd = SGDClassifier(...)
inc = Incremental(sgd)

import dask.dataframe as dd

df = dd.read_csv(filenames)
X, y = ...
inc.fit(X, y)

分析

从并行计算的角度来看,这是一种非常简单且不酷的方式。但我的理解是它也非常实用。在分布式环境中,我们舍弃了许多可能的计算(解决方案本质上是顺序的),但看着模型在吸收各种数据块后在集群中跳转是很有趣的。

Incremental training with Dask-ML

目前正在进行工作,研究如何最好地将此与管道(pipelines)和超参数搜索(hyper-parameter searches)等其他工作结合起来,以填补额外的计算空白。

这项工作主要由 Tom Augspurger 完成,Scott Sievert 提供了帮助。

Dask 用户故事

Dask 开发者经常被问到“谁在使用 Dask?”。这是一个很难回答的问题,因为尽管我们收到了来自各种公司和研究小组的数千个帮助请求,但我们始终不确定谁介意将他们的信息与他人分享。

现在,我们正尝试通过让用户讲述自己的故事,以更明确的方式众包收集这些信息。希望这能帮助他们领域内的其他用户理解 Dask 如何提供帮助以及何时可能(或可能不)对他们有用。

我们最初在 Google 表单 中收集了这些信息,但后来将其转移到了 Github 仓库 中。最终,我们会将其发布为一个 正式网站 并包含在我们的文档中。

如果您使用 Dask 并想分享您的故事,这是为项目做出贡献的绝佳方式。可以说,与技术解决方案相比,Dask 更需要帮助来传播信息。

HPC 部署

用于在传统 HPC 机器上部署 Dask 的 Dask Jobqueue 包即将发布新版本。我们更改了许多参数和配置选项,以改善新用户的入门体验。在最近与新团体的合作中进展非常顺利,但对于现有该子项目的用户来说,这意味着一个破坏性变更(breaking change)。