使用xarray dask apply_ufunc时避免内存溢出

问题描述

我需要沿着具有这种形状的xarray dask数组的时间维度应用一个函数

<xarray.DataArray 'tasmax' (time: 14395,lat: 1801,lon: 3600)>
dask.array<rechunk-merge,shape=(14395,1801,3600),dtype=float32,chunksize=(14395,600),chunktype=numpy.ndarray>
Coordinates:
  * lat      (lat) float64 90.0 89.9 89.8 89.7 89.6 ... -89.7 -89.8 -89.9 -90.0
  * time     (time) datetime64[ns] 1981-01-01 1981-01-02 ... 2020-05-31
  * lon      (lon) float64 -180.0 -179.9 -179.8 -179.7 ... 179.7 179.8 179.9

该过程的输出将是一个大小为(time=365,lat=1801,lon=3600)的小得多的数组,但是如上面所示,输入数组的内存大小约为360 GB。我有一台具有16个cpu内核和126 GB RAM的计算机。我试图通过将apply_ufuncdask='parallelized'参数一起使用来优化过程,但是由于使用了所有126GB RAM,这会导致内存错误。我可以避免并行化,但是要花很多时间才能完成该过程。有什么方法可以控制apply_ufunc的内存使用量,以将进程包含在可用的RAM中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)