首页 > 解决方案 > Dask 计算永无止境

问题描述

我尝试了以下代码:

import numpy as np  
from dask.distributed import Client  
from dask.jobqueue import PBSCluster  
import dask.array as da

cluster = PBSCluster(processes=1, cores=8, memory="40GB", 
                     local directory='$TMPDIR',   
                     walltime='1:00:00', interface='ib0')  

task = client.submit(lambda: np.random.uniform(size=(623000, 73, 41)))
arr = da.from_delayed(task, shape=(623000, 73, 41), dtype=np.float32)
res = client.compute(arr)

res.result()

该过程尚未完成。它总是重新启动,并且仅由一名工作人员执行。

代码有什么问题?是否可以将其分发到所有核心?

标签: pythoncluster-computingdask

解决方案


集群 = PBSCluster(进程 = 1,核心 = 8,内存 =“40GB”,

您正在请求一个具有 8 个核心的工作人员,拥有多个工作人员可能是个好主意。

task = client.submit(lambda: np.random.uniform(size=(623000, 73, 41)))

在这一行中,您要求工作人员创建大约 2 bln 个数字的大数组。实现这一目标的更好方法是使用da.random.random.

res = client.compute(arr)

您要求工作人员计算 dask 数组,但这可能并不理想,更好的方法是要求工作人员计算一些感兴趣的对象,这些对象通常会减小大小。


推荐阅读