Dask的本地集群配置和编程

标签:#Dask##Python##分布式处理##编程# 时间:2020/03/31 14:25:10 作者:小木

Dask提供了多种分布式调度器,当缺少多台服务器时候,也可以通过本地集群来实现单机分布式的计算。这篇博客主要就是介绍如何实现Dask的单机分布式调度器。第一小节是简介,第二节是单机调度器的简写版本,第三节是单机调度器的完整版本,第四节是使用的一些示例。

[TOC]

一、单机分布式

使用dask.distributed调度器可以在一台计算机上很好地工作。由于以下原因,有时它比默认调度程序更可取:

  1. 它提供对异步API的访问,例如Futures
  2. 它提供了一个诊断仪表板(diagnostic dashboard),可以提供有关性能和进度的宝贵见解
  3. 它可以在本地执行更复杂地数据处理,因此在需要多个流程的工作负载上,它比多进程调度器(multiprocess)更有效。

您可以通过导入和创建不带参数的Client来创建dask.distributed调度程序。这将覆盖先前设置的任何默认值。

from dask.distributed import Client
client = Client()

如果已安装Bokeh,则可以直接到http://localhost8787/status 以查看诊断仪表板。如下图所示:

二、Client

您可以通过实例化不带参数的Dask Client来在计算机上轻松设置本地集群

from dask.distributed import Client
client = Client()

这将在您的本地进程以及运行单线程Worker的多个进程中设置一个调度程序。

如果要在同一进程中运行工作程序,则可以传递processes = False关键字参数。

client = Client(processes=False)

这可以避免worker之间的通信并且让您的计算释放了GIL。这在当主要使用NumPy或Dask数组时,非常实用。

三、本地集群

上述的Client()调用是创建LocalCluster并将其传递给客户端的简写。

from dask.distributed import Client, LocalCluster
cluster = LocalCluster()
client = Client(cluster)

而这里的程序与上述写法是等价的,但更为明确。您可能需要查看LocalCluster上可用的关键字参数,以了解在处理线程和进程混合程序时可以使用的选项,例如指定显式端口等。

四、使用示例

cluster = LocalCluster()
c = Client(cluster)

# 设置3个worker
cluster.scale(3)

# 将参数传递给Bokeh
LocalCluster(service_kwargs={'dashboard': {'prefix': '/foo'}})
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送