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

Dask 如何使xarray.interp()并行工作?,dask,python-xarray,Dask,Python Xarray,我在一个大型3D数据阵列(气象数据:纬度、经度、时间)上使用xarray.interp,根据离散映射函数f将值(风速)映射到新值。 插值方法似乎只使用一个核进行计算,这使得该过程效率低下。我不知道如何使xarray使用多个内核来完成此任务 我确实通过htop和dask仪表板为xarray.interp监控了计算。 htop仅显示要使用的一个核心,仪表板不显示任何工人的任何活动。我能观察到的唯一dask活动是从磁盘加载netcdf数据文件。如果使用.load()预加载数据,则此dask活动将消失

我在一个大型3D数据阵列(气象数据:纬度、经度、时间)上使用
xarray.interp
,根据离散映射函数
f
将值(风速)映射到新值。 插值方法似乎只使用一个核进行计算,这使得该过程效率低下。我不知道如何使
xarray
使用多个内核来完成此任务

我确实通过
htop
dask
仪表板为
xarray.interp
监控了计算。
htop
仅显示要使用的一个核心,仪表板不显示任何工人的任何活动。我能观察到的唯一
dask
活动是从磁盘加载
netcdf
数据文件。如果使用
.load()
预加载数据,则此
dask
活动将消失

我还尝试将
scipy.interpolate.interp1d
函数与
xarray.apply_ufunc()
一起使用,以达到我想要的效果,但也没有观察到任何并行使用(
htop
)或活动(
dask
仪表板)

目前对我来说,最快的方法是使用
numpy.interp
,然后使用原始DataArray的坐标将其重新编译回
xr.DataArray
。但这也不是平行的,只是快了百分之几

在下面的MWE中,在块4中的
da.load()
语句之后,我没有看到任何
dask
活动

编辑:
当使用例如
htop
进行评估时,代码必须在单独的块1-4中运行。由于
load()
会导致多核活动,并且会显式(块2)或隐式(由4触发)发生,因此如果将脚本作为一个整体运行,则很容易将多核活动错误地归因于
.interp()

#1:用于dask仪表板
从dask.distributed导入客户端
client=client()
显示(客户端)
将xarray作为xr导入
将numpy作为np导入
da=xr.tutorial.open_数据集(“空气温度”,chunks={})[air']
#2:将数据预加载到内存中
da.load()
#3:虚拟插值函数
xp=np.linspace(0400,21)
fp=-1*(xp-300)**2
xr_interp_da=xr.DataArray(fp,[('xp',xp)],name='interpolation function')
#4:我希望它能并行运行,但事实并非如此
f=xr_interp_da.interp({'xp':da})

我运行了那段代码,我的机器的所有核心都有活动,有没有
da.load()
语句。您是在每个注释之间单独运行语句,还是始终作为一个整体运行@JulianGiles?我没有明确提到这一点(相应地更新了问题)。如果脚本作为一个整体运行,则
.load()
也会隐式发生,并在我的内核上引发活动。在最后一个代码块(第4个)中,我没有看到多个核心上的活动,我希望有更多的核心参与。我在单独的块中运行代码,并且作为一个整体运行代码,没有
.load()
语句,我得到了多核活动。并非所有核心都是100%连续活动,但在观看
htop
时,我肯定看到几个核心同时工作。