我有一个大数据集,我想对某些值组进行一些计算。
效果很好,但我留下了以下信息:
Array Chunk
Bytes 17.81 kiB 480 B
Shape (38, 1, 60) (1, 1, 60)
Count 57288 Tasks 38 Chunks
Type float64 numpy.ndarray
所以我猜,当我例如将一些变量加在一起时,它不会执行操作,但它只会保存必须完成的操作,至少这就是我解释“任务”的方式。
当要求
.value
需要很长时间(几分钟)。我想知道如何判断并行执行任务?检查任务管理器时,CPU 和内存使用率在操作期间极低。我想使用所有内核和更多内存来加快计算时间。
所以我猜,当我例如将一些变量加在一起时,它不会执行操作,但它只会保存必须完成的操作,至少这就是我解释“任务”的方式。
正确:这被称为“惰性”操作,这就是 xarray 使用 dask 进行并行和核外计算的方式。
假设您使用
chunks={}
之类的东西打开数据集,您的操作 在您获取值时并行执行。在您的文本表示中看到“块”表明是这种情况。你的 CPU 使用率很低,可能意味着你的大部分书都在等待 IO 和其他延迟。
几点建议:
chunks={}
给出的默认值更大的值,这意味着除了你已经拥有的并行性之外,IO 上的额外并发性dask.distributed.Client()
的默认集群,你通常会获得更智能的并行性,当然还有更多关于通过仪表板发生的事情的信息。这还可以让您调整线程与进程的组合,以尝试找到最适合您的工作流程的组合。map
操作(尽管 dak 可以自动为您组合这些操作)