使用 Dask 模块进行 Python 开发时,并不严格要求在集群环境中运行。
Dask 可以在单机(单节点)环境中运行,也可以扩展到集群(多节点)环境中运行,这使得它非常灵活。 单机环境
在单机环境中,Dask 仍然可以利用多核 CPU 和多线程/多进程来并行化计算任务。
你可以通过以下方式在单机上运行 Dask:
本地线程调度器:使用 dask.distributed.Client(scheduler='threads') 或 dask.distributed.LocalCluster()。
本地进程调度器:使用 dask.distributed.Client(scheduler='processes') 或 dask.distributed.LocalCluster(scheduler='processes')。
以下是一个简单的示例,展示如何在单机环境中使用 Dask:
import dask.array as da
from dask.distributed import Client, LocalCluster
# 创建一个本地进程调度器
cluster = LocalCluster(n_workers=4, threads_per_worker=2)
client = Client(cluster)
# 创建一个大的数组
x = da.random.random((1000, 1000), chunks=(100, 100))
# 对数组进行一些计算,比如计算均值
y = x.mean().compute()
print(f"Mean of the array: {y}")
# 关闭客户端和集群
client.close()
cluster.close()
在这个例子中,我们创建了一个本地集群,指定了 4 个工作进程,每个进程有 2 个线程。
然后我们创建了一个大的 Dask 数组,并计算了它的均值。
集群环境
在集群环境中,Dask 可以利用多个节点的资源,
通过分布式调度器(如 dask.distributed.Client(scheduler='distributed://hostname:port'))来协调计算任务。
这通常涉及在多个节点上运行 Dask worker 进程,并配置一个中心调度器来管理这些 worker。 示例代码(集群环境)
在集群环境中,你通常会在一个节点上启动调度器,并在其他节点上启动 worker。以下是一个简单的配置示例:
启动调度器:
dask-scheduler --port 8786 --bokeh --bokeh-port 8787
在多个节点上启动 worker:
dask-worker tcp://<scheduler-hostname>:8786 --nthreads 2 --nprocs 4
在客户端代码中连接到调度器:
from dask.distributed import Client
client = Client('tcp://<scheduler-hostname>:8786')
# 接下来的代码与单机环境中的代码类似
x = da.random.random((1000, 1000), chunks=(100, 100))
y = x.mean().compute()
print(f"Mean of the array: {y}")
client.close()
总结
Dask 可以在单机和集群环境中运行,这使得它非常灵活,可以根据你的计算需求进行扩展。
在单机环境中,Dask 可以利用多核 CPU 和多线程/多进程来加速计算;
在集群环境中,Dask 可以跨多个节点进行分布式计算。