Dask的本地集群配置和编程
Dask提供了多种分布式调度器,当缺少多台服务器时候,也可以通过本地集群来实现单机分布式的计算。这篇博客主要就是介绍如何实现Dask的单机分布式调度器。第一小节是简介,第二节是单机调度器的简写版本,第三节是单机调度器的完整版本,第四节是使用的一些示例。
一、单机分布式
使用dask.distributed
调度器可以在一台计算机上很好地工作。由于以下原因,有时它比默认调度程序更可取:
- 它提供对异步API的访问,例如Futures
- 它提供了一个诊断仪表板(diagnostic dashboard),可以提供有关性能和进度的宝贵见解
- 它可以在本地执行更复杂地数据处理,因此在需要多个流程的工作负载上,它比多进程调度器(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技术推送
