Summary:
This is a design proposal that demonstrates an approach to enabling optional support for [RAFT](https://github.com/rapidsai/raft) versions of IVF PQ and IVF Flat (and brute force w/ fused k-selection when k <= 64). There are still a few open issues and design discussions needed for the new RAFT index types to support the full range of features of that FAISS' current gpu index types.
Checklist for the integration todos:
- [x] Rebase on current `main` branch
- [X] The raft handle has been plugged directly into the StandardGpuResources
- [X] `FlatIndex` passing Googletests
- [x] Use `CodePacker` to support `copyFrom()` and `copyTo()`
- [X] `IVF-flat passing Googletests
- [ ] Raise appropriate exceptions for operations which are not yet supported by RAFT
Additional features we've discussed:
- [x] Separate IVF lists into individual memory chunks
- [ ] Saving/loading
To build FAISS w/ optional RAFT support:
```
mkdir build
cd build
cmake ../ -DFAISS_ENABLE_RAFT=ON -DFAISS_ENABLE_GPU=ON
make -j
```
For development/testing, we've also supplied a bash script to make things easier: `build.sh`
Below is a benchmark comparing the training of IVF Flat indices for RAFT and FAISS:

The benchmark was produced using Googlebench in [this](https://github.com/tfeher/raft/tree/raft_faiss_bench) RAFT fork. We're going to provide benchmarks for the queries as well. There are still a couple bottlenecks to be removed in the IVF-Flat training implementation and we'll update the current benchmark when ready.
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2521
Test Plan: `buck test mode/debuck test mode/dev-nosan //faiss/gpu/test:test_gpu_index_ivfflat`
Reviewed By: algoriddle
Differential Revision: D49118319
Pulled By: mdouze
fbshipit-source-id: 5916108bc27154acf7c92021ba579a6ca85d730b
Summary:
I've broken out the FlatIndex / Distances changes from https://github.com/facebookresearch/faiss/issues/2521 into a separate PR to make things a litle easier to review. This does also include a couple other minor changes to the IVF Flat index which I used to make it easier to dispatch to the RAFT version. I can revert that change too if desired.
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2707
Reviewed By: wickedfoo
Differential Revision: D44758912
Pulled By: algoriddle
fbshipit-source-id: b2544990b4e941a2558f5004bceec4af4fa1ad09