我们为什么需要Dask?

该文件为人们选择DASK提供了高层次的动机。

python在数据科学中的作用

python已经成为数据分析和通用编程领域的主导语言:

首先由于numpypandasscikit learn等计算库和大量可视化、交互式notebook、协作库等推动了python发展。

然而,这些包并不是为了多台机器设计的。DASK的开发是为了扩展这些包和周围的生态系统。它与现有的python生态系统协作,将其扩展到多核机器和分布式集群。

熟悉的API

分析人员经常在个人计算机上使用pandasScikit LearnNumpyPython生态系统的其他工具来分析他们的数据。他们喜欢这些工具,因为它们是高效、直观和广泛受信任的。然而,当他们选择将他们的分析应用于更大的数据集时,他们发现这些工具并没有设计在多台机器上运行。因此,分析者不得不使用一个更具可扩展性的工具来重写他们的计算,通常使用另一种语言。这个重写过程会减慢开发速度并使之受到挫折

dask提供了pandasscikit-learnnumpy使用最少的修改,就能完成工作的方法。它与这些工具很好地集成,因此它可以复制它们的大部分API,并在内部使用它们的数据结构。此外,DASK与这些库共同开发,以确保它们一致发展,最大限度地减少从本地笔记本电脑上的工作负载过渡到多核工作站和分布式集群所造成的摩擦。熟悉pandas/scikit-learn/numpy的分析师将立即熟悉它们的dask等价物,并将大部分代码转化为可扩展的应用上。

扩展到群集

由于数据集和计算的扩展速度快于CPURAM,因此我们需要找到跨多台计算机扩展计算的方法。这带来了许多新的问题:

  • 如何让计算机通过网络相互通信?
  • 如何以及何时在机器之间移动数据?
  • 如何从机器故障中恢复?
  • 如何在内部集群上部署?
  • 如何在云端部署?
  • 如何在HPC超级计算机上部署?
  • 如何向用户认为直观的系统提供API

虽然可以在内部构建这些系统(实际上存在许多系统),但许多组织越来越依赖于开源社区内开发的解决方案。这些设备往往更坚固、更安全、功能齐全,而无需内部员工的维护。

DASK解决了这些问题。它通常在数千个机器集群上运行,以高效地处理数百兆字节的数据。它有关于如何在内部、云端或HPC超级计算机上部署的实用程序和文档。它支持使用TLS/SSL证书进行加密和身份验证。它具有弹性,可以很好地处理工作节点的故障,具有弹性,因此可以利用动态添加的新节点。dask包括几个用户API,全球数千名在不同领域工作的研究人员都在使用和简化这些API

小到一台计算机

大规模集群并不总是正确的选择

今天的笔记本电脑和工作站功能惊人,如果使用得当,通常可以处理数据集和计算,我们以前依赖于集群。现代笔记本电脑有一个多核CPU32GBRAM和基于闪存的硬盘驱动器,这些硬盘驱动器的数据传输速度甚至比一两年前的HDDSSD快几倍。

因此,分析师通常可以在笔记本电脑上操作100GB以上的数据集,或者在工作站上操作1TB以上的数据集,而根本不用担心集群。他们有时喜欢这样做,原因如下:

  1. 他们可以使用自己的本地软件环境,而不是受集群上可用资源的约束。
  2. 他们可以更容易地在运输途中、咖啡店或在远离VPN的家中工作。
  3. 调试错误和分析性能通常在一台机器上更容易,而不必通过日志进行分析。
  4. 一般来说,它们的迭代周期更快。
  5. 由于所有数据都是本地的,不需要通过网络或在不同的进程之间流动,因此它们的计算效率可能更高。

DASK可以通过利用多核CPU和从磁盘高效地传输数据,在单台机器上实现高效的并行计算。它可以在分布式集群上运行,但不必。DASK允许您将集群换成单机器调度程序,这种调度程序非常轻,不需要设置,并且可以完全在与用户会话相同的进程中运行。

为了避免过多的内存使用,dask擅长在可能的情况下通过从磁盘中提取数据块、进行必要的处理以及尽可能快地丢弃中间值来寻找在低内存占用下评估计算的方法。这使得分析师可以在中等大的数据集(100GB以上)上执行计算,即使是在相对低功耗的笔记本电脑上。这不需要配置,也不需要设置,这意味着将DASK添加到单个机器计算中只会增加很少的内存开销

python生态系统集成

python包括计算库,如numpypandasscikit-learn,以及在数据访问、绘图、统计、图像和信号处理等方面的数千个其他库。这些库无缝地协作,生成一个具有凝聚力的软件包生态系统,这些软件包共同进化,以满足许多领域的分析师的需求。

这个生态系统是由每个人都遵循的共同标准和协议连接在一起的,这使得这些包以令人惊讶和愉快的方式相互受益。

dask是从这个生态系统进化而来的。它遵守这些标准和议定书,积极参与社区推动新的标准和议定书。这使得生态系统的其余部分能够以最小的协调性从并行和分布式计算中受益。DASK并不试图破坏或取代现有的生态系统,而是从内部补充和受益。

因此,dask的开发由pandasnumpyscikit-learnscikit-imagejupyter等开发社区推动。更广泛的社区增长带来的这种参与有助于用户信任项目,并有助于确保Python生态系统将继续以平稳和可持续的方式发展。

支持复杂的应用程序

有些并行计算很简单,只需将相同的例程应用于许多输入,而不需要任何协调。它们很容易与任何系统并行。

使用HadoopSparkmapreduce模式作为计算还是有点更复杂。Dask通常足以完成大多数数据清理任务、数据库风格的查询以及一些轻量级的机器学习算法。

然而,现有的复杂并行计算并不符合这些范式,因此很难用传统的大数据技术来执行。其中包括用于统计或机器学习的更高级算法、时间序列或本地操作,或者通常在大型企业系统中发现的定制并行性。

如今,许多公司和机构都存在可并行的问题,但不清楚如何转换为大数据计算。如今,这些公司往往通过使用低级系统(如MPIZeroMQ)或TCP和复杂的队列系统编写自定义代码,希望将这些问题通过使用标准的大数据技术(如MapReduceSpark)来解决问题

DASK通过向内部任务调度程序公开低级API来帮助解决这些问题,它能够执行非常高级的计算。这使机构内的工程师能够使用同一个引擎来构建他们自己的并行计算系统,该引擎支持DASKarraydataframe和机器学习算法,但现在有了机构自己的自定义逻辑。允许工程师在内部保留复杂的业务逻辑,同时仍然依赖DASK来处理网络通信、负载平衡、恢复能力、诊断等。

反响

因为所有事情都是远程进行的,交互式并行计算可能会让用户感到沮丧。他们没有很好的理解计算是如何进行的,可能出了什么问题,或者他们应该关注代码的哪些部分来提高性能。用户和他们的计算之间增加的距离会极大地影响他们识别和解决错误和性能问题的速度,这会极大地增加他们解决问题的时间。

DASK通过一套有用的诊断和调查工具(包括以下工具)向用户提供信息和内容:

  1. 显示当前进度、通信成本、内存使用等的实时响应仪表盘,每100毫秒更新一次。
  2. 在每10毫秒对每个线程进行一次轮询的每个工作线程上安装一个统计探查器,以确定代码中的哪些行在整个计算过程中占用的时间最多。
  3. 每个worker和调度程序中都有一个嵌入式的ipython内核,允许用户使用弹出式终端直接调查他们的计算状态。
  4. 在本地重新评估错误的能力,以便他们可以使用他们习惯的传统调试工具,即使在远程发生错误时也是如此。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值