Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use on-disk data storage if OOM happens #126

Closed
4 tasks done
jangorecki opened this issue Dec 1, 2019 · 5 comments
Closed
4 tasks done

use on-disk data storage if OOM happens #126

jangorecki opened this issue Dec 1, 2019 · 5 comments

Comments

@jangorecki
Copy link
Contributor

jangorecki commented Dec 1, 2019

Solutions that runs OOM and are capable to use on-disk storage should use it. AFAIU it is now possible for pydatatable, spark and dask.

  • pydatatable 1e9 join
  • spark 1e9 join
  • dask 1e9 join
  • dask 1e9 groupby
@jangorecki
Copy link
Contributor Author

jangorecki commented Dec 4, 2019

Timeout for join has been increased from 60 to 120 minutes due to the much longer processing time for newly added spark 1e9 join that uses on-disk data storage.
I played a little with spark memory limit, timing of 1e9 join

 90G -  9h
100G -  9h
110G - 14h
120G - spark crash: "There is insufficient memory for the Java Runtime Environment to continue."

@jangorecki
Copy link
Contributor Author

jangorecki commented Dec 4, 2019

Timeout has to be increase much further. Looking at data.table and spark and groupby (1e7, k=100) vs join, latter seems to be taking 2-8x longer. This is likely caused by loading data. Groupby requires load 45gb once, while join requires to load 55gb x2. Due to those data sizes groupby still can be computed in memory, but join needs on-disk data storage, this contributes to longer computation time even more. To reduce the total amount of time that benchmark will be spending on join task, we can make timeout parameter granular for different data size. So 1e7 could have 30 minutes, 1e8 could have 2h (both should fit into memory), and 1e9 8h (on disk). Then at least we won't wait 8h on some slow solution trying to solve 1e7 size.

@jangorecki
Copy link
Contributor Author

jangorecki commented Dec 10, 2019

All 4 scripts for 3 solutions has been implemented and are already reflected on benchplot.

  • spark join 1e9: despite extending 1e9 join timeout to 8h is not able to finish q5 (big to big) join. From previous tests it needs 9h.
  • dask join 1e9: despite using on-disk data storage is running out of memory for 1e9 join.
    Data are being loaded (precisely speaking mapped to on-disk tables) but python script is being killed by OS OOM killer before even finishing first run of first question
  • dask groupby 1e9: it resolves some questions where previously it was failing on data read due to memory limitation, but on-disk processing goes so slow that it timeouts eventually, using extended timeout already - 3h.

I am leaving this issue open because we should also carry out information about on-disk/in-memory to benchplot.

@jangorecki
Copy link
Contributor Author

It is now marked on benchplot with an * suffix, related note is added below the plot in the report. This issue is resolved. Note that there is a related one to use RAM memory when OOVM (video memory) happens for cudf #116.

@jangorecki
Copy link
Contributor Author

jangorecki commented Nov 21, 2020

There seems to be a regression in performance for dask 2.30 because it is no longer able to compute out-of-memory groupby questions using parquet format, going to revert to in-memory format to reduce maintenance and size of data files as no other solution uses parquet. Ideally we want to replace parquet with arrow, which can be re-used by more solutions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant