Почему xarray выбрал использование подкачки вместо памяти? - PullRequest
0 голосов
/ 23 апреля 2020

Я выполняю некоторые вычисления с использованием 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 не знает сколько памяти доступно?

...