Xarray 应用函数

问题描述 投票:0回答:1

我有一个大数据集,我想对某些值组进行一些计算。

效果很好,但我留下了以下信息:

        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 和内存使用率在操作期间极低。我想使用所有内核和更多内存来加快计算时间。

python parallel-processing dask python-xarray
1个回答
0
投票

所以我猜,当我例如将一些变量加在一起时,它不会执行操作,但它只会保存必须完成的操作,至少这就是我解释“任务”的方式。

正确:这被称为“惰性”操作,这就是 xarray 使用 dask 进行并行和核外计算的方式。

假设您使用

chunks={}
之类的东西打开数据集,您的操作 在您获取值时并行执行。在您的文本表示中看到“块”表明是这种情况。你的 CPU 使用率很低,可能意味着你的大部分书都在等待 IO 和其他延迟。

几点建议:

  • 你可以为你的 dask 分区大小选择比
    chunks={}
    给出的默认值更大的值,这意味着除了你已经拥有的并行性之外,IO 上的额外并发性
  • 如果你创建一个分布式集群,即使是带有
    dask.distributed.Client()
    的默认集群,你通常会获得更智能的并行性,当然还有更多关于通过仪表板发生的事情的信息。这还可以让您调整线程与进程的组合,以尝试找到最适合您的工作流程的组合。
  • 你的最终输出对象中有很多任务;也许一些操作集可以捆绑在一起成为
    map
    操作(尽管 dak 可以自动为您组合这些操作)
© www.soinside.com 2019 - 2024. All rights reserved.