如何使xarray.interp()并行工作?

时间:2019-04-05 18:12:01

标签: dask python-xarray

我正在大型3D DataArray(天气数据:lat,lon,time)上使用xarray.interp,以基于离散映射函数f将值(风速)映射为新值。 插值方法似乎仅利用一个核进行计算,从而使处理效率极低。我无法弄清楚如何使xarray使用多个内核来完成此任务。

我确实通过htopdask的{​​{1}}仪表板监视了计算。 xarray.interp仅显示一个正在使用的核心,仪表板未显示任何工人中的任何活动。我可以观察到的唯一htop活动是从磁盘加载dask数据文件。如果我使用netcdf预加载数据,则此.load()活动已消失。

我还尝试将dask函数与scipy.interpolate.interp1d结合使用以达到我想要的等效结果,但是没有观察到任何并行使用率(xarray.apply_ufunc())或活动({{1 }}仪表板)。

对我而言,目前最快的方法是使用htop,然后使用原始DataArray的坐标将其重铸回dask。但这还没有并行化,只能快百分之几。

在下面的 MWE 中,在框4的numpy.interp语句之后,我看不到任何xr.DataArray活动。

编辑:
使用(例如)进行评估时,必须在单独的代码块1-4中运行代码。 dask。由于da.load()导致多核活动,并且是显式地发生(方框2)或隐式地发生(由4触发),因此,如果由数据加载引起的多核活动被htop错误地归因于您可以整体运行脚本。

load()
.interp()
# 1: For the dask dashboard
from dask.distributed import Client
client = Client()
display(client)

import xarray as xr
import numpy as np

da = xr.tutorial.open_dataset("air_temperature", chunks={})['air']
# 2: Preload data into memory
da.load()

0 个答案:

没有答案