Commit 88f7f23
authored
CosineExpanded Distance Metric for CAGRA (rapidsai#197)
Currently only IVF-PQ can be used as the graph building algorithm (NN Descent does not support Cosine). As a result, we are limited by IVF-PQ's restriction of data to be of float / half type for the Cosine metric. This PR also fixes an in-place data modification that was being done by IVF-PQ.
Opportunities for optimization:
NN Descent to support Cosine and compute dataset norms only once -- during NN Descent. Re-use those for CAGRA.
[UPDATE 08/21/2025]: NN Descent now support Cosine. This PR allows the initial CAGRA graph to be built by both methods -- IVF_PQ, NN_DESCENT. The IVF_PQ restriction on data types holds, but uint8 and int8 can be supported with NN Descent as the graph building algorithm. ITERATIVE CAGRA SEARCH is currently disabled for Cosine.
[UPDATE 09/23/2025]: This PR also adds Cosine support for IVF_PQ with uint8 / int8 inputs. The above mentioned restriction with IVF_PQ has been removed. So with this PR CAGRA supports Cosine wholly, for float, uint8 and int8 inputs. ITERATIVE_SEARCH however still has some issues as the graph building method with the Cosine metric and has been disabled.
[UPDATE 09/25/2025]:
Binary size comparison for libcuvs.so (CUDA 12.9, x86):
branch-25.10: 1154.42 MB
This PR: 1160.73 MB
Total CAGRA testing time:
branch-25.10:
```
Start 10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST
19/37 Test rapidsai#10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST ... Passed 825.43 sec
Start 11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST
20/37 Test rapidsai#11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST ........ Passed 0.58 sec
Start 12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST
21/37 Test rapidsai#12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST .... Passed 663.97 sec
Start 13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST
22/37 Test rapidsai#13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST .... Passed 397.57 sec
Start 14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST
23/37 Test rapidsai#14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST ... Passed 408.16 sec
```
This PR:
```
Start 10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST
19/37 Test rapidsai#10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST ... Passed 1830.34 sec
Start 11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST
20/37 Test rapidsai#11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST ........ Passed 0.45 sec
Start 12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST
21/37 Test rapidsai#12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST .... Passed 1444.14 sec
Start 13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST
22/37 Test rapidsai#13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST .... Passed 973.64 sec
Start 14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST
23/37 Test rapidsai#14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST ... Passed 1010.46 sec
```
[UPDATE 09/30/2025]:
Updates to CAGRA C++ tests according to the latest PR reviews.
New total CAGRA testing time:
branch-25.10:
```
Start 9: NEIGHBORS_ANN_CAGRA_TEST_BUGS
18/37 Test rapidsai#9: NEIGHBORS_ANN_CAGRA_TEST_BUGS ........... Passed 16.99 sec
Start 10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST
19/37 Test rapidsai#10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST ... Passed 803.64 sec
Start 11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST
20/37 Test rapidsai#11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST ........ Passed 0.49 sec
Start 12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST
21/37 Test rapidsai#12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST .... Passed 667.89 sec
Start 13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST
22/37 Test rapidsai#13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST .... Passed 420.49 sec
Start 14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST
23/37 Test rapidsai#14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST ... Passed 429.57 sec
```
This PR:
```
Start 9: NEIGHBORS_ANN_CAGRA_TEST_BUGS
18/37 Test rapidsai#9: NEIGHBORS_ANN_CAGRA_TEST_BUGS ........... Passed 26.62 sec
Start 10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST
19/37 Test rapidsai#10: NEIGHBORS_ANN_CAGRA_FLOAT_UINT32_TEST ... Passed 973.23 sec
Start 11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST
20/37 Test rapidsai#11: NEIGHBORS_ANN_CAGRA_HELPERS_TEST ........ Passed 0.43 sec
Start 12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST
21/37 Test rapidsai#12: NEIGHBORS_ANN_CAGRA_HALF_UINT32_TEST .... Passed 702.02 sec
Start 13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST
22/37 Test rapidsai#13: NEIGHBORS_ANN_CAGRA_INT8_UINT32_TEST .... Passed 491.65 sec
Start 14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST
23/37 Test rapidsai#14: NEIGHBORS_ANN_CAGRA_UINT8_UINT32_TEST ... Passed 541.43 sec
```
Fixes rapidsai#1288
Fixes rapidsai#389
Authors:
- Tarang Jain (https://github.com/tarang-jain)
- Corey J. Nolet (https://github.com/cjnolet)
Approvers:
- Tamas Bela Feher (https://github.com/tfeher)
- Corey J. Nolet (https://github.com/cjnolet)
URL: rapidsai#1971 parent 5496b90 commit 88f7f23
33 files changed
Lines changed: 1033 additions & 169 deletions
File tree
- cpp
- include/cuvs/neighbors
- src/neighbors
- detail/cagra
- ivf_pq
- refine
- tests/neighbors
- ann_ivf_pq
- python/cuvs/cuvs
- neighbors/cagra
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
234 | 237 | | |
235 | 238 | | |
236 | 239 | | |
| |||
246 | 249 | | |
247 | 250 | | |
248 | 251 | | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
249 | 261 | | |
250 | 262 | | |
251 | 263 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
339 | 339 | | |
340 | 340 | | |
341 | 341 | | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
342 | 350 | | |
343 | 351 | | |
344 | 352 | | |
| |||
354 | 362 | | |
355 | 363 | | |
356 | 364 | | |
357 | | - | |
| 365 | + | |
| 366 | + | |
358 | 367 | | |
359 | 368 | | |
360 | 369 | | |
| |||
420 | 429 | | |
421 | 430 | | |
422 | 431 | | |
423 | | - | |
| 432 | + | |
| 433 | + | |
424 | 434 | | |
425 | 435 | | |
426 | 436 | | |
427 | 437 | | |
428 | 438 | | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
429 | 447 | | |
430 | 448 | | |
431 | 449 | | |
| |||
435 | 453 | | |
436 | 454 | | |
437 | 455 | | |
| 456 | + | |
| 457 | + | |
438 | 458 | | |
439 | 459 | | |
440 | 460 | | |
441 | 461 | | |
442 | 462 | | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
443 | 468 | | |
444 | 469 | | |
445 | 470 | | |
446 | 471 | | |
447 | 472 | | |
448 | 473 | | |
449 | 474 | | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
450 | 480 | | |
451 | 481 | | |
452 | 482 | | |
453 | 483 | | |
454 | 484 | | |
455 | 485 | | |
456 | 486 | | |
| 487 | + | |
| 488 | + | |
457 | 489 | | |
458 | 490 | | |
459 | 491 | | |
460 | 492 | | |
461 | 493 | | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
462 | 498 | | |
463 | 499 | | |
464 | 500 | | |
465 | 501 | | |
466 | 502 | | |
| 503 | + | |
| 504 | + | |
467 | 505 | | |
468 | 506 | | |
469 | 507 | | |
470 | 508 | | |
471 | 509 | | |
472 | 510 | | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
473 | 519 | | |
474 | 520 | | |
475 | 521 | | |
476 | 522 | | |
477 | 523 | | |
478 | 524 | | |
479 | 525 | | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
480 | 531 | | |
481 | 532 | | |
482 | 533 | | |
| |||
519 | 570 | | |
520 | 571 | | |
521 | 572 | | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
522 | 577 | | |
523 | 578 | | |
524 | 579 | | |
| |||
539 | 594 | | |
540 | 595 | | |
541 | 596 | | |
| 597 | + | |
542 | 598 | | |
543 | 599 | | |
544 | 600 | | |
| |||
576 | 632 | | |
577 | 633 | | |
578 | 634 | | |
| 635 | + | |
579 | 636 | | |
580 | 637 | | |
581 | 638 | | |
| |||
613 | 670 | | |
614 | 671 | | |
615 | 672 | | |
| 673 | + | |
616 | 674 | | |
617 | 675 | | |
618 | 676 | | |
| |||
649 | 707 | | |
650 | 708 | | |
651 | 709 | | |
| 710 | + | |
652 | 711 | | |
653 | 712 | | |
654 | 713 | | |
| |||
685 | 744 | | |
686 | 745 | | |
687 | 746 | | |
| 747 | + | |
688 | 748 | | |
689 | 749 | | |
690 | 750 | | |
| |||
722 | 782 | | |
723 | 783 | | |
724 | 784 | | |
| 785 | + | |
725 | 786 | | |
726 | 787 | | |
727 | 788 | | |
| |||
759 | 820 | | |
760 | 821 | | |
761 | 822 | | |
| 823 | + | |
762 | 824 | | |
763 | 825 | | |
764 | 826 | | |
| |||
796 | 858 | | |
797 | 859 | | |
798 | 860 | | |
| 861 | + | |
799 | 862 | | |
800 | 863 | | |
801 | 864 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
| 30 | + | |
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
| |||
36 | 38 | | |
37 | 39 | | |
38 | 40 | | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
39 | 72 | | |
40 | 73 | | |
41 | 74 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
130 | | - | |
131 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
132 | 133 | | |
133 | 134 | | |
134 | 135 | | |
| |||
710 | 711 | | |
711 | 712 | | |
712 | 713 | | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
713 | 719 | | |
714 | 720 | | |
715 | 721 | | |
| |||
0 commit comments