Я выполняю некоторые вычисления с использованием xarray для нескольких больших наборов данных в кластере пакетных вычислений. Узлу доступно 63 ГБ памяти, но когда я вижу отчет об использовании ресурсов для задания, я вижу:
CPU time : 2669.09 sec.
Max Memory : 13002 MB
Average Memory : 7836.12 MB
Total Requested Memory : 63000.00 MB
Delta Memory : 49998.00 MB
Max Swap : 236421 MB
Max Processes : 5
Max Threads : 32
Run time : 1258 sec.
Turnaround time : 1253 sec.
, то есть, что задание использует 23 ГБ подкачки, даже если было доступно много памяти.
Расчет более или менее выглядит следующим образом:
da_vap = xr.open_dataset('filename.nc')
da_humratio = xr.apply_ufunc(GetHumRatioFromVapPres,
da_vap*100,
standard_pressure,
dask='parallelized', output_dtypes=[float])
da_humratio.to_netcdf('output.nc', engine='h5netcdf')
В действительности существует больше шагов вычисления, но это иллюстративно. GetHumRatioFromVapPres - это сгенерированный numba ufun c, и проблема не в этом.
Почему dask / xarray выбирает использование подкачки вместо памяти? Есть ли вероятность снижения производительности в результате? Я не создавал локальный кластер dask, это причина? т.е. dask не знает сколько памяти доступно?