mirror of
https://github.com/facebookresearch/faiss.git
synced 2026-10-12 02:13:36 +00:00
Summary: - https://github.com/facebookresearch/faiss/issues/5632 (Add explicit IVFPQ scanner distance modes) landed between the changelog generation and the version bump in https://github.com/facebookresearch/faiss/issues/5645, so it ships in 1.15.1 but was missing from `CHANGELOG.md`. - Adds it under `Added` in the 1.15.1 section. Changelog-only; no code changes. **Time-sensitive:** the v1.15.1 tag will be cut from the latest `main`. Landing this before tagging gets the entry into the released changelog. Pull Request resolved: https://github.com/facebookresearch/faiss/pull/5651 Test Plan: - [ ] CI passes (docs-only change) Reviewed By: mnorris11 Differential Revision: D120360726 Pulled By: alibeklfc fbshipit-source-id: 2854a7c44958ec4528ec87804382c312ea195ad2
105 KiB
105 KiB
Changelog
All notable changes to this project will be documented in this file.
Unreleased
1.15.1 - 2026-09-15
Added
3b3711c112Add explicit IVFPQ scanner distance modes (#5632)4fdbc9dc18Support ZeroCopyIOReader for IndexRaBitQ deserialization (#5629)b5a14632a6Run the eight SIMD kernel tests that no build executed (#5620)e6bd1d252cAdd AVX512 VPOPCNT dynamic dispatch level (#5531)7f4cedda9cAdd staged RaBitQ storage to HNSW (#5526)cfbf4ec5ffSVS: allow option to disable vector storing (#5525)cda4f6e713ExposeIndexBinaryIVF.set_direct_map_typevia the C API (#5451)256980cb6eAdd SVE low-dimensional nearest fast path and spherical SuperKMeans support (#5530)3a716ead1aAdd Windows ARM64 support to CI (#5544)7059eaf7daAdd AVX512 bitplane kernel for multi-bit RaBitQ inner product (#5522)a424dcb809faiss HNSW: add opt-in deterministic lock-free graph build (faiss::hnsw_deterministic_build) (#5486)da3191e754IDSelectorWithContext: extend context hook to IVFPQ/PQR, multibit RaBitQ, and Panorama scanners (#5491)edddbc998eIDSelectorWithContext: scan-context hook for locality-aware selectors (#5490)
Changed
3bb48643abPin faiss-gpu-cuvs RAPIDS deps to the 26.06 build series (#5643)6bbb068ad8Measure 20-byte Hamming codes eight at a time (#5587)3c7042f17aLet the binary Hamming paths reach the VPOPCNT kernels9f993087b0Name the SIMD level masks after what they hold (#5600)e2cf9e1ebfAccept ragged code sizes in faiss::hammings(), and fix the vectorization axis for wide codes (#5520)545550f6a2Use unittest assertions and f-strings in test_index_composite (#5571)af9eeffcf7Reserve cs vector capacity in hammings_knn_mc_impl to avoid reallocations (#5548)317a207bcaARM SVE optimization for L2 distance kernels adapted to new simd_impl structure (#5098)2027d3b331Make cuVS dispatch opt-in rather than build-implied (#5529)a39e260688Fold multi-GPU CAGRA build into train(), delete trainMultiGpu (#5521)1f93154314Revert D114685755: Fold multi-GPU CAGRA build into train(), delete trainMultiGpu6644dcfa55Fold multi-GPU CAGRA build into train(), delete trainMultiGpu (#5500)80a16564f8Enable Faiss dynamic dispatch for OVIS and VeST fbpkgs (#5515)2688c34f94Parallelize the k-means++ D^2 seeding update (#5457)76c67b7b73Update default Panorama batch size to 1024 (#5441)3b50babc59Optimize RVV batch-4 distance kernels (#5469)
Fixed
7c3b55c01bMake Panorama bounds checks overflow-safe (#5616)fb2d57a312Fix leak and unbounded lists[] in OnDisk invlist deserialization (#5560)fc13c81fb8Stop aarch64 falling back to SIMDLevel::NONE in faiss dispatch (#5572)00928e3f76Fix ROCm CI: build in a dedicated conda env instead of the runner's broken base (#5545)1e5780fbbfFix OOB read inPanorama::reconstructviaIndexPreTransform(T287094917) (#5562)2ed4c106e9Fix: Windows SIMD detection (#5497)b4c66ba603Fix reverse_index_factory/get_code_size round-trip for HNSW, IMI and IVFPQR (#5564)c0084f5cd2Clamp EDEN unbiased L2 distances to be non-negative (#5569)6457e941f5Contain DirectoryArchiver entries within the extraction root (#5561)ac60182fc0RaBitQ: Fix zero residual sign convention (#5553)1a0cfa64e0Apply the deserialization byte limit to SVS IVF (#5568)718002f7cfFix distance conversion in IndexBinaryFromFloat for non-L2 metrics (#5549)02ea14372cFix range_search_max_results to respect all similarity metrics (#5533)bd7087453efix(faiss): use is_similarity_metric for IndexShardsIVF merge (#5541)561e6ecdf3Merge shard results by metric type rather than assuming similarity (#5509)613e0acac5Fix IndexIDMap range search parameters (#5536)8b01f308f0Validate IndexScalarQuantizer codes buffer size on deserialization (#5540)2832ac3f67Fix empty-index BLAS search results (#5528)e135a1a667Fix OSX arm64 nightly: bump libopenblas from 0.3.33 to 0.3.34 (#5538)920a631851Don't raise HNSW entry_point to a point that isn't linked yet (#5524)e2f9ccacccFix SQtqmse codebook scale: fold 1/sqrt(d) into Lloyd-Max table (#5517)151452ec94Fix SIMD level detection in Faiss (#5507)02dbb4e42fFix data race in NNDescent::update() (#5413)a9ecee221dReject AdditiveQuantizer with zero-bit code size on deserialization (#5506)4de3bbb601Faiss OSS nightly autofix (#5505)b5ca016dedFix IndexBinaryIVF reconstruct_n and search_and_reconstruct byte stride (#5463)b3942aba5aAvoid signed int overflow in VStackInvertedLists binary search (#5482)
Deprecated
a74867cf56faiss HNSW: delete the flag and the lock-based graph build (#5611)5702cafcb7Remove dead TurboQuant projection state (#5618)
1.15.0 - 2026-07-31
Added
4332ceb994Enable byte-LUT gather path for QT_8bit_eden distance computation (#5498)41133fde42Add EDEN quantizer indexes (#5278)3110fd2424Add MetalIndexIVFPQ with product quantization and residual encoding support (#5288)6c2b68775aAdding cuVS IVF-SQ backend (#5306)4d778bc595Add multi-GPU CAGRA → HNSW build with trainAllNeighbors and multi-GPU optimize (#5282)42dc2862c2Implement memory-mapped I/O for Flat and static Vamana SVS indices (#5271)d22107becafeat(riscv): Add RISC-V RVV rabitq kernels (#5369)df51012a60feat(riscv): Add RISC-V RVV vector distance kernels (#5354)3b52da37c4Add AVX2 and AVX512 byte-domain kernels for QT_8bit_direct_signed (#5409)88b6c47cf5Implement IVFRaBitQ FastScan conversion constructor (#5422)d24cc844d2Implement GPU IVF add_preassigned via add_core (implement #3908) (#5372)5826578a7eRead/Write support for IndexHNSW base class (#5305)a3350f6641faiss: support METRIC_L1 and extra metrics in IndexFlat range_search (#5391)432e8b4248Extend DistanceComputer batching to PQ, SQ, and PreTransform (#5309)7d4bb39f7eExtract super_kmeans_assign_iteration as a shared public SuperKMeans kernel (#5443)aff8589c9ec_api: expose ScalarQuantizer codec and complete FaissQuantizerType enum (#5477)13aa39b791Clone index support for HadamardRotation (#5475)3e313e4c49SIMDConfig::has_dynamic_dispatch() (#5460)a6f97750aeAdd faiss-gpu-cuvs pip wheel packaging (#5250)6227323ffdpyfaiss_gpu_cuvs_2602: cuVS faiss Python for aarch64/GH200 (26.02, CUDA 12.4)522644cb2bStand up parallel cuVS 26.02 IVF-PQ targets (rmm/raft/cuvs) at CUDA 12.8 (#5414)edebabf90fInclude Python type stubs (__init__.pyi, py.typed) in conda packages (#5394)9579d8f0a4Add type stubs for SVS index classes + IndexIVFFlatPanorama.batch_size (#5489)fd7be0cfb0Add QT_0bit and QT_2bit_tq..QT_5bit_tq to ScalarQuantizer pyi stub (#5323)ccecc847dbAdd ClusteringInitMethod enum constants to __init__.pyi stub (#5324)55990eb91fPort test_rabitq_utils from C++ to Python (#5442)
Changed
0236390f2fOptimize RaBitQ fastscan query setup + 80% qps (#5396)b1d61c3b88Fuse RaBitQ AND-dot and popcount scan (#5412)81031a9789RaBitQ fastscan avx512 lut quant (#5397)b7f2b0f1fdRaBitQ SIMD-optimized bit-plane operation (#5392)0a27700e05Reuse RaBitQ IVF scanner distance computer (#5390)a3d59f0999faiss DD: use 256-bit fast-scan QBS kernel on AMD Zen 4 (split AVX-512) (#5488)c374dd917bPanorama HNSW Optimizations (~x1.2) (#5190)cb9a72ac03Reuse the HNSW visited table across searches instead of reallocating per call (#5448)4d1657471fRaise HNSW visited-table hash-set threshold from 500k to 10M (#5446)a4b4c0f2deOptimize exhaustive_L2sqr_blas_cmax with AVX-512 intrinsics. (#4569)4a2f7e6328Optimize the DistanceComputerByte::compute_code_distance with AVX512F, AVX512BW, AVX512VL instructions (#5067)9a74c6d3d1Speed up Top1 and Reservoir add_results with AVX2/AVX512 (#5297)4030faae3dSpeed up polysemous training with AVX-512.ea107641d4Parallelize inverted-list append loop in IndexIVFPQ::add_core_o (#5382)cf045707c5ProductQuantizer::search_sdc: hoist per-subquantizer row pointers out of database-vector loop (#5338)caf88fca98Improve ranklist intersection size (#5237)5c1afeed96Remove dead code in quantize_ex_bits to avoid wasted compute (#5384)e3dd6a85f3Remove unused fields in various DistanceComputers (#5318)35c5495b8fRemove confusing double-negative throw-macro conditions (#5471)9223d62e81Rename SQI8 to SQ8 to be consistent with the rest of Faiss (#5337)b37e929947Reuse faiss.ResultHeap in benchs instead of duplicating it (#5363)1f755ef3d6Prune cuVS brute-force flat index on aarch64 (FAISS_CUVS_NO_FLAT) (#5431)3a7cce4ea9Faiss OSS CI: skip GPU jobs on PRs that touch no GPU-relevant code (#5402)0f48ae6210Faiss OSS autofix: force cuVS nightly to break (E2E validation) (#5328)0f0f728166Format faiss Python files with black (line length 80) (#5349)7a7a8f2532Align faiss .flake8 with black and the 80-char standard (#5350)259fa853afblack -l 80: gpu/test formatting (1/3) (#5426)a7d91d44d9black -l 80: tests/ formatting (2/3) (#5427)3937552dd2black -l 80: benchs + python + refine test formatting (3/3) (#5428)b75a23ca15black -l 80: python/__init__.pyi formatting (4/4) (#5429)a238933d17Finish E501 line-length lint sweep across faiss (183 violations, 52 files) (#5444)d4564bdeb2facebook-unused-include-check in distances_avx2.cpp (#5462)ab3a5a95a6facebook-unused-include-check in IndexIVFPQ.cpp (#5461)e85b9bded9facebook-unused-include-check in test_svs.cpp (#5455)5e1cccea39facebook-unused-include-check in TestGpuIndexIVFScalarQuantizer.cpp (#5454)003e002da6facebook-unused-include-check in IndexBinaryHash.cpp (#5453)c22dc247c0facebook-unused-include-check in avx2.cpp (#5452)76e2bbca43facebook-unused-include-check in IndexBinaryHNSW.cpp (#5379)7c643c2930facebook-unused-include-check in IndexIVFPQFastScan.cpp (#5378)3c5c27c881facebook-unused-include-check in avx2.cpp (#5377)9b33960463facebook-unused-include-check in test_ivf_early_termination.cpp (#5376)027054f40ffacebook-unused-include-check in IVFPQ_QueryTables.cpp (#5359)f4cb963381facebook-unused-include-check in avx2.cpp (#5358)afc1be442bfacebook-unused-include-check in hamming.cpp (#5355)6256cc7bd7facebook-unused-include-check in IndexIVF.cpp (#5356)83dc6a6991facebook-unused-include-check in IndexIVFSpectralHash.cpp (#5357)124bfa1d4ffacebook-unused-include-check in IndexSVSVamanaLeanVec.cpp (#5343)a0457db86cfacebook-unused-include-check in avx2.cpp (#5344)595c5d7aa1facebook-unused-include-check in distances_simd.cpp (#5342)5437256fc5facebook-unused-include-check in avx2.cpp (#5314)7c56a9dacdfacebook-unused-include-check in avx2.cpp (#5315)0f280a7ca9facebook-unused-include-check in distances_simd.cpp (#5316)
Fixed
6187d940e3clang-diagnostic-unused-parameter in GpuCloner.cpp (#5480)37313e7b64Fix two memory leaks in shard_ivf_index_centroids (#5495)7a4e7975d1Fix RaBitQ fast scan aux offsets for large bbs (#5421)a032797bd8faiss DD: SQ AVX-512 falls back to AVX2 when d%16!=0 (#5478)de8520b7e4missing auto vectorization for AVX512-SPR (#5433)4a23937417Fix AVX-512 PQ-encode falling back to scalar in fvec_L2sqr_ny_nearest_y_transposed (#5330)7437cac4d9Fix Jaccard heap selection in IVF search (#5408)458c7be735Fix division-by-zero in quantize_lut when all LUT entries are identical (#5424)ecd5b65dbaGuard constant/zero-norm query in RaBitQ query quantization (#5381)1190b707c2RaBitQ: Clamp L2 distance estimate to >=0 (#5393)af45a3b2a7Throw instead of abort on null buffer in RaBitQuantizer::decode_core (#5465)5372c88989Guard exhaustive_{inner_product,L2sqr}_seq against empty query batches (nx=0) (#5445)764b86f24cGuard ScalarQuantizer compute_codes/decode OMP region for small n (#5423)19f477a9baFix out-of-bounds memory access in bvec_checksum (#5310)3553e01cd9Fix IndexAdditiveQuantizer::symmetric_dis() (#5319)b7cd013065Filter out-of-radius results in IndexRefine::range_search (#5370)4213672cb8Always widen IndexRefine::range_search base radius by k_factor (#5395)ed29dbb0bbfaiss: fix IndexIDMap range_search crash with empty SearchParameters (#5388)828de1b77efix IDMap add_sa_codes returning -1 labels with ivf subindex Issue #5333 (#5345)bf53109ec1Fix get_code_size to handle HNSW coarse quantizers with any M value (#5416)e1f8d4fc0dFix reverse_index_factory for multi-bit RaBitQ indexes (#5419)7b1d0ca435Fix C++ reverse_index_factory: missing qtypes crash telemetry, IDMap2 misidentified (#5417)cc9be4b1e4fix: reverse_index_factory missing 11 SQ types including all TurboQuant variants (#5322)350a50b02eFix OperatingPoints::add prune loop leaving dominated points at equal time (#5415)bd6760153cFix OperatingPoints leaving dominated points on the Pareto frontier for equal-time points (#5334)376930beabFix null dereference, dead condition, and Python binding crash in AutoTune and Clustering (#5321)e306f3036dFix PyCallbackShardingFunction to properly decrement references (#5389)d91b73dc63fix: bs add n fix valid counter skip (#5383)247527b349Fix reconstruct_n stubs resolving to torch.Tensor for numpy calls (#5411)a3e8c67c60Fix heap-buffer-overflow in ResidualCoarseQuantizer deserialization (T280514309) (#5485)4d7491540dBound lattice_nbit loop in IndexLattice ctor to fix deserialization timeout (T277092535) (#5484)5987f523f4Reject nbits==0 ProductQuantizer on deserialization (T279464247) (#5483)269ac43d61Bound recursion depth in index deserialization (CWE-674) (#5468)a20b22d0d4Bound decode-cache compute in ZnSphereCodecRec deserialization (#5467)6a0616edbdReject null base/refine index in IndexRefine deserialization (#5466)bc102d61b8Bound IVFPQ precomputed-table allocation at deserialization time (#5464)756c5d5773Harden FastScan deserialization: enforce ksub==16 and bound reconstruct() (#5436)f1efc2cf89Validate codes/ntotal consistency in Ix2L and IxLa deserialization (#5439)fba9084a62Validate Panorama batch_size and codes/cum_sums on deserialization (#5438)d43336302eValidate SVS-Vamana stored_vectors size on deserialization (ISV2) (#5434)dfd2a25aedReject degenerate code_size==0 IndexPQ with ntotal>0 on deserialization (#5437)91ce5f8a9fHarden reconstruct()/reset() against null storage in composite indexes (#5440)ea8e22c1d3Bounds-check decoded direct_map entry in IndexIVF::reconstruct (#5435)79f59edcfcValidate legacy IVFFlat per-list codes size against ids size (#5259)c428ca1e38Harden OnDiskInvertedLists mmap reader against malformed list sizes (#5312)6f62d01afaGuard against integer overflow in index deserialization storage-size checks (#5313)16c5d782e0Don't redefine PRETTY_FUNCTION under clang-cl (#5474)a9683455b7clang-diagnostic-unused-parameter in bench_result_handler_overhead.cpp (#5481)d6d3dce8d7clang-diagnostic-unused-parameter in bench_cppcontrib_sa_decode.cpp (#5479)8d0d1a2b33faiss/gpu/perf: check CUDA return in PerfIVFPQAdd (clang21 nodiscard) (#5368)0fa5b0afcbfaiss/gpu/perf: check cudaProfilerStop() return (fix clang21 -Wunused-value) (#5362)6f0155705bKeep distances_simdlib256.h include in distances_simd.cpp (unused-include false positive) (#5380)22220d2c4fFix genuine flake8 lint in faiss Python (F401/F403/F841/B011) (#5351)63378f0aceFix cuVS GPU CI timeout: pin CUDA toolkit to 13.2 (#5401)11bd76463cFaiss OSS nightly autofix (#5346)7cd1ae906cFix panorama tests: pass D_panorama (not D_regular) to check_ref_knn_with_draws (#5430)ba6af9ffe8Fix flaky IVF/Refine Panorama kNN tests under AVX512_SPR dispatch (#5420)6653b98402Fix flaky TestIVFRaBitQ_AVX2::test_comparison_vs_ref_L2_rrot — apply cross-SIMD equivalence (#5325)aa9d2bf425De-flake test_flat_panorama across SIMD levels (#5361)395eaf8c6fDe-flake panorama / graph_based / hamming_utils tests (#5339)08cb1f2cf3De-flake test_refine_panorama.test_incremental_add (seed + tolerance) (#5347)8bfcb4e2a3De-flake test_meta_index.Shards.test_shards (loosen tie-churn tolerance) (#5348)54f83a4131De-flake bench_transposed_encode (CI timeout) (#5360)
1.14.3 - 2026-06-12
Added
261d8f25aaAdd IVFSQTurboQSearchParameters to __init__.pyi stub (#5304)684a32d040Add manual Faiss nightly workflow dispatch (#5300)10b6b2a1e5Add MetalIndexIVFFlat with IVF scan/merge kernels and expanded top-k support (#5202)74d36198faTurboQuant in ScalarQuantizer: full Algorithm 2 (QJL stage) with SIMD and optimizations (#5170)506600962fAdd Python HNSW tutorial (#5260)3cff0f419cAdd Sapphire Rapids optimizations for ScalarQuantizer (L2, IP) (#5173)46ef80db63Support IndexIDMap/IndexIDMap2 in reverse_index_factory (#5266)420158b10eAdd VPOPCNTDQ-based HammingComputer for Sapphire Rapids+ (#5183)d8f1c2716dImplement NEON-based FINE_SIZE=2 specializations for Index2LevelDecoderImpl and IndexPQDecoder (#5262)0951b5337bSupport user provided blas library (#5189)215740ecc3SVS static vamana support (#5224)d24ad6ef5bAdd is_similarity mode to HNSW (#5246)aa332cd5f0Implement NEON-based FINE_SIZE=2 specializations for Index2LevelDecoderImpl and IndexPQDecoder (#5255)5d9aae6ee8Add faiss-gpu pip wheel packaging (#5131)6f1cf64531Add VPOPCNTDQ-based RaBitQ kernel for Sapphire Rapids+ (#5149)
Changed
262fc3c7a2Re-enable musllinux wheels for faiss-cpu (#5299)1cdc3709c6Run CI on push to main to refresh ccache cache (#5291)379ee758b1Reserve VisitedTableSet capacity to avoid rehashes during HNSW search (#5290)6513a2497cEnable Metal by default on Apple machines (#5280)fe46c3c804Validate bool fields during deserialization (#5279)480f917900Type imbalance_factor and wire the .pyi stub into the buck build (#5269)e60baeb7b6Templatize search_from_candidate_unbounded for VisitedTable devirtualization (#5270)c000190dc0Accelerate ScalarQuantizer::QT_bf16 with AVX512-BF16. (#4889)7504fc8ddeUpgrade CUVS Version to 26.06 (#5240)d12683c3b0facebook-unused-include-check in IndexBinaryIVF.cpp (#5263)99d9013e1ffacebook-unused-include-check in distances_simd.cpp (#5264)2f0368b620facebook-unused-include-check in hamming_avx2.cpp (#5265)0c72755eccRemove unused include of platform_macros.h in partitioning.cppe6b8f6de53IndexHNSW: use HNSW::is_similarity for IP/similarity metrics + tests (#5226)c0575f2c13avoid runtime checks in VisitedTable (#5234)1cb7601829Eliminate per-code denormalization in uniform SQ distance computation (#5166)f29d8621faRevert D106693266: Implement NEON-based FINE_SIZE=2 specializations for Index2LevelDecoderImpl and IndexPQDecoderef96e3d25eUpdating CI to ROCm 7 (#5196)f5217d7496facebook-unused-include-check in IndexBinaryHNSW.cpp (#5251)3e6ed99bbbfacebook-unused-include-check in IndexBinaryIVF.cpp (#5252)108868bfacReject null inner index in IDMap and BinaryFromFloat deserialization (#5239)a64b549676Add IndexLattice r2 limit to cap decode-cache build cost (#5238)09937153dcfaiss: Replace remaining get_single_code calls with ScopedCodes (#5248)910e435bccfacebook-unused-include-check in hamming_avx2.cpp (#5242)d581f2f840Use per-SIMD TU scan for standalone PQ (AVX2 gather inlining) (#5233)
Fixed
20afed0fa3make intentional cudaGetLastError() error-clears explicit ((void)) for clang21 -- fixes S674096 (#5302)e420e94ce6Move partitioning shifts tables to .rodata to fix non-AVX2 import SIGILL (#5298)15bd823837Fix cuVS nightly (#5273)17cc967d71Fix AVX512_SPR dispatch on AMD: require AVX512_FP16 CPUID (#5281)e69bfeed08Stabilize RaBitQ tests on AVX512_SPR by switching to cross-level equivalence (#5277)c4c651453bStub fixes: knn torch overload, ResidualCoarseQuantizer ctor, remove duplicate I/O defs (#5283)eb4c1eafe2Fix Windows ARM64 (MSVC) build broken by NEON SIMD templatization (#5274)ab632382d3Install missing InvertedListScannerStats.h header (#5268)140541590eFix broken fbcode//faiss/tests:test_index_binary - test_replicas (test_index_binary.TestReplicasAndS (#5258)34eb98936ffix(python): int64 coercions for MapLong2Long + InvertedLists DOWNCAST chain (#5257)d492af446efaiss: initialize ids_tab to -1 in Top1BlockResultHandler::begin_multiple (#5249)a4e417fed7Fix: static SIMD dispatch falls to scalar for avx512_spr/avx512/arm_sve builds (#5057)3edc6e1649Guard Panorama autovec pragmas against nvcc frontend (#5241)c7689c4d0cFix ODR violation in ScannerMixIn by adding SIMDLevel template parameter (#5148)ca87f41dfeOpen SIFT demo data in binary mode (#5213)
1.14.2 - 2026-05-21
Added
b7618fadc7Add SuperKMeans: faster k-means via ADSampling+PDX progressive pruning (#5168)66c9d08265Add SuperKMeans foundations: math primitives, PDX layout, SIMD kernelsdc7afcfdf0Support SVSVamana as IVF coarse quantizer via index_factory (#5175)7a8e4ddacaCI: cross-compile for riscv64 with RVV dynamic dispatch (#5184)03202795b6Introduce RVV (#5156)417c53e0ceAdd NoneSIMDLevel context manager for cross-level reference checks (#5158)46def46902Enable SVS IVF Index in FAISS (#4801)585ba7954aAdd pip install support via scikit-build-core + cibuildwheel (#4862)799bf3aaecIntroduce early stop facilities for IVF, attempt 2 (#5160)66cea52433Add Metal GPU backend for Apple Silicon (IndexFlat) (#5144)17fd3332c7Add database-parallel flat search for few-query workloads (#5000)c7f07bbc0aAdd C++ per-SIMD-level tests for distance utility functions (#5154)0242758a3dAdd bit-exact RQ encode cross-level test (#5155)2f68a37307Add per-SIMD-level tests for hamming.h utils + fix crosshamming bug (#5153)a7116ed4ecAdd TurboQuant (CPU) (#5049)11e5d39160Add optional persistent locks to IndexHNSW for incremental adds (#5031)e82aa28b83Add OMP exception capture helpers and migrate IndexIVF (#5111)6299bff1f6Add QT_0bit to ScalarQuantizer for centroid-only IVF distance (#5079)3030fe0635Add filtered search for cuVS indexes (#4858)f83ea51eaaSupport IVFRaBitQSearchParameters in RaBitQFastScan scanner (#5081)82a823513dAdd iterator callbacks for distance computation and heap admission (#5082)b068fd985aSupport IO_FLAG_MMAP_IFC on Darwin (#5058)113bf6ceacExpose fast_scan_code_size from non-IVF FastScan indices (#5077)786d993dbfExpose a fast scan code size from fast scan indices (#5064)95f1e45221OMP build diagnostics (#4842)c4ac852e5bAdd a balanced assignment function (#5050)8402a6b764Add unit tests for HNSW deserialization validation (#5033)1dc5e1fb60V2 enable specifying a subset of SIMD levels that are implemented at dispatching time. (#4959)e6f5c0c9a9Add SIMD dynamic dispatch migration guide (#4973)8177a3bca6Add nvidia-smi diagnostic call (#4960)67fc664fe0Add CappedInvertedLists for per-list size limiting (#4880)e57a8939c9introduceSingleQueryResultCollectHandler(#4926)748c0311e4HNSW: add prune_headroom to avoid O(n^2) pruning/locking, headroom test (#4847)1e4d2271a6Introduce an early stop threshold for Kmeans (#4894)4a0fba1fe2Add FastScanCodeScanner dispatch boundary with per-SIMD TUs (#4897)0fcba2284cAdd sentinels to index format enums. (#4907)40480fb303Support limits on index deserialization loops — useful for tests (#4902)1e4544a37eAdd defaulted SIMDLevel template parameter to handler and scaler types (#4867)abdd37bd96Add Pixi installation option to docs (#5214)
Changed
9d5491a117Templatize SIMDResultHandler on SL, mark handle() final (#5223)b63f236a52Upgrade GitHub Actions CI from CUDA 12.6 to CUDA 13.2 (#5207)a9f5baa58cMove RISC-V fast_scan forwarders to dedicated impl-riscv.cpp (#5216)8932716646Validate SVS storage_kind via shared helper at all deserialization read sites (#5204)bc490b56b0Make IVFPQSearchCagraConfig dtype fields settable from Python (#5191)ffd3727d48Update pattern for index factory string with SVSVamana (#5201)f37041d073Extract Metal shaders to standalone .metal file with kernel wrapper class (#5167)d98364eb49perf: reserve() to avoid rehashing/reallocation (#5193)4eee3d7859Add tolerance and assertion log to test_OIVFPQ (#5188)2322afd2d8faiss: parallelize post-BLAS reduction loop and end_multiple() in result handlers (#5185)967eda65deReplace FAISS_ASSERT with FAISS_THROW_FMT for unsupported SVSStorageKind (#5182)715725df36Enable verbose mode for TestPyPI publish step (#5181)5e123115f1Filter wheel artifacts before publishing to PyPI (#5179)28b2b66cf2Inline PQ code distance kernels into scanner TUs (#5159)c41405d525Enforce minimum training set size for ScalarQuantizer, check nullptr (#5141)44c1972aecEnable ccache in GitHub Actions cmake builds (#5157)e09de2d070Harden compute_query_factors: add preconditions, handle aliasing, remove dead checks6a9936c60dHoist per-iteration vector allocations in IndexIVFRaBitQFastScan::compute_LUTc3460c980bConvert binary index Hamming callers to dynamic dispatch (#5071)ecac6511a2Convert hamming.cpp public API to dynamic dispatch (#5070)8d1b964c11Enable dynamic dispatch build on Windows (#5127)a25bcb1e22Rely on cuVS for default values (#5140)06228410c6Panorama Optimizations (#5041)f4338ade1bParameterize existing tests with @for_all_simd_levels (#5134)9d567497ecWire 512-bit QBS kernels into fast scan DD dispatch (#5075)bdf877f90cfacebook-unused-include-check in IndexNNDescent.cpp (#5132)632427fd0dfbcode/faiss/invlists (#5048)e23c66175dReplace dispatch_HammingComputer with with_HammingComputer (#5126)ed7e1f2435Hoist SIMD dispatch outside loops in 4 call sites (#5074)582246b6bdRemove use of __AMDGCN_WAVEFRONT_SIZE macro with it being deprecated in ROCm 7 (#4619)2dff119f13Add braces around single-line control flow statementscc0c087548Hoist SIMD dispatch out of approx_topk hot loops (#5073)18f93fd82fReplace SSE3 intrinsics in Index2Layer with portable scalar code (#5076)42765abc00Optimize RaBitQ FastScan LUT construction for high-dimensional data (#5110)ec5e70c655Optimize multibit sign-bit unpacking in RaBitQ FastScan handlers (#5097)3f127ee3baThread qb/centered search params through FastScan LUT and handler (#5095)3c19c52ca0Use std:: qualified math functions to avoid float-to-double promotion (#5088)48d2b0c946Replace typedef with using declarations (#5086)e12debcb61Remove extra semicolons after inline member function definitions (#5085)5679d3ad42HNSW Cagra base-level entrypoint sampling parallel (#5068)c4efc42219Remove bare simdlib type aliases from simdlib_dispatch.h (#5069)4a63c9e415Convert partitioning to dynamic dispatch (#5062)f226be432cRoll out @for_all_simd_levels to key test files (#5061)afd6949377fbcode/faiss/impl/HNSW.cpp (#5059)658c4340c0Replace bare assert() with FAISS_THROW_IF_NOT in core index files (#5052)364749e886Re-enable ROCm runner for AMD GPU CI (#4854)faeac8636cUpdate outdated C++17 and Python 2 references (#5045)77e602870bUse HTTPS for GitHub links in README (#5043)91843bdbd3Use explicit ISA flags instead of -march/-mtune=sapphirerapids (#5034)acac823db4Merge .gitignore updates from faiss-gpu-cu132 into main (#4996)8d8881ee3fMake distance_compute_blas_threshold dimension-aware (#5022)553c78b256HNSW SIMD dispatch (#5015)499b4885b8close the loop on ivf rabitq fast scan filter integration (#5026)aef066ac0eSVS 0.3.0 (#4999)cc34603106reuse unpack buffer in multibit IVFRaBitQFastScan refinement (#5003)d81584d548Update Python type stubs: fix class hierarchy and add missing base classes (#5004)d1c432fb5fConvert rabitq_simd.h to runtime SIMD dispatch (#4912)6bca9613b7Convert distances_fused/ to runtime SIMD dispatch (#4911)04d0d56d0efacebook-unused-include-check in distances_simd.cpp (#5013)7eb05f01fafacebook-unused-include-check in partition.cpp (#5012)7e04fa2621Update Python type stubs (__init__.pyi) to match current API (#4998)db0e798d5aUse omp_get_max_threads() for OpenMP thread count (#4991)9af8384f14Bump openblas from 0.3.30 to 0.3.32 in conda recipes (#4994)c048917dcdEnable quieting FAISS warning "inverted lists not stored" (#4964)b2ddb465bfLoosen SVS findpackage version requirement (#4969)d8c3d26130Upgrade to C++20 for CUVS (#4881)94f2b51fdbRename train() with queries to train_with_queries (#4955)02d609caffUpgrade cuVS Version to 26.02 (#4945)55a47c927cUpgrade cuVS Version to 26.02, switch various BUCK files over to 26.02 (#4788)0d147a78bcMake READVECTOR byte limit configurable (#4928)9962fbec6eHNSW: narrow critical section during add to avoid lock contention (#4915)b1feeb79f8Convert approx_topk and residual_quantizer_encode_steps to SIMDLevel dynamic dispatch (#4923)58a57e6bcaRe-enable backwards compatibility tests for rabitq now that 1.14.1 released (#4924)5dcef1858dRefactor binary HNSW stats to use OpenMP reduction instead of destructor sync (#4910)d8c1a9785fmove distances implementation into SIMD specific compile units (#4906)ea11f0ef9cSwitch all search paths to FastScanCodeScanner and remove make_knn_handler (#4904)57190f91cdWire RaBitQ search through FastScanCodeScanner dispatch (#4903)79e8acb072Parallelize compute_residuals in IndexIVFPQ (#4654)eddea2a607Extract RaBitQ result handler to impl/fast_scan/ (#4895)734751a16fExtract PQ4 kernels to includable headers in impl/pq_4bit/ (#4868)bb298a2323convert simdlib in distances_simd.cpp (#4884)8d8268c8aeTemplatize simdlib types on SIMDLevel (#4866)c74809a7c6Improve exception safety for the 'own_fields'/allocation pattern (#4864)c6cf004eceuselevelbut not0in neighbor_range(i, level, &begin, &end) (line 198) (#5005)
Fixed
cb69d7c566Fix Dq=None crash and np.empty nondeterminism in search_preassigned wrappers (#5221)5c92c5c1eeFix flaky test_hnsw smoke test by increasing efSearch (#5222)8d3cc92536Fix clone_index null return for IndexRowwiseMinMax (#5220)ff1d543977Fix python_unnecessary_generator_set_comprehension issues in faiss/tests/test_fastscan_filter.py (#5215)e2359156e0Fix FastScan DD regression by threading SIMD level through kernel functions (#5210)172324aea6Fix IDSelectorBitmap conversion to cuVS bitset (#5211)6bd749e39bFix IDSelector leak via SearchParameters.sel setter (#5208)6376bc35e3Fix CI: (cuVS) conda shards cache lock, (ARM) bump openblas, (SVS) fix LeanVec double-destruction (#5209)4b5a73577eFix python_unnecessary_generator_set_comprehension issues in faiss/.../bench_fw/optimize.py (#5205)6789bf5eb7Validate IndexIDMap id_map and inner-index ntotal consistency to prevent search-time null deref (#5203)f750815512Pin MKL to <2026 to avoid soname mismatch with pytorch (#5192)bb2ce7137dFix 7 broken tests (#5197)f323c0fa11Fix backward compat test (#5195)23cd94cd51Reduce BinaryCagra test parameters to prevent CI timeouts (#5194)85fc627c1eValidate ProductQuantizer M*ksub during deserialization to prevent oversized allocations (#5187)6cef1bb08cFix cuVS and ROCm CI conda environment failures (#5180)4a471eebf9Pin conda <25.7 to fix Windows build (#5176)a9c0d4187bWork around GCC 12 miscompilation of AVX2 histogram (#5124)40a8cc0034Fix lints associated with early stop facilities for IVF (#5172)1e69d5ab20Fix peak-memory spike when loading IVF invlists via IO_FLAG_MMAP_IFC (#5122)9942229393Fix add_sa_codes silently accepting non-int64 ids, corrupting stored labels (#5171)c5ddbc7104c_api: fix IndexShards own_indices getter/setter name mismatch (#5165)8380e2543dFix avx512 unit test (#5161)71448c07d3Fix issue with svs tests (#5162)6c70444d08Validate code_size during deserialization to prevent oversized allocations (#5151)9dbb81ca9dSet own_fields after reading Index2Layer sub-quantizer during deserialization (#5147)01b22b4cc9Fix memory leak warning for unordered_multimap in IndexIVFFlatDedup Python binding (#1667) (#5145)130fc2481aFix flaky test (#5150)dfce6e948eFix OMP exception safety in IndexHNSW search (#5133)c6273349f9Fix sa_decode offset bug and integer overflow in IndexRefine (#5143)1b4b995b97Fix implicit integer precision loss from 64-bit to 32-bit (#5091)b0568942efFix miscellaneous lint warnings (#5093)ed11f283d6Fix broken fbcode//faiss/tests:test_contrib - test_checkpoint (test_contrib.TestBigBatchSearch) (#5139)277c53d299Fix PCA training bug and memory safety issues in VectorTransform.cpp (#5138)8312540763Fix integer type truncation in IDSelectorBatch bloom filter mask (#5136)9cbc8da28eFix integer overflow and unbounded loop in Clustering.cpp (#5130)3c4056d822Fix race condition in HNSW::add_with_locks (#5129)6e64c5d687Bump GCC pin in faiss-gpu conda recipe to fix AVX2 SIMD miscompilation (#5125)58f6ebb7faAdd per-read byte limit to SVS ReaderStreambuf to prevent OOM from corrupt index data (#5118)817ecf9cd4Validate inverted list entry sizes against deserialization byte limit (#5117)e6be16241aValidate VectorTransform dimension consistency during deserialization (#5115)6707eacfafAdd is_trained check to IndexIVF search and range_search to prevent querying untrained indexes (#5114)349df7035bValidate IndexHNSW2Level storage type during deserialization and search (#5113)edd6f3b54cReject null quantizer during IVF index deserialization (#5112)27078c5280Fix OMP exception safety in IndexNNDescent and IndexNSG search (#5106)99db159afdFix OMP exception safety in IndexFlatCodes search (#5105)40ad64694dFix cuVS build (#5107)57bf47410fFix int/size_t signedness mismatches in HNSW add (#5116)f9f116d303Validate k_factor during deserialization to prevent search-time OOM (#5104)2d8232c981Set code_size on IVFRaBitQFastScanScanner (#5099)b923091c0dfix: GPU CAGRA copyFrom host-memory lifetime dependency and add regression test (#4968)796977a1abFix IndexBinaryMultiHash::reset() not clearing hash maps and avoid unnecessary copies (#5100)b86066a998fix: cagra bug (#4963)91f6636b2aAdd value-initialization to uninitialized member variables (#5089)61ed7dc917Fix orphaned OpenMP directives in IndexRowwiseMinMax training functions (#5096)740d3a3965Fix FastScan for indices without own inverted lists + performance optimizations in RaBitQ handler (#5080)7cc63422d7Suppress unused static constexpr variable warnings (#5087)aa3ce376ceFix race condition, memory management, debug output, and hashtable lookup in sorting.cpp (#5078)86d3371070Validate FastScan M2 consistency during deserialization (#5056)67f066f7a0Validate SVS storage_kind during deserialization (#5055)e899476cebDefault-initialize SVSStorageKind in IndexSVSVamana (#5054)c1e48a2ce1Add search-path bounds checking to IndexIVF::search1 (#5040)97d257433aFix correctness bugs in NNDescent Nhood copy/move operations and gen_random bounds (#5072)06ef481afaFix uncaught exceptions in IndexIVF::range_search_preassigned OpenMP region (#5053)255250985aFix bugs in NSG search_on_graph and sync_prune (#5063)7047dc5346Fix priority_queue constructor inheritance for Apple Clang on macOS (#5065)e0a1aec811Assorted Dynamic Dispatch cleanup fixes (#5060)25296bad4fFix type mismatch bug and remove dead code in IndexRowwiseMinMax::sa_decode_impl (#5051)7b2705c269Debug manifold crash with NaN (#5025)9d3f97e620Fix duplicate words and grammar typos across codebase (#5044)84262f09d4Fix d_out check bug and add descriptive error messages to VectorTransform assertions (#5047)ef28c6beb0Fix uncaught exceptions in IndexIVF::search_preassigned OpenMP region (#5037)8008ca2a70Fix deadly signal in to_svs_metric() for unsupported metrics (#5032)4b8da6820eFix IndexSVSVamana null-deref in deserialize_impl (#5029)ab3da522a4Cap ZnSphereCodecRec decode cache size (#5028)d68050d269Add missing input validation to IndexFlat::range_search and compute_distance_subset (#5038)c6fa50a451Validate IndexIDMap id_map size during deserialization (#5024)408786bec9Validate AdditiveQuantizer dimension consistency during deserialization (#5023)0ce4dfb206Fix AVX512_SPR build failure for 512-bit SIMD types (#5030)a308adae08Harden ScalarQuantizer deserialization validation (#5020)ab46dcbeaeValidate qbs at deserialization time in FastScan index formats (#5019)668da4a386Validate IndexBinaryHash b <= code_size*8 during deserialization (#5011)87bc9b0872Validate IndexFastScan quantizer state during deserialization (#5009)4c391564a6Validate codebooks size at deserialization time in read_AdditiveQuantizer (#5008)8c1f3f48d4read-heap-buffer-overflow (size 32) in float faiss::fvec_norm_L2sqr<>()226ccf3e84Fix OSX arm64 nightly: bump libopenblas from 0.3.30 to 0.3.32 (#5006)aeb170c15alarge-malloc (15023964028 bytes) in __sanitizer::RunMallocHooks() (#5018)8550f2304aValidate VectorTransform dimensions during deserialization (#5007)833d4aaf7bout-of-memory in __gnu_cxx::new_allocator<>::allocate() (#5014)d716be39edFix avx512_result_handlers build on aarch64 (#4965)18c85e17e1Add deserialization vector limit enforcement for ResidualCoarseQuantizer (#4997)b74f3cd8d9Validate IndexBinaryMultiHash b and nhash*b bounds during deserialization (#4984)b9f49601d1Add invlists null check to IndexBinaryIVF::search (#4980)ba1981ca4cAdd input validation to IndexBinaryHNSW search preconditions (#4979)d26c15d954Validate binary index consistency during deserialization (#4978)2c28ef5382Validate RaBitQ qb during deserialization (#4983)5a4d62146cdeadly-signal (vector::_M_default_append) in __clang_call_terminate (#4986)0759009bd7Fix compiler warnings for pip wheel builds (macOS + Windows) (#4989)8a80b3dd6esignal in faiss::ArrayInvertedListsPanorama::ArrayInvertedListsPanorama() (#4987)12675affbcout-of-memory in __gnu_cxx::new_allocator<>::allocate() (#4985)0a8e516058Fix HNSW Panorama Perf Bug (#4974)6dbf2713dbValidate VectorTransform data during deserialization (#4981)3f7938924dFix MSVC link failure: remove __restrict from fvec_madd specializations (#4972)d47b281578deadly-signal (vector::_M_default_append) in __clang_call_terminate (#4982)f851c54cd9large-malloc (6241124352 bytes) in __sanitizer::RunMallocHooks() (#4977)bd5ed00c38Validate inverted lists pointer in IndexIVF operations (#4951)398857b1ffHandle empty index in IndexHNSWCagra base_level_only search (#4950)d647b596e0Validate graph index data during deserialization (#4949)e5114c2368fix: resolve compiler warnings in binary and miscellaneous Index files (#4940)44f57ba4c9fix: resolve compiler warnings in top-level FAISS source files (#4943)b3a2914982fix: resolve compiler warnings in test files (#4944)88efcb981afix: resolve compiler warnings in core base classes and headers (#4933)7acc420929fix: resolve compiler warnings in inverted lists and cppcontrib (#4939)64a2122ef1fix: resolve compiler warnings in IO, result handlers, and misc impl (#4936)a05f13ff6afix: resolve compiler warnings in PQ, PreTransform, and Refine Index files (#4941)7645426ac3fix: resolve compiler warnings in IVF Index implementations (#4942)f5142bfc5dlarge-malloc (7046432072 bytes) in __sanitizer::RunMallocHooks() (#4967)4db01e3431fix: resolve compiler warnings in graph-based index implementations (#4956)ccc3cd619aValidate code vector sizes during index deserialization (#4948)ec30fb387cUse BitstringReader in IndexBinaryHash to avoid OOB reads (#4961)fa8ddd99a3Fix flaky test for Panaorama/regular IVFFlat equivalence (#4954)1e6729d53eValidate quantizer data sizes during index deserialization (#4947)62a1969098fix: resolve compiler warnings in distance and hamming utilities (#4937)645a742b51Re add cuvs to cmakelists.txt (#4953)5287db0537fix: resolve compiler warnings in graph-based index implementations (#4934)a48e45af3afix: resolve compiler warnings in quantizer implementations (#4935)32ca42f873fix: resolve compiler warnings in SIMD, sorting, and misc utilities (#4938)52d9fc7053Add overflow check in READVECTOR macro (#4946)0f7e65e53dEnforce memory limit in read_ProductQuantizer (#4930)9ea026cc93Validate codes vector size in BlockInvertedLists deserialization (#4920)a4385dfd07Validate n_per_block and block_size in BlockInvertedLists deserialization (#4919)cdb7254667Validate id_map size matches ntotal in IndexBinaryIDMap deserialization (#4917)05ca04e469Validate per-entry ilsz in read_binary_multi_hash_map (#4916)b023178c5dFix MSVC OpenMP build: use idx_t instead of size_t in parallel for loop (#4922)5b83ec6856Fix OpenMP critical section contention in IndexBinaryHNSW search (#4909)e96ba2d13cfix: decouple coarse quantizer from cuvs index reset (#4885)9d6b2e7b18Additional input validation for index deserialization (#4899)796bdf94a8Additional binary index input validation (#4898)d0434be649Fix cloning for IVFFlatPanorama (#4887)3e4c103d77Validate dynamic_casts during index load (#4883)47e53b4468Fix backward compatibility to use latest version (#4855)
Deprecated
812010fe19Remove flaky test (#5169)74dceee903Remove RaBitQStats debug counters from all RaBitQ handlers (#5102)000eec283aDelete old pq4_accumulate_loop files (replaced by dispatching.h) (#4905)
1.14.1 - 2026-03-04
Added
5cf2c4203fExpose IndexBinaryFlat to the C API. (#4834)db9ba35118add hadamard transformation as an index for IVF (#4856)
Changed
d2f8d35140removed conda-forge install documentation (#4843)c90c9dc544Update python to include 3.13 and 3.14 (#4859)8af77fe730SIMD-optimize multi-bit RaBitQ inner product (#4850)ccc934f586ScalarQuantizer: split SIMD specializations into per-SIMD TUs + DD dispatch (#4839)
Fixed
28f79bd98eFix SWIG 4.4 multi-phase init: replace import_array() with import_array1(-1) (#4846)
1.14.0 - 2026-03-02
Added
- Add PEP 561 Python type stubs for the faiss package (#4840)
- Add conda-forge channel to INSTALL.md install commands (#4819)
- Add post_init_hook call to Python init (#4795)
- Add ARM SVE support for distance functions (#4798)
- Add Dynamic Dispatch OSS CI workflow (#4779)
- Add IndexFlatIPPanorama (#4787)
- Add benchmark to measure the ResultHandler overhead (#4778)
- Demo for a diversity filter (#4765)
- Add SVS binary size comparison demo and documentation (#4777)
- Add InvertedListScanner support for IndexIVFRaBitQFastScan (#4760)
- Add comprehensive ScalarQuantizer correctness tests (#4766)
- add IDSelector for knn_extra_metrics() (#4753)
- Add early stopping to k-means clustering (#4741)
- Add k-means++ and AFK-MC² centroid initialization methods (#4740)
Changed
- ScalarQuantizer: refactor SIMDWIDTH int → SIMDLevel enum (#4838)
- Fold IndexIVFPQ scanner helpers into templatized lambdas (#4836)
- Temporarily disable RaBitQ FastScan from backward compatibility test (#4841)
- Eliminate flat_storage by embedding auxiliary data in SIMD blocks (#4816)
- Rework PQ code distance for Dynamic Dispatch (#4808)
- fbcode/faiss/impl (#4832)
- fbcode/faiss/utils/simd_impl (#4833)
- fbcode/faiss/IndexFlat.cpp (#4831)
- fbcode/faiss (#4829)
- Implement distance_to_code for IVFRaBitQFastScanScanner (#4822)
- distance_to_code for IVFPQFastScan invertedlistscanner (#4821)
- Make dispatch_VectorDistance more compact (#4820)
- Update callers to use read_index_up API (#4818)
- fbcode/faiss/utils/simd_impl/distances_avx2.cpp (#4813)
- fbcode/faiss/impl/PolysemousTraining.cpp (#4814)
- fbcode/faiss/utils/sorting.cpp (#4815)
- VisitedTable -> unordered_set if ntotal is large (#4735)
- resulthandlers with AVX512 (#4806)
- put dispatch one level above (#4802)
- dynamic dispatch distances_simd (#4781)
- Introduce Dynamic Dispatch infrastructure with SIMDConfig (#4780)
- make runtime template selection more compact (#4793)
- support SearchParameters for IndexBinary (#4761)
- Support sharding of RaBitQ indices (#4790)
- Refactor ScalarQuantizer headers to use SIMD wrapper types (#4772)
- Split ScalarQuantizer.cpp into modular headers (NOOP) (#4786)
- Move factory_tools to main library and fix unaligned SIMD store (#4782)
- inline scanning code for fast distance computations (#4785)
- Enable Faiss for internal use (#4737)
- Address review comments on SQ correctness tests (#4771)
- Enable use of svs runtime conda package instead of tarball (#4747)
- generic result handlers for most indexes (#4762)
- Use nth_element for median computation in IndexLSH (#4653)
- Change default qb from 0 to 4 in RaBitQ indexes (#4757)
- Move reorder_2_heaps() into Heap.h (#4752)
- Improve naming due to codemod. simd_result_handlers (#4351)
- Dot Product Support Similarity Metric for IndexIVFFlatPanorama (#4732)
- Panorama Refactor and Code Cleanup (#4728)
- Update serialization backwards compatibility test with panorama and rabitq (#4736)
Fixed
- Additional index deserialization validation (#4844)
- Validate HNSW levels array entries during deserialization (#4827)
- Additional memory exception handling fixes for index_read.cpp (#4837)
- Catch attempts to deserialize undefined MetricTypes (#4823)
- BlockInvertedListsIOHook::read(): Don't leak on exception. (#4824)
- Harden ZnSphere lattice codec against invalid parameters (#4826)
- Validate n_levels > 0 in Panorama (#4825)
- Additional hardening of index load path (#4817)
- Deploy std::unique_ptr<> in index_read.cpp for exception safety (#4809)
- Fix to graph deserialization (#4812)
- Harden deserialization against integer overflow and buffer overflows (#4811)
- Fix CMake/Buck build discrepancies (#4807)
- Fix NSG off-by-one neighbor ID check (#4804)
- Fix CMake static targets missing SIMD sources and definitions (#4800)
- Enable -Wstring-conversion in faiss/PACKAGE +1
- Fix backward compat CI: use isolated conda environments (#4799)
- Fix string-conversion issue in faiss/impl/lattice_Zn.cpp +1 (#4794)
- Fix build pr 4761 (#4792)
- Fix: Remove -Wignored-attributes warning in mapped_io.cpp (#4775)
- Fix string-conversion issue in faiss/IndexHNSW.cpp
- Fix: Remove -Wswitch-unreachable warning in generic-inl.h (#4776)
- Fix string-conversion issue in faiss/invlists/OnDiskInvertedLists.cpp +5 (#4791)
- Fix OSX arm64 nightly by disabling hidden visibility on macOS (#4789)
- Fix FindMKL.cmake to detect Intel oneAPI MKL (2021+) (#4769)
- Fix lint errors in SVS integration code (#4774)
- Fix typos in demos, benchs, and other directories (#4743)
- Fix weak external symbol leakage (#4758)
- Fix compilation on macOS ARM64: Use faiss::idx_t instead of long test_hamming (#4755)
- Fix multi-bit RaBitQ IP metric filtering and f_add_ex computation (#4754)
- Fix IP metric distance computation in multi-bit RaBitQ (#4751)
- Reduce memory usage in timeout callback tests (#4745)
- Fix c++20 compilation in OSS Faiss for OSX ARM64 (#4733)
Deprecated
- Remove deprecated RAFT headers (#4731)
1.13.2 - 2025-12-19
Added
033e6acc69Add RaBitQStats for tracking two-stage search filtering effectiveness (#4723)64a236744bAdd multi-bit support for IndexIVFRaBitQFastScan (#4722)cd2af8bc37ImplementIndexRefinePanorama(#4683)18d20febb5Add multi-bit support for IndexRaBitQFastScan (#4721)7372bc7982ReapplyIndexHNSWFlatPanoramawith backward compatible serialization (#4692)1721ebff6dAlso add backwards compatible check for binary (#4714)98bf8b3808Implement remainingIndexFlatPanoramafunctions (#4694)a695814f4cEnable Intel ScalableVectorSearch support (#4548)d81a08e240Index serialization backward compatibility test (#4706)
Changed
9a6c02b061Rename RaBitQ factor structs for clarity and reorganize tests (#4730)281a999abaEnable cuVS in Faiss (#4729)6452d192cfUpdate SVS binary to v0.1.0 (#4726)1ea99d8073clean up serialization tests (#4700)89dd5a7b4eEnable-Wunused-exception-parameterin faiss/PACKAGE +1
Fixed
5b19fca3f0Allow over-writing centroid files to mitigate [S603653] (#4725)337dfe8043Fix typos in demos, benchs, and other directories" (#4719)aea2b6bc85fix(docs): broken link to SVS in INSTALL.md (#4724)4627695179Fix SVS Python tutorial (#4720)ac2e3abe38Update c_api install docs for CMake build system (#4702)abc294419afix broken test due to renaming to avoid lint (#4712)3d4d59fc3bFix typos in demos, benchs, and other directories (#4709)
1.13.1 - 2025-12-02
Added
- add dataset DINO10B (#4686)
- Implement multi-bit RaBitQ quantization (nb_bits 2-9) (#4679)
- Add copyright header to test_flat_l2_panorama.py (#4688)
- Integrate Panorama into
IndexHNSWFlatPanorama(#4621) - Implement
IndexFlatL2Panorama(#4645)
Changed
- clamping variable used for computing percentile (#4687)
- Remove unused variable
- Revert D85902427 (#4690)
- Optimize ScalarQuantizer (#4652)
- Update comment to clarify useFloat16 in GpuClonerOptions.h (#4682)
- facebook-hte-SharedPtrFromNew in StandardGpuResources.cpp (#4680)
Fixed
- Fix deprecated this capture in faiss/gpu/GpuIcmEncoder.cu +1
- Refactor sharding to not oom (#4678)
- Fix significant GOMP barrier overhead in exhaustive_L2sqr_blas. (#4663)
- Fix typos in tests and contrib directories (#4672)
1.13.0 - 2025-11-11
Added
2cf82cabf2Implement PanoramaStats (#4628)859127cd0bImplement serialization forIndexIVFFlatPanorama(#4636)7744239dc5Add getter/setter for balanced_bins in PCAMatrix C API issue #4617 (#4630)e6510bd004Add immediate notification when autoclose label is applied (#4624)f983e3ab69Integrate Panorama intoIndexIVFFlatPanorama(#4606)3af3e00103Implementation of IndexIVFRaBitQFastScan (#4596)f58fd4c8caAdd InvertedListScanner for IVFPQFastScan (#4537)01d394e583RaBitQ Fast Scan (#4595)752832cac9Add missing Thrust includes (#4597)6470b8d9d0Simplify RaBitQ slightly, improving speed and recall (#4550)bc3e3a1ef1RaBitQ: SIMD helper simplification, use faster popcount for doc-side sum (#4573)b7c88eaff8Microbenchmarks for rabitq_simd.h (#4572)786e4051fcRabitQ test coverage for SIMD codepaths (#4571)fa5532734eAdding Idx tags in extended APIs (#4532)fbbb290a57Set NN Descent Metric From CAGRA Params (#4540)514b44fca8OSS changes: Enable ROCm to work with Faiss on BUCK (#4485)
Changed
a9cc039aedUpgrade cuVS to 25.10 and build pkg with CUDA=12.6 (#4639)6ca45d23a7Optimize IVFRaBitQFastScan query factors: nnlist to nnprobe (#4643)49df7737f8Update GitHub workflow to use clang-format-21 (#4644)a0bd7aac69clang-format | Format fbsource with clang-format 21.595c8aa8a2Allow unaligned fast-scan (#4623)4fab13c9c6Upgrade Faiss OSS side to numpy2 (#4523)2505168e18Expose Remaining IVF-PQ params for CAGRA (#4593)1ed2611c03Remove unused imports from faiss directory files (#4565)e5de66e2c2Use Development.Module component in CMake FindPython (#4549)3c7235c6c7Update Install Docs with Correct cuVS Version (#4547)f361df8385Use c++11 only in headers (#4421)dd637c98d6Change extended API suffix fromExto_ex(#4530)
Fixed
ff1a2d4f6eFix typos in core library (root + impl/) (#4670)d94c33065achore: fix typos in some files (#4669)5d9f8d484cFix additional typos found in second review (#4667)451ca8429dFix typos in documentation, tutorials, and C API (#4666)d0d066e430Fix typos in comments and documentation (#4664)3ffec120feFix typos in comments and documentation (#4662)2af54a46bbFix typos in comments and documentation (#4661)ec877e794eFix typos in comments and documentation (#4660)3de200f5aftry to fix nightly (#4657)18f5574a50typo: SIFT -> GIST (#4642)675661b4d3Fix IndexIVFRaBitQFastScan nprobe handling in search_with_parameters (#4629)64b1f3a04cFix autoclose workflow - add GH_REPO for immediate notificatione5fee1015aFix IVFFlatPanorama bench (#4622)70df32b2e9Fix IndexIVFRaBitQFastScan by overriding search_preassigned (#4618)61c1c76929Fix nightly build on windows due to c++20 initializer (#4612)513eabc91dReplace static constexpr with inline constexpr in header (#4613)97dc014472fix: initializing order of gpu compile options (#4581)dbc7550615Fix ARM64 compilation error in IndexRaBitQFastScan (#4611)484dd97ce0Add IndexBinaryIDMap2 support to index binary factory (#4603)041ac84318Fix memory bloat in IndexBinaryHash search due to argument copying in dispatch_HammingComputer (#4600)2964a374dbFix nightly by updating mkl version (#4604)7f7b518df5Unable to import faiss in python in AIX (#4602)266b71285aAdded code to catch 'ModuleNotFoundError' exception (#4577)3b14dad6d9Fix AIX compilation issue while building python extension (#4587)1deba7b90fAdd attribute validation to prevent silent failures in SWIG wrappers (#4583)3671c61af1more formatting (#4568)d98ff432b9Fix FAISS build with ROCm7 (#4567)50b3eb48d2add "override" to overriden destructors (#4566)2135e5a28dadd missing explicit specifier (#4564)0031d61da8Revert D80734790 (#4563)ee6b7ddd9dadd #pragma once to some header files (#4562)8b83ebbf62fix python blank space lints (#4560)f46ac530b5Fix missing object reference in Faiss python wrapper for IndexIVFRaBitQ (#4554)69f1ac0f0fresolve Open Source requirement violations (#4551)dca887a656Remove unused include from IVFlib.cpp (#4534)3b3bf5e4e5bugfix: add a macro guard for avx512 operation (#4539)fe5e77f1cbRemove unnecessary std::move on temporaries to fix-Wpessimizing-movewarnings in DeviceTensor-inl.cuh (#4545)2fca92f477fix test_binary_cagra tests failure (#4546)8d9d3bea7cRemove unused includes from AutoTune.cpp (#4533)75be84d086Remove unused imports from fbcode/faiss (#4543)5c61ed8c94Fix E302 lint errors: Add required blank lines before class definitions (#4541)daceaac99areplace type(x) == y with isinstance(x, y) (#4542)
Deprecated
2705d7a5d3Delete rocm runner for now until it is fixed (#4658)f9ccd582f9Remove invalid assertion checking #neighbors == graph degree (#4528)
1.12.0 - 2025-08-11
Added
- Adding
Exsuffix for extended API (#4512) - SIMD optimization RaBitQ (#4515)
- Binary CAGRA with NN Descent (#4445)
- BinaryHNSWCagra Struct; Allow base_level_only (#4478)
- Added libgflags-dev to Dockerfile (#4460)
- try to add nightly conda publish for Faiss classic GPU with CUDA 12.4 (#4442)
- Add support for IndexIDMap with Cagra fp16 (#4411)
- Faiss + Cuvs Example Notebook (#4434)
- Common ancestor to top-k result handlers (#4414)
- Add rabitq to reverse factory string so telemetry wrapper will log it (#4428)
- Add option to link cuda statically (#4422)
- support extra metrics in IVF (#4409)
- Support decode_vectors (sa_decode but no decode_listnos) in multiple IVF index (#4400)
- Add workaround to check SVE support when numpy.distutils is not available (#4416)
- Dsweet/gowers distance (#4371)
- cuVS Cagra FP16 support (#4384)
- Add cuVS filter conversion utility (#4378)
- GpuIndexBinaryCagra - Binary CAGRA index (#4331)
- Add guarantee_connectivity parameter to GpuIndexCagra (#4388)
- Add Virtual Destructor to FlatIndex Class (#4381)
- Adding unit tests for supporting pre-built KNN while using
IndexNSG(#4368) - Pass in "own_invlists" to ivf index constructor (#4353)
- Add new centroid_id_column to support previous_assignment_table (#4343)
- Copy IVF Centroids to Host for CPU Quantizer (#4336)
- Expose IndexBinaryIVF to C API (#4302)
- Add rabitq bench to source control (#4307)
Changed
- Remove unused cmath include from IndexPQ.cpp (#4518)
- Allow Odd Degree Binary CAGRA graph to HNSW conversion (#4516)
- Remove unused cassert and cmath headers from Index2Layer.cpp (#4514)
- Remove unused headers from AutoTune.cpp and clone_index.cpp (#4513)
- Remove unused import header from IndexBinaryHNSW.cpp (#4507)
- Remove unused import header from IndexBinaryHash.cpp (#4506)
- Remove unused import header from IndexIDMap.cpp (#4505)
- Remove unused import header from AutoTune.cpp (#4504)
- Make GpuIndexCagra reuse existing memory block when converting to CPU index (#4477)
- Remove unused standard library includes from index_io.h (#4495)
- Remove unused standard library includes from Index.h (#4494)
- Remove unused standard library includes from IndexBinary.h (#4493)
- Remove unused platform_macros.h include from MetricType.h (#4490)
- fbcode//faiss:faiss (#4462)
- fbcode//faiss/gpu:faiss (#4463)
- fbcode//faiss/gpu/test:test_utils (#4464)
- BW compatibility for read & write with
numeric_type_in cagra (#4441) - Upgrade cuVS version to 25.08 (#4394)
- Improve naming of the residual_quantizer_encode_steps.cpp file (#4433)
- Github actions: upgrade windows-2019 to windows-2022 (#4417)
- Update the dependency for submitit in faiss_bench_fw (#4410)
- Increase top-k limit on GPU for cuVS (#4325)
- Let IndexShards Pass down SearchParams (#4387)
- Change uint8_t* => const uint8_t* in faiss::ZeroCopyIOReader (#4376)
- Set code_size for more InvertedListScanner implementations (#4365)
- Improving variable name post codemod changes (#4369)
- Improve naming due to codemod (#4367)
- Use packaging.version for correct version parsing (#4330)
- Update Swig File for CAGRA Params (#4314)
Fixed
- Fix the warning that numpy.core._multiarray_umath is deprecated and has been renamed to numpy._core._multiarray_umath (#4501)
- Fix inline code syntax (#4437)
- Bug fix for faiss_Index_sa_code_size (#4492)
- Fix CQS signal modernize-use-using in fbcode/faiss/tests [B] [B] (#4483)
- Fix CQS signal modernize-use-using in fbcode/faiss/tests [B] [A] (#4484)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/utils [B] [B] (#4479)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/utils [B] [A] (#4480)
- Fix CQS signal modernize-use-using in fbcode/faiss/tests [A] (#4476)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/utils [A] (#4475)
- Fix ALL nightlies (#4471)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/invlists (#4467)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/perf_tests (#4458)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/tests (#4457)
int8support for cuVS cagra (#4439)- Fix indexes after fp16 change (#4452)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss (#4454)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/gpu (#4453)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss (#4451)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/benchs (#4449)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/impl (#4447)
- Revert D78330300 (#4448)
- Fix CQS signal readability-braces-around-statements in fbcode/faiss/tutorial (#4446)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/utils (#4435)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/perf_tests (#4443)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/impl (#4436)
- Remove Debug Statement (#4425)
- Fix invalid long_description in setup.py (#4398)
- Fix building on mingw (#4420)
- fix: add avx2 in python if avx512 enabled (#4419)
- IndexFlat: Reconstruct validate if key < ntotal (#4415)
- cmake: disable installing external documents under docs/faiss (#4406)
- Pin openblas 0.3.30 to fix nightly breakage (#4404)
- Add override to IndexBinaryCagra (#4401)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/gpu (#4390)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/impl (#4395)
- Fix unreachable-break issue in faiss/IndexAdditiveQuantizer.cpp +1 (#4391)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/utils (#4389)
- fix IndexIVFFastScan ndis/nlist stat (#4383)
- fix: update broken links (#4382)
- Fix incorrect constructor docstring for IndexScalarQuantizer (#4350)
- Fix CQS signal facebook-unused-include-check in fbcode/faiss/tests (#4375)
- Fix input param for IndexIVFScalarQuantizer in index_factory (#4358)
- Fix openMP index bug (#4348)
- Fix CQS signal. Id] 95408353 -- performance-faster-string-find in fbcode/faiss (#4345)
- cmake: install missing header
impl/zerocopy_io.h(#4328) - Fix CQS signal. Id] 62183176 -- readability-redundant-string-init in fbcode/faiss/impl (#4332)
- Fix CQS signal. Id] 57328835 -- performance-unnecessary-value-param in fbcode/faiss/impl (#4329)
- Fix IndexBinaryIVF::merge_from (#4305)
- FreeBSD compatibility patch (#4316)
Deprecated
- Deprecate CUDA 11 from Faiss nightly and releases (#4496)
- Deprecate CUDA 11 nightly, add 12.4 to build-release, fix cuvs nightly (#4482)
- Remove cuVS CUDA 11.8 CI (#4444)
- remove ABS_INNER_PRODUCT metric (#4408)
- Disable failing test until we support CUDA 12.8 in CI (#4392)
- Disable flaky ivfflat test_mem_leak
1.11.0 - 2025-04-24
Added
- RaBitQ implementation (#4235)
- Add RaBitQ to the swigfaiss so we can access its properties correctly in python (#4304)
- Add date and time to the codec file path so that the file doesn't get overridden with each run (#4303)
- Add missing header in faiss/CMakeLists.txt (#4285)
- Implement is_spherical and normalize_L2 booleans as part of the training APIs (#4279)
- Add normalize_l2 boolean to distributed training API
- re-land mmap diff (#4250)
- SearchParameters support for IndexBinaryFlat (#4055)
- Support non-partition col and map in the embedding reader (#4229)
- Support cosine distance for training vectors (#4227)
- Add missing #include in code_distance-sve.h (#4219)
- Add the support for IndexIDMap with Cagra index (#4188)
- Add bounds checking to hnsw nb_neighbors (#4185)
- Add sharding convenience function for IVF indexes (#4150)
- Added support for building for MinGW, in addition to MSVC (#4145)
Changed
- Skip mmap test case in AIX. (#4275)
- Handle insufficient driver gracefully (#4271)
- relax input params for IndexIVFRaBitQ::get_InvertedListScanner() (#4270)
- Allow using custom index readers and writers (#4180)
- Upgrade to libcuvs=25.04 (#4164)
- ignore regex (#4264)
- Publish the C API to Conda (#4186)
- Pass row filters to Hive Reader to filter rows (#4256)
- Back out "test merge with internal repo" (#4244)
- test merge with internal repo (#4242)
- Revert D69972250: Memory-mapping and Zero-copy deserializers
- Revert D69984379: mem mapping and zero-copy python fixes
- mem mapping and zero-copy python fixes (#4212)
- Memory-mapping and Zero-copy deserializers (#4199)
- Use
nullptrin faiss/gpu/StandardGpuResources.cpp (#4232) - Make static method in header inline (#4214)
- Upgrade openblas to 0.3.29 for ARM architectures (#4203)
- Pass
store_datasetargument along to cuVS CAGRA (#4173) - Handle plain SearchParameters in HNSW searches (#4167)
- Update INSTALL.md to remove some raft references, add missing dependency (#4176)
- Update README.md (#4169)
- Update CAGRA docs (#4152)
- Expose IDSelectorBitmap in the C_API (#4158)
Fixed
- fix: algorithm of spreading vectors over shards (#4299)
- Fix overflow of int32 in IndexNSG (#4297)
- Fix Type Error in Conditional Logic (#4294)
- faiss/gpu/GpuAutoTune.cpp: fix llvm-19-exposed -Wunused-but-set-variable warnings
- Fix nightly by pinning conda-build to prevent regression in 25.3.2 (#4287)
- Fix CQS signal. Id] 88153895 -- readability-redundant-string-init in fbcode/faiss (#4283)
- Fix a placeholder for 'unimplemented' in mapped_io.cpp (#4268)
- fix bug: IVFPQ of raft/cuvs does not require redundant check (#4241)
- fix a serialization problem in RaBitQ (#4261)
- Grammar fix in FlatIndexHNSW (#4253)
- Fix CUDA kernel index data type in faiss/gpu/impl/DistanceUtils.cuh +10 (#4246)
- fix
IVFPQFastScan::RangeSearch()on theARMarchitecture (#4247) - fix integer overflow issue when calculating imbalance_factor (#4245)
- Fix bug with metric_arg in IndexHNSW (#4239)
- Address compile errors and warnings (#4238)
- faiss: fix non-templated hammings function (#4195)
- Fix LLVM-19 compilation issue in faiss/AutoTune.cpp (#4220)
- Fix cloning and reverse index factory for NSG indices (#4151)
- Remove python_abi to fix nightly (#4217)
- Fix IVF quantizer centroid sharding so IDs are generated (#4197)
- Pin lief to fix nightly (#4211)
- Fix Sapphire Rapids never loading in Python bindings (#4209)
- Attempt to nightly fix (#4204)
- Fix nightly by installing earlier version of lief (#4198)
- Check for not completed
- Fix install error when building avx512_spr variant (#4170)
- fix: gpu tests link failure with static lib (#4137)
- Fix the order of parameters in bench_scalar_quantizer_distance. (#4159)
Deprecated
- Remove unused exception parameter from faiss/impl/ResultHandler.h (#4243)
- Remove unused variable (#4205)
1.10.0 - 2025-01-30
Added
- Add desc_name to dataset descriptor (#3935)
- implement ST_norm_from_LUT for the ResidualQuantizer (#3917)
- Add example of how to build, link, and test an external SWIG module (#3922)
- add copyright header (#3948)
- Add some SVE implementations (#3933)
- Enable linting: lint config changes plus arc lint command (#3966)
- Re-add example of how to build, link, and test an external SWIG module (#3981)
- demo: IndexPQ: separate codes from codebook (#3987)
- add all wrapped indexes to the index_read (#3988)
- add validity check AlignedTableTightAlloc clear method (#3997)
- Add index binary to telemetry (#4001)
- Add VectorTransform read from filename to the C API (#3970)
- Added IndexLSH to the demo (#4009)
- write distributed_kmeans centroids and assignments to hive tables (#4017)
- introduce data splits in dataset descriptor (#4012)
- Faiss GPU: bfloat16 brute-force kNN support (#4018)
- ROCm support for bfloat16 (#4039)
- Unit tests for distances_simd.cpp (#4058)
- add cuda-toolkit for GPU (#4057)
- Add more unit testing for IndexHNSW [1/n] (#4054)
- Add more unit testing for IndexHNSW [2/n] (#4056)
- Add more unit testing for HNSW [3/n] (#4059)
- Add more unit testing for HNSW [4/n] (#4061)
- Add more unit tests for index_read and index_write (#4068)
- Add testing for utils/hamming.cpp (#4079)
- Test sa_decode methd on IndexIVFFlat (#4098)
- Conditionally compile extras like benchmarks and demos (#4094)
- Add a new architecture mode: 'avx512_spr'. (#4025)
- Use _mm512_popcnt_epi64 to speedup hamming distance evaluation. (#4020)
- PQ with pytorch (#4116)
- add range_search() to IndexRefine (#4022)
- Expose accumulate_to_mem from faiss interface (#4099)
- Windows Arm64 support (#4087)
- add test to cover GPU (#4130)
- Added support for building without MKL (#4147)
Changed
- Move train, build and search to their respective operators (#3934)
- PQFS into Index trainer (#3941)
- Place a useful cmake function 'link_to_faiss_lib' into a separate file (#3939)
- Cache device major version value to avoid multiple calls of getCudaDeviceProperties (#3950)
- Consolidate set_target_properties() calls in faiss/CMakeLists.txt (#3973)
- Removing Manual Hipify Build Step (#3962)
- Allow to replace graph structure for NSG graphs (#3975)
- Adjust nightly build (#3978)
- Update RAFT CI with pytorch 2.4.1 (#3980)
- Moved add_sa_codes, sa_code_size to Index, IndexBinary base classes (#3989)
- Update autoclose.yml (#4000)
- Migrate from RAFT to CUVS (#3549)
- Pin to numpy<2 (#4033)
- (1/n) - Preload datasets in manifold so that subsequent stages of training, indexing and search can use those instead of each trainer or indexer downloading data. (#4034)
- Constrain conda version for Windows build (#4040)
- Updates to faiss-gpu-cuvs nightly pkg (#4032)
- pin the dependecies version for x86_64 (#4046)
- pin arm64 dependency (#4060)
- Pin conda build (#4062)
- Improve naming due to codemod (#4063)
- Improve naming due to codemod (#4064)
- Improve naming due to codemod (#4065)
- separate the github build into two conditions (#4066)
- Improve naming due to codemod (#4070)
- improve naming due to codemod (#4067)
- improve naming due to codemod (#4071)
- improve naming due to codemod (#4072)
- fix nightly build (#4080)
- Change github action workflows name (#4083)
- Resolve Packaging Issues (#4044)
- Update __init__.py (#4086)
- Exhaustive IVF probing in scalar quantizer tests (#4075)
- Pin Nightlies with testing on PR (#4088)
- Update benchmarking library code to work for IdMap index as well (#4093)
- Update action.yml (#4100)
- Upgrade CUVS to 24.12 (#4021)
- Link cuVS Docs (#4084)
- Set KnnDescriptor.desc_name in the Benchmarking core framework in FAISS like other descriptors (#4109)
- enable quiet mode for conda install (#4112)
- Disable retry build (#4124)
- Add ngpu default argument to knn_ground_truth (#4123)
- Update code comment to reflect the range of IF from [1, k] (#4139)
- Reenable auto retry workflow (#4140)
- Migration off defaults to conda-forge channel (#4126)
- Benchmarking Scripts for cuVS Index, more docs updates (#4117)
Fixed
- Fix total_rows (#3942)
- Fix INSTALL.md due to failure of conflict resolving (#3915)
- Back out "Add example of how to build, link, and test an external SWIG module" (#3954)
- Fix shadowed variable in faiss/IndexPQ.cpp (#3959)
- Fix shadowed variable in faiss/IndexIVFAdditiveQuantizer.cpp (#3958)
- Fix shadowed variable in faiss/impl/HNSW.cpp (#3961)
- Fix shadowed variable in faiss/impl/simd_result_handlers.h (#3960)
- Fix shadowed variable in faiss/utils/NeuralNet.cpp (#3952)
- Resolve "incorrect-portions-license" errors: add no license lint to top of GPU files with both licenses (#3965)
- Resolve "duplicate-license-header": Find and replace duplicate license headers (#3967)
- fix some more nvidia licenses that get erased (#3977)
- fix merge_flat_ondisk stress run failures (#3999)
- Fix reverse_index_factory formatting of ScalarQuantizers (#4003)
- Fix shadowed variable in faiss/IndexAdditiveQuantizer.cpp (#4011)
- facebook-unused-include-check in fbcode/faiss (#4029)
- fix linter (#4035)
- Some chore fixes (#4010)
- Fix unused variable compilation error (#4041)
- stop dealloc of coarse quantizer when it is deleted (#4045)
- Fix SCD Table test flakiness (#4069)
- Fix IndexIVFFastScan reconstruct_from_offset method (#4095)
- more fast-scan reconstruction (#4128)
- Fix nightly cuVS 11.8.0 failure (#4149)
- Correct capitalization of FAISS to Faiss (#4155)
- Fix cuVS 12.4.0 nightly failure (#4153)
Deprecated
- Remove unused-variable in dumbo/backup/dumbo/service/tests/ChainReplicatorTests.cpp (#4024)
- remove inconsistent oom exception test (#4052)
- Remove unused(and wrong) io macro (#4122)
1.9.0 - 2024-10-04
Added
- Add AVX-512 implementation for the distance and scalar quantizer functions. (#3853)
- Allow k and M suffixes in IVF indexes (#3812)
- add reconstruct support to additive quantizers (#3752)
- introduce options for reducing the overhead for a clustering procedure (#3731)
- Add hnsw search params for bounded queue option (#3748)
- ROCm support (#3462)
- Add sve targets (#2886)
- add get_version() for c_api (#3688)
- QINCo implementation in CPU Faiss (#3608)
- Add search functionality to FlatCodes (#3611)
- add dispatcher for VectorDistance and ResultHandlers (#3627)
- Add SQ8bit signed quantization (#3501)
- Add ABS_INNER_PRODUCT metric (#3524)
- Interop between CAGRA and HNSW (#3252)
- add skip_storage flag to HNSW (#3487)
- QT_bf16 for scalar quantizer for bfloat16 (#3444)
- Implement METRIC.NaNEuclidean (#3414)
- TimeoutCallback C++ and Python (#3417)
- support big-endian machines (#3361)
- Support for Remove ids from IVFPQFastScan index (#3354)
- Implement reconstruct_n for GPU IVFFlat indexes (#3338)
- Support of skip_ids in merge_from_multiple function of OnDiskInvertedLists (#3327)
- Add the ability to clone and read binary indexes to the C API. (#3318)
- AVX512 for PQFastScan (#3276)
Changed
- faster hnsw CPU index training (#3822)
- Some small improvements. (#3692)
- First attempt at LSH matching with nbits (#3679)
- Set verbose before train (#3619)
- Remove duplicate NegativeDistanceComputer instances (#3450)
- interrupt for NNDescent (#3432)
- Get rid of redundant instructions in ScalarQuantizer (#3430)
- PowerPC, improve code generation for function fvec_L2sqr (#3416)
- Unroll loop in lookup_2_lanes (#3364)
- Improve filtering & search parameters propagation (#3304)
- Change index_cpu_to_gpu to throw for indices not implemented on GPU (#3336)
- Throw when attempting to move IndexPQ to GPU (#3328)
- Skip HNSWPQ sdc init with new io flag (#3250)
Fixed
- Fix a bug for a non-simdlib code of ResidualQuantizer (#3868)
- assign_index should default to null (#3855)
- Fix incorrectly counted the number of computed distances for HNSW (#3840)
- Add error for overflowing nbits during PQ construction (#3833)
- Fix radius search with HNSW and IP (#3698)
- fix algorithm of spreading vectors over shards (#3374)
- Fix IndexBinary.assign Python method (#3384)
- Few fixes in bench_fw to enable IndexFromCodec (#3383)
- Fix the endianness issue in AIX while running the benchmark. (#3345)
- Fix faiss swig build with version > 4.2.x (#3315)
- Fix problems when using 64-bit integers. (#3322)
- Fix IVFPQFastScan decode function (#3312)
- Handling FaissException in few destructors of ResultHandler.h (#3311)
- Fix HNSW stats (#3309)
- AIX compilation fix for io classes (#3275)
1.8.0 - 2024-02-27
Added
- Added a new conda package faiss-gpu-raft alongside faiss-cpu and faiss-gpu
- Integrated IVF-Flat and IVF-PQ implementations in faiss-gpu-raft from RAFT by Nvidia [thanks Corey Nolet and Tarang Jain]
- Added a context parameter to InvertedLists and InvertedListsIterator
- Added Faiss on Rocksdb demo to showing how inverted lists can be persisted in a key-value store
- Introduced Offline IVF framework powered by Faiss big batch search
- Added SIMD NEON Optimization for QT_FP16 in Scalar Quantizer. [thanks Naveen Tatikonda]
- Generalized ResultHandler and supported range search for HNSW and FastScan
- Introduced avx512 optimization mode and FAISS_OPT_LEVEL env variable [thanks Alexandr Ghuzva]
- Added search parameters for IndexRefine::search() and IndexRefineFlat::search()
- Supported large two-level clustering
- Added support for Python 3.11 and 3.12
- Added support for CUDA 12
Changed
- Used the benchmark to find Pareto optimal indices. Intentionally limited to IVF(Flat|HNSW),PQ|SQ indices
- Splitted off RQ encoding steps to another file
- Supported better NaN handling
- HNSW speedup + Distance 4 points [thanks Alexandr Ghuzva]
Fixed
- Fixed DeviceVector reallocations in Faiss GPU
- Used efSearch from params if provided in HNSW search
- Fixed warp synchronous behavior in Faiss GPU CUDA 12
1.7.4 - 2023-04-12
Added
- Added big batch IVF search for conducting efficient search with big batches of queries
- Checkpointing in big batch search support
- Precomputed centroids support
- Support for iterable inverted lists for eg. key value stores
- 64-bit indexing arithmetic support in FAISS GPU
- IndexIVFShards now handle IVF indexes with a common quantizer
- Jaccard distance support
- CodePacker for non-contiguous code layouts
- Approximate evaluation of top-k distances for ResidualQuantizer and IndexBinaryFlat
- Added support for 12-bit PQ / IVFPQ fine quantizer decoders for standalone vector codecs (faiss/cppcontrib)
- Conda packages for osx-arm64 (Apple M1) and linux-aarch64 (ARM64) architectures
- Support for Python 3.10
Removed
- CUDA 10 is no longer supported in precompiled packages
- Removed Python 3.7 support for precompiled packages
- Removed constraint for using fine quantizer with no greater than 8 bits for IVFPQ, for example, now it is possible to use IVF256,PQ10x12 for a CPU index
Changed
- Various performance optimizations for PQ / IVFPQ for AVX2 and ARM for training (fused distance+nearest kernel), search (faster kernels for distance_to_code() and scan_list_*()) and vector encoding
- A magnitude faster CPU code for LSQ/PLSQ training and vector encoding (reworked code)
- Performance improvements for Hamming Code computations for AVX2 and ARM (reworked code)
- Improved auto-vectorization support for IP and L2 distance computations (better handling of pragmas)
- Improved ResidualQuantizer vector encoding (pooling memory allocations, avoid r/w to a temporary buffer)
Fixed
- HNSW bug fixed which improves the recall rate! Special thanks to zh Wang @hhy3 for this.
- Faiss GPU IVF large query batch fix
- Faiss + Torch fixes, re-enable k = 2048
- Fix the number of distance computations to match max_codes parameter
- Fix decoding of large fast_scan blocks
1.7.3 - 2022-11-3
Added
- Added sparse k-means routines and moved the generic kmeans to contrib
- Added FlatDistanceComputer for all FlatCodes indexes
- Support for fast accumulation of 4-bit LSQ and RQ
- Added product additive quantization
- Support per-query search parameters for many indexes + filtering by ids
- write_VectorTransform and read_vectorTransform were added to the public API (by @AbdelrahmanElmeniawy)
- Support for IDMap2 in index_factory by adding "IDMap2" to prefix or suffix of the input String (by @AbdelrahmanElmeniawy)
- Support for merging all IndexFlatCodes descendants (by @AbdelrahmanElmeniawy)
- Remove and merge features for IndexFastScan (by @AbdelrahmanElmeniawy)
- Performance improvements: 1) specialized the AVX2 pieces of code speeding up certain hotspots, 2) specialized kernels for vector codecs (this can be found in faiss/cppcontrib)
Fixed
- Fixed memory leak in OnDiskInvertedLists::do_mmap when the file is not closed (by @AbdelrahmanElmeniawy)
- LSH correctly throws error for metric types other than METRIC_L2 (by @AbdelrahmanElmeniawy)
1.7.2 - 2021-12-15
Added
- Support LSQ on GPU (by @KinglittleQ)
- Support for exact 1D kmeans (by @KinglittleQ)
1.7.1 - 2021-05-27
Added
- Support for building C bindings through the
FAISS_ENABLE_C_APICMake option. - Serializing the indexes with the python pickle module
- Support for the NNDescent k-NN graph building method (by @KinglittleQ)
- Support for the NSG graph indexing method (by @KinglittleQ)
- Residual quantizers: support as codec and unoptimized search
- Support for 4-bit PQ implementation for ARM (by @vorj, @n-miyamoto-fixstars, @LWisteria, and @matsui528)
- Implementation of Local Search Quantization (by @KinglittleQ)
Changed
- The order of xb and xq was different between
faiss.knnandfaiss.knn_gpu. Also the metric argument was called distance_type. - The typed vectors (LongVector, LongLongVector, etc.) of the SWIG interface have been deprecated. They have been replaced with Int32Vector, Int64Vector, etc. (by h-vetinari)
Fixed
- Fixed a bug causing kNN search functions for IndexBinaryHash and IndexBinaryMultiHash to return results in a random order.
- Copy constructor of AlignedTable had a bug leading to crashes when cloning IVFPQ indices.
1.7.0 - 2021-01-27
1.6.5 - 2020-11-22
1.6.4 - 2020-10-12
Added
- Arbitrary dimensions per sub-quantizer now allowed for
GpuIndexIVFPQ. - Brute-force kNN on GPU (
bfKnn) now acceptsint32indices. - Nightly conda builds now available (for CPU).
- Faiss is now supported on Windows.
1.6.3 - 2020-03-24
Added
- Support alternative distances on GPU for GpuIndexFlat, including L1, Linf and Lp metrics.
- Support METRIC_INNER_PRODUCT for GpuIndexIVFPQ.
- Support float16 coarse quantizer for GpuIndexIVFFlat and GpuIndexIVFPQ. GPU Tensor Core operations (mixed-precision arithmetic) are enabled on supported hardware when operating with float16 data.
- Support k-means clustering with encoded vectors. This makes it possible to train on larger datasets without decompressing them in RAM, and is especially useful for binary datasets (see https://github.com/facebookresearch/faiss/blob/main/tests/test_build_blocks.py#L92).
- Support weighted k-means. Weights can be associated to each training point (see https://github.com/facebookresearch/faiss/blob/main/tests/test_build_blocks.py).
- Serialize callback in python, to write to pipes or sockets (see https://github.com/facebookresearch/faiss/wiki/Index-IO,-cloning-and-hyper-parameter-tuning).
- Reconstruct arbitrary ids from IndexIVF + efficient remove of a small number of ids. This avoids 2 inefficiencies: O(ntotal) removal of vectors and IndexIDMap2 on top of indexIVF. Documentation here: https://github.com/facebookresearch/faiss/wiki/Special-operations-on-indexes.
- Support inner product as a metric in IndexHNSW (see https://github.com/facebookresearch/faiss/blob/main/tests/test_index.py#L490).
- Support PQ of sizes other than 8 bit in IndexIVFPQ.
- Demo on how to perform searches sequentially on an IVF index. This is useful for an OnDisk index with a very large batch of queries. In that case, it is worthwhile to scan the index sequentially (see https://github.com/facebookresearch/faiss/blob/main/tests/test_ivflib.py#L62).
- Range search support for most binary indexes.
- Support for hashing-based binary indexes (see https://github.com/facebookresearch/faiss/wiki/Binary-indexes).
Changed
- Replaced obj table in Clustering object: now it is a ClusteringIterationStats structure that contains additional statistics.
Removed
- Removed support for useFloat16Accumulator for accumulators on GPU (all accumulations are now done in float32, regardless of whether float16 or float32 input data is used).
Fixed
- Some python3 fixes in benchmarks.
- Fixed GpuCloner (some fields were not copied, default to no precomputed tables with IndexIVFPQ).
- Fixed support for new pytorch versions.
- Serialization bug with alternative distances.
- Removed test on multiple-of-4 dimensions when switching between blas and AVX implementations.
1.6.2 - 2020-03-10
1.6.1 - 2019-12-04
1.6.0 - 2019-09-24
Added
- Faiss as a codec: We introduce a new API within Faiss to encode fixed-size vectors into fixed-size codes. The encoding is lossy and the tradeoff between compression and reconstruction accuracy can be adjusted.
- ScalarQuantizer support for GPU, see gpu/GpuIndexIVFScalarQuantizer.h. This is particularly useful as GPU memory is often less abundant than CPU.
- Added easy-to-use serialization functions for indexes to byte arrays in Python (faiss.serialize_index, faiss.deserialize_index).
- The Python KMeans object can be used to use the GPU directly, just add gpu=True to the constuctor see gpu/test/test_gpu_index.py test TestGPUKmeans.
Changed
- Change in the code layout: many C++ sources are now in subdirectories impl/ and utils/.
1.5.3 - 2019-06-24
Added
- Basic support for 6 new metrics in CPU IndexFlat and IndexHNSW (https://github.com/facebookresearch/faiss/issues/848).
- Support for IndexIDMap/IndexIDMap2 with binary indexes (https://github.com/facebookresearch/faiss/issues/780).
Changed
- Throw python exception for OOM (https://github.com/facebookresearch/faiss/issues/758).
- Make DistanceComputer available for all random access indexes.
- Gradually moving from long to uint64_t for portability.
Fixed
- Slow scanning of inverted lists (https://github.com/facebookresearch/faiss/issues/836).
1.5.2 - 2019-05-28
Added
- Support for searching several inverted lists in parallel (parallel_mode != 0).
- Better support for PQ codes where nbit != 8 or 16.
- IVFSpectralHash implementation: spectral hash codes inside an IVF.
- 6-bit per component scalar quantizer (4 and 8 bit were already supported).
- Combinations of inverted lists: HStackInvertedLists and VStackInvertedLists.
- Configurable number of threads for OnDiskInvertedLists prefetching (including 0=no prefetch).
- More test and demo code compatible with Python 3 (print with parentheses).
Changed
- License was changed from BSD+Patents to MIT.
- Exceptions raised in sub-indexes of IndexShards and IndexReplicas are now propagated.
- Refactored benchmark code: data loading is now in a single file.
1.5.1 - 2019-04-05
Added
- MatrixStats object, which reports useful statistics about a dataset.
- Option to round coordinates during k-means optimization.
- An alternative option for search in HNSW.
- Support for range search in IVFScalarQuantizer.
- Support for direct uint_8 codec in ScalarQuantizer.
- Better support for PQ code assignment with external index.
- Support for IMI2x16 (4B virtual centroids).
- Support for k = 2048 search on GPU (instead of 1024).
- Support for renaming an ondisk invertedlists.
- Support for interrupting computations with interrupt signal (ctrl-C) in python.
- Simplified build system (with --with-cuda/--with-cuda-arch options).
Changed
- Moved stats() and imbalance_factor() from IndexIVF to InvertedLists object.
- Renamed IndexProxy to IndexReplicas.
- Most CUDA mem alloc failures now throw exceptions instead of terminating on an assertion.
- Updated example Dockerfile.
- Conda packages now depend on the cudatoolkit packages, which fixes some interferences with pytorch. Consequentially, faiss-gpu should now be installed by conda install -c pytorch faiss-gpu cudatoolkit=10.0.
1.5.0 - 2018-12-19
Added
- New GpuIndexBinaryFlat index.
- New IndexBinaryHNSW index.
1.4.0 - 2018-08-30
Added
- Automatic tracking of C++ references in Python.
- Support for non-intel platforms, some functions optimized for ARM.
- Support for overriding nprobe for concurrent searches.
- Support for floating-point quantizers in binary indices.
Fixed
- No more segfaults due to Python's GC.
- GpuIndexIVFFlat issues for float32 with 64 / 128 dims.
- Sharding of flat indexes on GPU with index_cpu_to_gpu_multiple.
1.3.0 - 2018-07-10
Added
- Support for binary indexes (IndexBinaryFlat, IndexBinaryIVF).
- Support fp16 encoding in scalar quantizer.
- Support for deduplication in IndexIVFFlat.
- Support for index serialization.
Fixed
- MMAP bug for normal indices.
- Propagation of io_flags in read func.
- k-selection for CUDA 9.
- Race condition in OnDiskInvertedLists.
1.2.1 - 2018-02-28
Added
- Support for on-disk storage of IndexIVF data.
- C bindings.
- Extended tutorial to GPU indices.