Repository navigation
Use itopk_size=128 in the core CAGRA multi-partition test sweep #2839
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2485,15 +2485,15 @@ inline std::vector<AnnCagraMpInputs> generate_mp_inputs() | |
| split, | ||
| graph_build_algo::NN_DESCENT, | ||
| algo, | ||
| /*itopk_size*/ 64, | ||
| // With a single 10000-row partition, itopk_size=64 leaves | ||
| // the recall of the fp16/int8/uint8 datasets at ~0.98, with | ||
| // a tail below 0.97 since the NN-descent graph differs from | ||
| // build to build. 128 puts every case near 1.0 (minimum | ||
| // ~0.994 over thousands of builds), so the single-index | ||
| // 0.985 convention applies. | ||
| /*itopk_size*/ 128, | ||
|
Comment on lines
+2488
to
+2494
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is the budget change.
Inside the plan, Question for reviewers: is raising the budget to 128 better than keeping 64 and lowering the floor? I chose 128 because, with the floor also going up to 0.985, the test becomes stricter rather than looser. Keeping 64 would need a floor below the 0.966 we measured at that budget, and a floor that low would also let a few-percent regression in the merge or decode logic through. |
||
| metric, | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why this only showed up on GB300, and for L2: the "fixed" dataset is not the same on every GPU. Question for reviewers: every recall test that seeds |
||
| // Lower than the single-index 0.985 convention. These | ||
| // low-redundancy single-partition / skewed configs dip | ||
| // further under filtering, where removing rows thins the | ||
| // survivors' graph connectivity; observed recall floors | ||
| // around 0.974, so 0.97 leaves headroom for run-to-run | ||
| // jitter while still catching real regressions. | ||
| /*min_recall*/ 0.97}); | ||
| /*min_recall*/ 0.985}); | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This brings the floor back to the single-index convention. The single-index CAGRA inputs use 0.985 (e.g. L1911-L1932 and the 10000-row L1984-L2006). This fixture uses the same graph degrees on purpose so that the thresholds are comparable (L2179-L2182). The deleted comment says 0.97 was chosen from observed floors around 0.974. With The max_queries-chunk block below still uses 0.97 (L2534-L2551). The unchanged blocks had a minimum of 0.990 in the verification run, so the chunk block could also move to 0.985, but I left the non-core blocks out of this PR. |
||
| } | ||
| } | ||
| } | ||
|
|
||
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.
Question for reviewers: does doubling itopk here lose coverage of a small-itopk path in multi-partition search? As far as I can tell, multi-partition search is still exercised at itopk=64 by:
AUTO(which resolves to SINGLE_CTA, per the comment at L2464-L2467), 4 partitions, dim 8 and 1024, L2 (L2518-L2532);SINGLE_CTAandMULTI_CTA(2 CTAs per query at 64), 4 partitions, L2 (L2534-L2551);CagraC.BuildSearchMultiPartition*(ann_cagra_c.cu L1675), which use the defaultitopk_size = 64(cagra.cpp L2404-L2409). These use tiny 2-row partitions, though, so they only check plumbing, not recall.At itopk=64, the C++ suite no longer covers InnerProduct or Cosine, or the SKEWED split, in multi-partition search; those now run only at 128. If that matters, I can add back one itopk=64 case per metric at num_partitions=8, where recall at 64 is about 1.0.