Commit Graph

15 Commits (8b5895ff79896f5a644ed55f87d6f31a4a821012)

Author SHA1 Message Date
Xiao Fu bf8bd6b689 Delete all remaining print (#3452)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/3452

Delete all remaining print within the Tests to improve the readability and effectiveness of the codebase.

Reviewed By: junjieqi

Differential Revision: D57466393

fbshipit-source-id: 6ebd66ae2e769894d810d4ba7a5f69fc865b797d
2024-05-16 19:51:07 -07:00
Matthijs Douze a878c79db3 Support RAFT from python (#2864)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2864

Adds use_raft to the cloner options.
Adds tests for the python interface.

Also continue cleanup of data structures to set default arguments.
Add flags GPU and NVIDIA_RAFT to get_compile_options()

Reviewed By: algoriddle

Differential Revision: D45943372

fbshipit-source-id: 3428b24d309e9facfb4ebcf0d2d108dccfb4ad01
2023-05-19 20:49:01 -07:00
Matthijs Douze 371d9c2f3b Fix decoding of large fast_scan blocks (#2746)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2746

There was a bug in the decoding code for large blocks, see
https://github.com/facebookresearch/faiss/issues/2739

this diff adds a test that exposes the bug, and fixes it.

Reviewed By: alexanderguzhva

Differential Revision: D43872441

fbshipit-source-id: 2fb64bf850ab76acc2af0fec3179858cc7d4cac8
2023-03-10 03:51:46 -08:00
Denis Yaroshevskiy cf40d3a73d Fixing FAISS_PRAGMA_IMPRECISE_* for clang arm and gcc (#2721)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2721

FAISS_PRAGMA_IMPRECISE_* macros were modified:

* Disabled ones on clang on arm, because it does not support `_Pragma("float_control(precise, off)")`

* Added missing pragma for the GCC compiler.

Reviewed By: alexanderguzhva

Differential Revision: D43437450

fbshipit-source-id: cec8042c3c8c7147ae7e2ffa1ac9e2232c8f1a92
2023-02-21 07:26:40 -08:00
Matthijs Douze 74ee67aefc CodePacker for non-contiguous code layouts (#2625)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2625

This diff introduces a new abstraction for the code layouts that are not simply flat one after another.

The packed codes are assumed to be packed together in fixed-size blocks. Hence, code `#i` is stored at offset `i % nvec` of block `floor(i / nvec)`. Each block has size `block_size`.

The `CodePacker` object takes care of the translation between packed and flat codes. The packing / unpacking functions are virtual functions now, but they could as well be inlined for performance.

The `CodePacker` object makes it possible to do manipulations onarrays of codes (including inverted lists) in a uniform way, for example merging / adding / updating / removing / converting to&from CPU.

In this diff, the only non-trivial CodePacker implemnted is for the FastScan code. The new functionality supported is merging IVFFastScan indexes.

Reviewed By: alexanderguzhva

Differential Revision: D42072972

fbshipit-source-id: d1f8bdbcf7ab0f454b5d9c37ba2720fd191833d0
2022-12-21 11:06:53 -08:00
Check Deng 838f85cb52 Implement search methods for ProductAdditiveQuantizer (#2336)
Summary:
Work in progress.

This PR is going to implement the following search methods for ProductAdditiveQuantizer, including index factory and I/O:

- [x] IndexProductAdditiveQuantizer
- [x] IndexIVFProductAdditiveQuantizer
- [x] IndexProductAdditiveQuantizerFastScan
- [x] IndexIVFProductAdditiveQuantizerFastScan

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2336

Test Plan:
buck test //faiss/tests/:test_fast_scan
buck test //faiss/tests/:test_fast_scan_ivf
buck test //faiss/tests/:test_local_search_quantizer
buck test //faiss/tests/:test_residual_quantizer

Reviewed By: alexanderguzhva

Differential Revision: D37172745

Pulled By: mdouze

fbshipit-source-id: 6ff18bfc462525478c90cd42e21805ab8605bd0f
2022-07-27 05:32:15 -07:00
Matthijs Douze f2a9324359 make tests cheaper
Summary:
Many of the additive quantizer tests are recognized as flaky because the tests timeout in non-optimized stress mode.
This is probably because they don't import

https://www.internalfb.com/code/fbsource/fbcode/faiss/tests/common_faiss_tests.py

that sets the number of threads to 4. This diff fixes that and in addition declares the tests as "heavyweight" so that not too many of them are spawned in parallel in stress mode.

https://www.internalfb.com/intern/wiki/TAE/tpx/Timeouts_and_Sharded_Bundled_mode/#degree-of-parallelism

Hopefully it should fix the flaky tests

Reviewed By: alexanderguzhva

Differential Revision: D38111820

fbshipit-source-id: 7dd7c72e7e92b82384a170743cfd5c4aaf9a6960
2022-07-25 06:58:39 -07:00
Check Deng 992d494d4a Support reconstruct() in IndexFastScan (#2287)
Summary:
This diff implemented `reconstruct()` interface in `IndexFastScan`.

unit test: `python -m unittest test_fast_scan_ivf.TestReconstruct`

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2287

Test Plan: buck test //faiss/tests/:test_fast_scan_ivf -- TestReconstruct

Reviewed By: alexanderguzhva

Differential Revision: D35576662

Pulled By: mdouze

fbshipit-source-id: ac584128cd370807182dee06a57efedc23c0f7d4
2022-04-19 03:18:58 -07:00
Matthijs Douze add3705c11 make fast scan tests cheaper (#2251)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2251

the fast_scan and fast_scan_ivf tests are irregularly timing out on the FB test infra

This diff:
- breaks down more tests into sub-tests
- makes tests cheaper by reducing the test dataset sizes
- corrects a nasty local variable binding bug that prevented all cases of `implem` to be covered.

I also tried to fix the polysemous tests that also timeout but I could not reproduce the timeout.

https://www.internalfb.com/intern/test/562949978542309?ref_report_id=0

Reviewed By: beauby

Differential Revision: D34852254

fbshipit-source-id: b005ffb3723e7d9df75516a539540d9165249cea
2022-03-16 13:23:07 -07:00
Ivan Sopin d50211a38f Break distance ties in `heap_replace_top()` by ID (#2245)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2245

This changeset makes the `heap_replace_top()` function of the FAISS heap implementation break distance ties by the element's ID, according to the heap's min/max property.

Reviewed By: mdouze

Differential Revision: D34669542

fbshipit-source-id: 0db24fd12442eedeee917fbb3e811ba4a070ce0f
2022-03-09 10:23:48 -08:00
Check Deng 41007232d6 AQ fastscan (#2169)
Summary:
Work in progress.

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2169

Test Plan:
buck test mode/opt //faiss/tests/:test_fast_scan
buck test mode/opt //faiss/tests/:test_fast_scan_ivf

Reviewed By: beauby

Differential Revision: D34208813

Pulled By: mdouze

fbshipit-source-id: 74b72e07dc537667a7def403c4e46d3d05408c27
2022-02-22 15:24:31 -08:00
Chengqi Deng fed61e6d95 Add ARM to CI (#1914)
Summary:
This PR added a CI job for ARM.

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/1914

Reviewed By: beauby

Differential Revision: D28833987

Pulled By: mdouze

fbshipit-source-id: 4977585ea1a0715547ed34f400cf0a3646fca667
2021-06-08 14:53:02 -07:00
Chengqi Deng d7f2dff589 Add tests for avx2 building (#1905)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/1905

This PR added some tests to make sure the building with AVX2 works as we expected in Linux.

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/1792

Test Plan: buck test //faiss/tests/:test_fast_scan -- test_PQ4_speed

Reviewed By: beauby

Differential Revision: D27435796

Pulled By: mdouze

fbshipit-source-id: 901a1d0abd9cb45ccef541bd7a570eb2bd8aac5b
2021-05-20 22:16:06 -07:00
Matthijs Douze 04f777ead5 Re-enable fast scan on Windows tests (#1663)
Summary:
Fast-scan tests were disabled on windows because of a heap corruption. This diff enables them because the free_aligned bug was fixed in the meantime.

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/1663

Reviewed By: beauby

Differential Revision: D26201040

Pulled By: mdouze

fbshipit-source-id: 8d6223b4e42ccb1ce2da6e2c51d9e0833199bde7
2021-02-03 07:48:52 -08:00
Matthijs Douze 6d0bc58db6 Implementation of PQ4 search with SIMD instructions (#1542)
Summary:
IndexPQ and IndexIVFPQ implementations with AVX shuffle instructions.

The training and computing of the codes does not change wrt. the original PQ versions but the code layout is "packed" so that it can be used efficiently by the SIMD computation kernels.

The main changes are:

- new IndexPQFastScan and IndexIVFPQFastScan objects

- simdib.h for an abstraction above the AVX2 intrinsics

- BlockInvertedLists for invlists that are 32-byte aligned and where codes are not sequential

- pq4_fast_scan.h/.cpp:  for packing codes and look-up tables + optmized distance comptuation kernels

- simd_result_hander.h: SIMD version of result collection in heaps / reservoirs

Misc changes:

- added contrib.inspect_tools to access fields in C++ objects

- moved .h and .cpp code for inverted lists to an invlists/ subdirectory, and made a .h/.cpp for InvertedListsIOHook

- added a new inverted lists type with 32-byte aligned codes (for consumption by SIMD)

- moved Windows-specific intrinsics to platfrom_macros.h

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/1542

Test Plan:
```
buck test mode/opt  -j 4  //faiss/tests/:test_fast_scan_ivf //faiss/tests/:test_fast_scan
buck test mode/opt  //faiss/manifold/...
```

Reviewed By: wickedfoo

Differential Revision: D25175439

Pulled By: mdouze

fbshipit-source-id: ad1a40c0df8c10f4b364bdec7172e43d71b56c34
2020-12-03 10:06:38 -08:00