-
Notifications
You must be signed in to change notification settings - Fork 80
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
MRG: fix gather memory usage issue by not accumulating GatherResult
#2962
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## latest #2962 +/- ##
==========================================
+ Coverage 86.61% 86.62% +0.01%
==========================================
Files 135 135
Lines 15262 15278 +16
Branches 2622 2618 -4
==========================================
+ Hits 13219 13235 +16
Misses 1743 1743
Partials 300 300
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
…o fix_gather_mem
GatherResult
GatherResult
@bluegenes could you take a quick look at this and give me a smell test? If you think it's ok to merge, then please do approve it. If not, any specific feedback you have would be welcome ;) |
One minor improvement to this PR would be to just store the CSV rows rather than the entire CSV. Feels cleaner to me. |
ok, updated I think this should be ready for review @sourmash-bio/devs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think this looks good!
release notes: https://hackmd.io/SCoVcWS1RhCH-ndQNWF-1A?view # sourmash release v4.8.6 - release notes Minor new features: * re-establish `tax` gather reading flexibility (#2986) * update JOSS paper per pyopensci review (#2964) * Clean up and refactor `KmerMinHash::merge` in core (#2973) * add label output & input options to `compare` and `plot`, for better customization (#2598) * add utilities for using ictv taxonomic ranks with `sourmash tax` (#2608) Bug fixes: * Fix `tax metagenome` to work on gather output created with `--estimate-ani-ci` (#2952) * fix gather memory usage issue by not accumulating `GatherResult` (#2962) * update the CLI docs and help for `search --containment` and `prefetch` (#2971) Documentation updates: * update tutorial to remove bioconda & use sourmash-minimal (#2972) * update readme with maintainers & sourmash comparison info (#2965) * add branchwater reference; make FAQ more visible (#2984) * update FAQ answer on k-mer size (#2899) * update README with repostatus and pyver badges, and Windows support (#2928) * add full column descriptions for `gather` and `prefetch` output (#2954) * add scaled FAQ, adjust ksize answer (#2921) * minor refactoring of gather code, small doc updates (#2953) * Add threshold-bp and scaled relationship to faqs (#2930) Developer updates: * nix updates for pyopensci review (#2975) * add scaled selection to manifest; add helper functions for collection and sig/sketch usage (#2948) * Pre-commit updates (#2427) * fix upload wheel CI (#2974) * release core; bump rust core version to r0.12.1 (#2988) * CI: macos deployment target and maturin updates (#2879) * MRG: bump version to 4.8.6-dev, post-release (#2877) * fix benchmark code & a few other small issues from pyOpenSci review (#2920) * fix uploading of wheels after upload-artifact upgrade. (#2887) * in core, enable downsample within select (#2931) Dependabot updates: * Bump pypa/cibuildwheel from 2.16.4 to 2.16.5 (#2981) * Bump tempfile from 3.9.0 to 3.10.0 (#2979) * Bump rkyv from 0.7.43 to 0.7.44 (#2978) * Bump actions/cache from 3 to 4 (#2933) * Bump actions/download-artifact from 3 to 4 (#2884) * Bump actions/upload-artifact from 3 to 4 (#2883) * Bump cachix/cachix-action from 13 to 14 (#2926) * Bump cachix/install-nix-action from 24 to 25 (#2927) * Bump chrono from 0.4.31 to 0.4.33 (#2957) * Bump getrandom from 0.2.11 to 0.2.12 (#2924) * Bump histogram from 0.8.3 to 0.8.4 (#2923) * Bump histogram from 0.8.4 to 0.9.0 (#2935) * Bump jinja2 from 3.1.2 to 3.1.3 (#2922) * Bump memmap2 from 0.9.0 to 0.9.2 (#2882) * Bump memmap2 from 0.9.2 to 0.9.3 (#2889) * Bump memmap2 from 0.9.3 to 0.9.4 (#2958) * Bump mymindstorm/setup-emsdk from 13 to 14 (#2934) * Bump ouroboros from 0.18.1 to 0.18.2 (#2894) * Bump ouroboros from 0.18.2 to 0.18.3 (#2936) * Bump pypa/cibuildwheel from 2.16.2 to 2.16.4 (#2960) * Bump rayon from 1.8.0 to 1.8.1 (#2937) * Bump rkyv from 0.7.42 to 0.7.43 (#2880) * Bump serde from 1.0.194 to 1.0.195 (#2901) * Bump serde from 1.0.195 to 1.0.196 (#2956) * Bump serde_json from 1.0.108 to 1.0.110 (#2896) * Bump serde_json from 1.0.110 to 1.0.111 (#2902) * Bump serde_json from 1.0.111 to 1.0.113 (#2955) * Bump shlex from 1.1.0 to 1.3.0 (#2940) * Bump supercharge/redis-github-action from 1.7.0 to 1.8.0 (#2885) * Bump tempfile from 3.8.1 to 3.9.0 (#2893) * Bump thiserror from 1.0.50 to 1.0.51 (#2881) * Bump thiserror from 1.0.51 to 1.0.56 (#2897) * Bump wasm-bindgen from 0.2.89 to 0.2.90 (#2925) * Bump wasm-bindgen-test from 0.3.39 to 0.3.40 (#2938) * Bump web-sys from 0.3.66 to 0.3.67 (#2939) * Update pytest requirement from <7.5.0,>=6.2.4 to >=6.2.4,<8.1.0 (#2959)
side note: this increased memory usage was present from sourmash v4.4.0 through v4.8.5; fixed in v4.8.6. |
This is kind of a patch-fix for #2950 for
sourmash gather
specifically.This PR changes
sourmash gather
andsourmash multigather
so that they no longer store anyGatherResult
objects, thus decreasing memory usage substantially.The solution is hacky at several levels, including storing a CSV file in memory rather than writing it progressively. But I think it's an important fix to get in, since
gather
is one of our main use cases and it's causing people some problems (including me) :(.The PR also changes
--save-matches
so that it writes out sketches as they are encountered. This breaks semantic versioning a little bit because the target file for--save-matches
is opened before any matches are found, and thus may be empty and may also overwrite files unnecessarily.Ultimately, a better fix is needed - probably one that changes up the dataclasses so that they don't store MinHashes - but such a fix is beyond me at the moment.
benchmarking
with latest @ e2c199f: 645 MB
with this branch: 215 MB