Files
faiss/CHANGELOG.md
T
Michael Norris 20f14b31a6 Increment to next release, v1.15.0 (#5494)
Summary: Pull Request resolved: https://github.com/facebookresearch/faiss/pull/5494

Reviewed By: trang-nm-nguyen

Differential Revision: D114413409

Pulled By: mnorris11

fbshipit-source-id: b30b14ed3a5a55486ae379700c7fda5773e2620c
2026-08-03 10:04:45 -07:00

98 KiB

Changelog

All notable changes to this project will be documented in this file.

Unreleased

1.15.0 - 2026-07-31

Added

  • 4332ceb994 Enable byte-LUT gather path for QT_8bit_eden distance computation (#5498)
  • 41133fde42 Add EDEN quantizer indexes (#5278)
  • 3110fd2424 Add MetalIndexIVFPQ with product quantization and residual encoding support (#5288)
  • 6c2b68775a Adding cuVS IVF-SQ backend (#5306)
  • 4d778bc595 Add multi-GPU CAGRA → HNSW build with trainAllNeighbors and multi-GPU optimize (#5282)
  • 42dc2862c2 Implement memory-mapped I/O for Flat and static Vamana SVS indices (#5271)
  • d22107beca feat(riscv): Add RISC-V RVV rabitq kernels (#5369)
  • df51012a60 feat(riscv): Add RISC-V RVV vector distance kernels (#5354)
  • 3b52da37c4 Add AVX2 and AVX512 byte-domain kernels for QT_8bit_direct_signed (#5409)
  • 88b6c47cf5 Implement IVFRaBitQ FastScan conversion constructor (#5422)
  • d24cc844d2 Implement GPU IVF add_preassigned via add_core (implement #3908) (#5372)
  • 5826578a7e Read/Write support for IndexHNSW base class (#5305)
  • a3350f6641 faiss: support METRIC_L1 and extra metrics in IndexFlat range_search (#5391)
  • 432e8b4248 Extend DistanceComputer batching to PQ, SQ, and PreTransform (#5309)
  • 7d4bb39f7e Extract super_kmeans_assign_iteration as a shared public SuperKMeans kernel (#5443)
  • aff8589c9e c_api: expose ScalarQuantizer codec and complete FaissQuantizerType enum (#5477)
  • 13aa39b791 Clone index support for HadamardRotation (#5475)
  • 3e313e4c49 SIMDConfig::has_dynamic_dispatch() (#5460)
  • a6f97750ae Add faiss-gpu-cuvs pip wheel packaging (#5250)
  • 6227323ffd pyfaiss_gpu_cuvs_2602: cuVS faiss Python for aarch64/GH200 (26.02, CUDA 12.4)
  • 522644cb2b Stand up parallel cuVS 26.02 IVF-PQ targets (rmm/raft/cuvs) at CUDA 12.8 (#5414)
  • edebabf90f Include Python type stubs (__init__.pyi, py.typed) in conda packages (#5394)
  • 9579d8f0a4 Add type stubs for SVS index classes + IndexIVFFlatPanorama.batch_size (#5489)
  • fd7be0cfb0 Add QT_0bit and QT_2bit_tq..QT_5bit_tq to ScalarQuantizer pyi stub (#5323)
  • ccecc847db Add ClusteringInitMethod enum constants to __init__.pyi stub (#5324)
  • 55990eb91f Port test_rabitq_utils from C++ to Python (#5442)

Changed

  • 0236390f2f Optimize RaBitQ fastscan query setup + 80% qps (#5396)
  • b1d61c3b88 Fuse RaBitQ AND-dot and popcount scan (#5412)
  • 81031a9789 RaBitQ fastscan avx512 lut quant (#5397)
  • b7f2b0f1fd RaBitQ SIMD-optimized bit-plane operation (#5392)
  • 0a27700e05 Reuse RaBitQ IVF scanner distance computer (#5390)
  • a3d59f0999 faiss DD: use 256-bit fast-scan QBS kernel on AMD Zen 4 (split AVX-512) (#5488)
  • c374dd917b Panorama HNSW Optimizations (~x1.2) (#5190)
  • cb9a72ac03 Reuse the HNSW visited table across searches instead of reallocating per call (#5448)
  • 4d1657471f Raise HNSW visited-table hash-set threshold from 500k to 10M (#5446)
  • a4b4c0f2de Optimize exhaustive_L2sqr_blas_cmax with AVX-512 intrinsics. (#4569)
  • 4a2f7e6328 Optimize the DistanceComputerByte::compute_code_distance with AVX512F, AVX512BW, AVX512VL instructions (#5067)
  • 9a74c6d3d1 Speed up Top1 and Reservoir add_results with AVX2/AVX512 (#5297)
  • 4030faae3d Speed up polysemous training with AVX-512.
  • ea107641d4 Parallelize inverted-list append loop in IndexIVFPQ::add_core_o (#5382)
  • cf045707c5 ProductQuantizer::search_sdc: hoist per-subquantizer row pointers out of database-vector loop (#5338)
  • caf88fca98 Improve ranklist intersection size (#5237)
  • 5c1afeed96 Remove dead code in quantize_ex_bits to avoid wasted compute (#5384)
  • e3dd6a85f3 Remove unused fields in various DistanceComputers (#5318)
  • 35c5495b8f Remove confusing double-negative throw-macro conditions (#5471)
  • 9223d62e81 Rename SQI8 to SQ8 to be consistent with the rest of Faiss (#5337)
  • b37e929947 Reuse faiss.ResultHeap in benchs instead of duplicating it (#5363)
  • 1f755ef3d6 Prune cuVS brute-force flat index on aarch64 (FAISS_CUVS_NO_FLAT) (#5431)
  • 3a7cce4ea9 Faiss OSS CI: skip GPU jobs on PRs that touch no GPU-relevant code (#5402)
  • 0f48ae6210 Faiss OSS autofix: force cuVS nightly to break (E2E validation) (#5328)
  • 0f0f728166 Format faiss Python files with black (line length 80) (#5349)
  • 7a7a8f2532 Align faiss .flake8 with black and the 80-char standard (#5350)
  • 259fa853af black -l 80: gpu/test formatting (1/3) (#5426)
  • a7d91d44d9 black -l 80: tests/ formatting (2/3) (#5427)
  • 3937552dd2 black -l 80: benchs + python + refine test formatting (3/3) (#5428)
  • b75a23ca15 black -l 80: python/__init__.pyi formatting (4/4) (#5429)
  • a238933d17 Finish E501 line-length lint sweep across faiss (183 violations, 52 files) (#5444)
  • d4564bdeb2 facebook-unused-include-check in distances_avx2.cpp (#5462)
  • ab3a5a95a6 facebook-unused-include-check in IndexIVFPQ.cpp (#5461)
  • e85b9bded9 facebook-unused-include-check in test_svs.cpp (#5455)
  • 5e1cccea39 facebook-unused-include-check in TestGpuIndexIVFScalarQuantizer.cpp (#5454)
  • 003e002da6 facebook-unused-include-check in IndexBinaryHash.cpp (#5453)
  • c22dc247c0 facebook-unused-include-check in avx2.cpp (#5452)
  • 76e2bbca43 facebook-unused-include-check in IndexBinaryHNSW.cpp (#5379)
  • 7c643c2930 facebook-unused-include-check in IndexIVFPQFastScan.cpp (#5378)
  • 3c5c27c881 facebook-unused-include-check in avx2.cpp (#5377)
  • 9b33960463 facebook-unused-include-check in test_ivf_early_termination.cpp (#5376)
  • 027054f40f facebook-unused-include-check in IVFPQ_QueryTables.cpp (#5359)
  • f4cb963381 facebook-unused-include-check in avx2.cpp (#5358)
  • afc1be442b facebook-unused-include-check in hamming.cpp (#5355)
  • 6256cc7bd7 facebook-unused-include-check in IndexIVF.cpp (#5356)
  • 83dc6a6991 facebook-unused-include-check in IndexIVFSpectralHash.cpp (#5357)
  • 124bfa1d4f facebook-unused-include-check in IndexSVSVamanaLeanVec.cpp (#5343)
  • a0457db86c facebook-unused-include-check in avx2.cpp (#5344)
  • 595c5d7aa1 facebook-unused-include-check in distances_simd.cpp (#5342)
  • 5437256fc5 facebook-unused-include-check in avx2.cpp (#5314)
  • 7c56a9dacd facebook-unused-include-check in avx2.cpp (#5315)
  • 0f280a7ca9 facebook-unused-include-check in distances_simd.cpp (#5316)

Fixed

  • 6187d940e3 clang-diagnostic-unused-parameter in GpuCloner.cpp (#5480)
  • 37313e7b64 Fix two memory leaks in shard_ivf_index_centroids (#5495)
  • 7a4e7975d1 Fix RaBitQ fast scan aux offsets for large bbs (#5421)
  • a032797bd8 faiss DD: SQ AVX-512 falls back to AVX2 when d%16!=0 (#5478)
  • de8520b7e4 missing auto vectorization for AVX512-SPR (#5433)
  • 4a23937417 Fix AVX-512 PQ-encode falling back to scalar in fvec_L2sqr_ny_nearest_y_transposed (#5330)
  • 7437cac4d9 Fix Jaccard heap selection in IVF search (#5408)
  • 458c7be735 Fix division-by-zero in quantize_lut when all LUT entries are identical (#5424)
  • ecd5b65dba Guard constant/zero-norm query in RaBitQ query quantization (#5381)
  • 1190b707c2 RaBitQ: Clamp L2 distance estimate to >=0 (#5393)
  • af45a3b2a7 Throw instead of abort on null buffer in RaBitQuantizer::decode_core (#5465)
  • 5372c88989 Guard exhaustive_{inner_product,L2sqr}_seq against empty query batches (nx=0) (#5445)
  • 764b86f24c Guard ScalarQuantizer compute_codes/decode OMP region for small n (#5423)
  • 19f477a9ba Fix out-of-bounds memory access in bvec_checksum (#5310)
  • 3553e01cd9 Fix IndexAdditiveQuantizer::symmetric_dis() (#5319)
  • b7cd013065 Filter out-of-radius results in IndexRefine::range_search (#5370)
  • 4213672cb8 Always widen IndexRefine::range_search base radius by k_factor (#5395)
  • ed29dbb0bb faiss: fix IndexIDMap range_search crash with empty SearchParameters (#5388)
  • 828de1b77e fix IDMap add_sa_codes returning -1 labels with ivf subindex Issue #5333 (#5345)
  • bf53109ec1 Fix get_code_size to handle HNSW coarse quantizers with any M value (#5416)
  • e1f8d4fc0d Fix reverse_index_factory for multi-bit RaBitQ indexes (#5419)
  • 7b1d0ca435 Fix C++ reverse_index_factory: missing qtypes crash telemetry, IDMap2 misidentified (#5417)
  • cc9be4b1e4 fix: reverse_index_factory missing 11 SQ types including all TurboQuant variants (#5322)
  • 350a50b02e Fix OperatingPoints::add prune loop leaving dominated points at equal time (#5415)
  • bd6760153c Fix OperatingPoints leaving dominated points on the Pareto frontier for equal-time points (#5334)
  • 376930beab Fix null dereference, dead condition, and Python binding crash in AutoTune and Clustering (#5321)
  • e306f3036d Fix PyCallbackShardingFunction to properly decrement references (#5389)
  • d91b73dc63 fix: bs add n fix valid counter skip (#5383)
  • 247527b349 Fix reconstruct_n stubs resolving to torch.Tensor for numpy calls (#5411)
  • a3e8c67c60 Fix heap-buffer-overflow in ResidualCoarseQuantizer deserialization (T280514309) (#5485)
  • 4d7491540d Bound lattice_nbit loop in IndexLattice ctor to fix deserialization timeout (T277092535) (#5484)
  • 5987f523f4 Reject nbits==0 ProductQuantizer on deserialization (T279464247) (#5483)
  • 269ac43d61 Bound recursion depth in index deserialization (CWE-674) (#5468)
  • a20b22d0d4 Bound decode-cache compute in ZnSphereCodecRec deserialization (#5467)
  • 6a0616edbd Reject null base/refine index in IndexRefine deserialization (#5466)
  • bc102d61b8 Bound IVFPQ precomputed-table allocation at deserialization time (#5464)
  • 756c5d5773 Harden FastScan deserialization: enforce ksub==16 and bound reconstruct() (#5436)
  • f1efc2cf89 Validate codes/ntotal consistency in Ix2L and IxLa deserialization (#5439)
  • fba9084a62 Validate Panorama batch_size and codes/cum_sums on deserialization (#5438)
  • d43336302e Validate SVS-Vamana stored_vectors size on deserialization (ISV2) (#5434)
  • dfd2a25aed Reject degenerate code_size==0 IndexPQ with ntotal>0 on deserialization (#5437)
  • 91ce5f8a9f Harden reconstruct()/reset() against null storage in composite indexes (#5440)
  • ea8e22c1d3 Bounds-check decoded direct_map entry in IndexIVF::reconstruct (#5435)
  • 79f59edcfc Validate legacy IVFFlat per-list codes size against ids size (#5259)
  • c428ca1e38 Harden OnDiskInvertedLists mmap reader against malformed list sizes (#5312)
  • 6f62d01afa Guard against integer overflow in index deserialization storage-size checks (#5313)
  • 16c5d782e0 Don't redefine PRETTY_FUNCTION under clang-cl (#5474)
  • a9683455b7 clang-diagnostic-unused-parameter in bench_result_handler_overhead.cpp (#5481)
  • d6d3dce8d7 clang-diagnostic-unused-parameter in bench_cppcontrib_sa_decode.cpp (#5479)
  • 8d0d1a2b33 faiss/gpu/perf: check CUDA return in PerfIVFPQAdd (clang21 nodiscard) (#5368)
  • 0fa5b0afcb faiss/gpu/perf: check cudaProfilerStop() return (fix clang21 -Wunused-value) (#5362)
  • 6f0155705b Keep distances_simdlib256.h include in distances_simd.cpp (unused-include false positive) (#5380)
  • 22220d2c4f Fix genuine flake8 lint in faiss Python (F401/F403/F841/B011) (#5351)
  • 63378f0ace Fix cuVS GPU CI timeout: pin CUDA toolkit to 13.2 (#5401)
  • 11bd76463c Faiss OSS nightly autofix (#5346)
  • 7cd1ae906c Fix panorama tests: pass D_panorama (not D_regular) to check_ref_knn_with_draws (#5430)
  • ba6af9ffe8 Fix flaky IVF/Refine Panorama kNN tests under AVX512_SPR dispatch (#5420)
  • 6653b98402 Fix flaky TestIVFRaBitQ_AVX2::test_comparison_vs_ref_L2_rrot — apply cross-SIMD equivalence (#5325)
  • aa9d2bf425 De-flake test_flat_panorama across SIMD levels (#5361)
  • 395eaf8c6f De-flake panorama / graph_based / hamming_utils tests (#5339)
  • 08cb1f2cf3 De-flake test_refine_panorama.test_incremental_add (seed + tolerance) (#5347)
  • 8bfcb4e2a3 De-flake test_meta_index.Shards.test_shards (loosen tie-churn tolerance) (#5348)
  • 54f83a4131 De-flake bench_transposed_encode (CI timeout) (#5360)

1.14.3 - 2026-06-12

Added

  • 261d8f25aa Add IVFSQTurboQSearchParameters to __init__.pyi stub (#5304)
  • 684a32d040 Add manual Faiss nightly workflow dispatch (#5300)
  • 10b6b2a1e5 Add MetalIndexIVFFlat with IVF scan/merge kernels and expanded top-k support (#5202)
  • 74d36198fa TurboQuant in ScalarQuantizer: full Algorithm 2 (QJL stage) with SIMD and optimizations (#5170)
  • 506600962f Add Python HNSW tutorial (#5260)
  • 3cff0f419c Add Sapphire Rapids optimizations for ScalarQuantizer (L2, IP) (#5173)
  • 46ef80db63 Support IndexIDMap/IndexIDMap2 in reverse_index_factory (#5266)
  • 420158b10e Add VPOPCNTDQ-based HammingComputer for Sapphire Rapids+ (#5183)
  • d8f1c2716d Implement NEON-based FINE_SIZE=2 specializations for Index2LevelDecoderImpl and IndexPQDecoder (#5262)
  • 0951b5337b Support user provided blas library (#5189)
  • 215740ecc3 SVS static vamana support (#5224)
  • d24ad6ef5b Add is_similarity mode to HNSW (#5246)
  • aa332cd5f0 Implement NEON-based FINE_SIZE=2 specializations for Index2LevelDecoderImpl and IndexPQDecoder (#5255)
  • 5d9aae6ee8 Add faiss-gpu pip wheel packaging (#5131)
  • 6f1cf64531 Add VPOPCNTDQ-based RaBitQ kernel for Sapphire Rapids+ (#5149)

Changed

  • 262fc3c7a2 Re-enable musllinux wheels for faiss-cpu (#5299)
  • 1cdc3709c6 Run CI on push to main to refresh ccache cache (#5291)
  • 379ee758b1 Reserve VisitedTableSet capacity to avoid rehashes during HNSW search (#5290)
  • 6513a2497c Enable Metal by default on Apple machines (#5280)
  • fe46c3c804 Validate bool fields during deserialization (#5279)
  • 480f917900 Type imbalance_factor and wire the .pyi stub into the buck build (#5269)
  • e60baeb7b6 Templatize search_from_candidate_unbounded for VisitedTable devirtualization (#5270)
  • c000190dc0 Accelerate ScalarQuantizer::QT_bf16 with AVX512-BF16. (#4889)
  • 7504fc8dde Upgrade CUVS Version to 26.06 (#5240)
  • d12683c3b0 facebook-unused-include-check in IndexBinaryIVF.cpp (#5263)
  • 99d9013e1f facebook-unused-include-check in distances_simd.cpp (#5264)
  • 2f0368b620 facebook-unused-include-check in hamming_avx2.cpp (#5265)
  • 0c72755ecc Remove unused include of platform_macros.h in partitioning.cpp
  • e6b8f6de53 IndexHNSW: use HNSW::is_similarity for IP/similarity metrics + tests (#5226)
  • c0575f2c13 avoid runtime checks in VisitedTable (#5234)
  • 1cb7601829 Eliminate per-code denormalization in uniform SQ distance computation (#5166)
  • f29d8621fa Revert D106693266: Implement NEON-based FINE_SIZE=2 specializations for Index2LevelDecoderImpl and IndexPQDecoder
  • ef96e3d25e Updating CI to ROCm 7 (#5196)
  • f5217d7496 facebook-unused-include-check in IndexBinaryHNSW.cpp (#5251)
  • 3e6ed99bbb facebook-unused-include-check in IndexBinaryIVF.cpp (#5252)
  • 108868bfac Reject null inner index in IDMap and BinaryFromFloat deserialization (#5239)
  • a64b549676 Add IndexLattice r2 limit to cap decode-cache build cost (#5238)
  • 09937153dc faiss: Replace remaining get_single_code calls with ScopedCodes (#5248)
  • 910e435bcc facebook-unused-include-check in hamming_avx2.cpp (#5242)
  • d581f2f840 Use per-SIMD TU scan for standalone PQ (AVX2 gather inlining) (#5233)

Fixed

  • 20afed0fa3 make intentional cudaGetLastError() error-clears explicit ((void)) for clang21 -- fixes S674096 (#5302)
  • e420e94ce6 Move partitioning shifts tables to .rodata to fix non-AVX2 import SIGILL (#5298)
  • 15bd823837 Fix cuVS nightly (#5273)
  • 17cc967d71 Fix AVX512_SPR dispatch on AMD: require AVX512_FP16 CPUID (#5281)
  • e69bfeed08 Stabilize RaBitQ tests on AVX512_SPR by switching to cross-level equivalence (#5277)
  • c4c651453b Stub fixes: knn torch overload, ResidualCoarseQuantizer ctor, remove duplicate I/O defs (#5283)
  • eb4c1eafe2 Fix Windows ARM64 (MSVC) build broken by NEON SIMD templatization (#5274)
  • ab632382d3 Install missing InvertedListScannerStats.h header (#5268)
  • 140541590e Fix broken fbcode//faiss/tests:test_index_binary - test_replicas (test_index_binary.TestReplicasAndS (#5258)
  • 34eb98936f fix(python): int64 coercions for MapLong2Long + InvertedLists DOWNCAST chain (#5257)
  • d492af446e faiss: initialize ids_tab to -1 in Top1BlockResultHandler::begin_multiple (#5249)
  • a4e417fed7 Fix: static SIMD dispatch falls to scalar for avx512_spr/avx512/arm_sve builds (#5057)
  • 3edc6e1649 Guard Panorama autovec pragmas against nvcc frontend (#5241)
  • c7689c4d0c Fix ODR violation in ScannerMixIn by adding SIMDLevel template parameter (#5148)
  • ca87f41dfe Open SIFT demo data in binary mode (#5213)

1.14.2 - 2026-05-21

Added

  • b7618fadc7 Add SuperKMeans: faster k-means via ADSampling+PDX progressive pruning (#5168)
  • 66c9d08265 Add SuperKMeans foundations: math primitives, PDX layout, SIMD kernels
  • dc7afcfdf0 Support SVSVamana as IVF coarse quantizer via index_factory (#5175)
  • 7a8e4ddaca CI: cross-compile for riscv64 with RVV dynamic dispatch (#5184)
  • 03202795b6 Introduce RVV (#5156)
  • 417c53e0ce Add NoneSIMDLevel context manager for cross-level reference checks (#5158)
  • 46def46902 Enable SVS IVF Index in FAISS (#4801)
  • 585ba7954a Add pip install support via scikit-build-core + cibuildwheel (#4862)
  • 799bf3aaec Introduce early stop facilities for IVF, attempt 2 (#5160)
  • 66cea52433 Add Metal GPU backend for Apple Silicon (IndexFlat) (#5144)
  • 17fd3332c7 Add database-parallel flat search for few-query workloads (#5000)
  • c7f07bbc0a Add C++ per-SIMD-level tests for distance utility functions (#5154)
  • 0242758a3d Add bit-exact RQ encode cross-level test (#5155)
  • 2f68a37307 Add per-SIMD-level tests for hamming.h utils + fix crosshamming bug (#5153)
  • a7116ed4ec Add TurboQuant (CPU) (#5049)
  • 11e5d39160 Add optional persistent locks to IndexHNSW for incremental adds (#5031)
  • e82aa28b83 Add OMP exception capture helpers and migrate IndexIVF (#5111)
  • 6299bff1f6 Add QT_0bit to ScalarQuantizer for centroid-only IVF distance (#5079)
  • 3030fe0635 Add filtered search for cuVS indexes (#4858)
  • f83ea51eaa Support IVFRaBitQSearchParameters in RaBitQFastScan scanner (#5081)
  • 82a823513d Add iterator callbacks for distance computation and heap admission (#5082)
  • b068fd985a Support IO_FLAG_MMAP_IFC on Darwin (#5058)
  • 113bf6ceac Expose fast_scan_code_size from non-IVF FastScan indices (#5077)
  • 786d993dbf Expose a fast scan code size from fast scan indices (#5064)
  • 95f1e45221 OMP build diagnostics (#4842)
  • c4ac852e5b Add a balanced assignment function (#5050)
  • 8402a6b764 Add unit tests for HNSW deserialization validation (#5033)
  • 1dc5e1fb60 V2 enable specifying a subset of SIMD levels that are implemented at dispatching time. (#4959)
  • e6f5c0c9a9 Add SIMD dynamic dispatch migration guide (#4973)
  • 8177a3bca6 Add nvidia-smi diagnostic call (#4960)
  • 67fc664fe0 Add CappedInvertedLists for per-list size limiting (#4880)
  • e57a8939c9 introduce SingleQueryResultCollectHandler (#4926)
  • 748c0311e4 HNSW: add prune_headroom to avoid O(n^2) pruning/locking, headroom test (#4847)
  • 1e4d2271a6 Introduce an early stop threshold for Kmeans (#4894)
  • 4a0fba1fe2 Add FastScanCodeScanner dispatch boundary with per-SIMD TUs (#4897)
  • 0fcba2284c Add sentinels to index format enums. (#4907)
  • 40480fb303 Support limits on index deserialization loops — useful for tests (#4902)
  • 1e4544a37e Add defaulted SIMDLevel template parameter to handler and scaler types (#4867)
  • abdd37bd96 Add Pixi installation option to docs (#5214)

Changed

  • 9d5491a117 Templatize SIMDResultHandler on SL, mark handle() final (#5223)
  • b63f236a52 Upgrade GitHub Actions CI from CUDA 12.6 to CUDA 13.2 (#5207)
  • a9f5baa58c Move RISC-V fast_scan forwarders to dedicated impl-riscv.cpp (#5216)
  • 8932716646 Validate SVS storage_kind via shared helper at all deserialization read sites (#5204)
  • bc490b56b0 Make IVFPQSearchCagraConfig dtype fields settable from Python (#5191)
  • ffd3727d48 Update pattern for index factory string with SVSVamana (#5201)
  • f37041d073 Extract Metal shaders to standalone .metal file with kernel wrapper class (#5167)
  • d98364eb49 perf: reserve() to avoid rehashing/reallocation (#5193)
  • 4eee3d7859 Add tolerance and assertion log to test_OIVFPQ (#5188)
  • 2322afd2d8 faiss: parallelize post-BLAS reduction loop and end_multiple() in result handlers (#5185)
  • 967eda65de Replace FAISS_ASSERT with FAISS_THROW_FMT for unsupported SVSStorageKind (#5182)
  • 715725df36 Enable verbose mode for TestPyPI publish step (#5181)
  • 5e123115f1 Filter wheel artifacts before publishing to PyPI (#5179)
  • 28b2b66cf2 Inline PQ code distance kernels into scanner TUs (#5159)
  • c41405d525 Enforce minimum training set size for ScalarQuantizer, check nullptr (#5141)
  • 44c1972aec Enable ccache in GitHub Actions cmake builds (#5157)
  • e09de2d070 Harden compute_query_factors: add preconditions, handle aliasing, remove dead checks
  • 6a9936c60d Hoist per-iteration vector allocations in IndexIVFRaBitQFastScan::compute_LUT
  • c3460c980b Convert binary index Hamming callers to dynamic dispatch (#5071)
  • ecac6511a2 Convert hamming.cpp public API to dynamic dispatch (#5070)
  • 8d1b964c11 Enable dynamic dispatch build on Windows (#5127)
  • a25bcb1e22 Rely on cuVS for default values (#5140)
  • 06228410c6 Panorama Optimizations (#5041)
  • f4338ade1b Parameterize existing tests with @for_all_simd_levels (#5134)
  • 9d567497ec Wire 512-bit QBS kernels into fast scan DD dispatch (#5075)
  • bdf877f90c facebook-unused-include-check in IndexNNDescent.cpp (#5132)
  • 632427fd0d fbcode/faiss/invlists (#5048)
  • e23c66175d Replace dispatch_HammingComputer with with_HammingComputer (#5126)
  • ed7e1f2435 Hoist SIMD dispatch outside loops in 4 call sites (#5074)
  • 582246b6bd Remove use of __AMDGCN_WAVEFRONT_SIZE macro with it being deprecated in ROCm 7 (#4619)
  • 2dff119f13 Add braces around single-line control flow statements
  • cc0c087548 Hoist SIMD dispatch out of approx_topk hot loops (#5073)
  • 18f93fd82f Replace SSE3 intrinsics in Index2Layer with portable scalar code (#5076)
  • 42765abc00 Optimize RaBitQ FastScan LUT construction for high-dimensional data (#5110)
  • ec5e70c655 Optimize multibit sign-bit unpacking in RaBitQ FastScan handlers (#5097)
  • 3f127ee3ba Thread qb/centered search params through FastScan LUT and handler (#5095)
  • 3c19c52ca0 Use std:: qualified math functions to avoid float-to-double promotion (#5088)
  • 48d2b0c946 Replace typedef with using declarations (#5086)
  • e12debcb61 Remove extra semicolons after inline member function definitions (#5085)
  • 5679d3ad42 HNSW Cagra base-level entrypoint sampling parallel (#5068)
  • c4efc42219 Remove bare simdlib type aliases from simdlib_dispatch.h (#5069)
  • 4a63c9e415 Convert partitioning to dynamic dispatch (#5062)
  • f226be432c Roll out @for_all_simd_levels to key test files (#5061)
  • afd6949377 fbcode/faiss/impl/HNSW.cpp (#5059)
  • 658c4340c0 Replace bare assert() with FAISS_THROW_IF_NOT in core index files (#5052)
  • 364749e886 Re-enable ROCm runner for AMD GPU CI (#4854)
  • faeac8636c Update outdated C++17 and Python 2 references (#5045)
  • 77e602870b Use HTTPS for GitHub links in README (#5043)
  • 91843bdbd3 Use explicit ISA flags instead of -march/-mtune=sapphirerapids (#5034)
  • acac823db4 Merge .gitignore updates from faiss-gpu-cu132 into main (#4996)
  • 8d8881ee3f Make distance_compute_blas_threshold dimension-aware (#5022)
  • 553c78b256 HNSW SIMD dispatch (#5015)
  • 499b4885b8 close the loop on ivf rabitq fast scan filter integration (#5026)
  • aef066ac0e SVS 0.3.0 (#4999)
  • cc34603106 reuse unpack buffer in multibit IVFRaBitQFastScan refinement (#5003)
  • d81584d548 Update Python type stubs: fix class hierarchy and add missing base classes (#5004)
  • d1c432fb5f Convert rabitq_simd.h to runtime SIMD dispatch (#4912)
  • 6bca9613b7 Convert distances_fused/ to runtime SIMD dispatch (#4911)
  • 04d0d56d0e facebook-unused-include-check in distances_simd.cpp (#5013)
  • 7eb05f01fa facebook-unused-include-check in partition.cpp (#5012)
  • 7e04fa2621 Update Python type stubs (__init__.pyi) to match current API (#4998)
  • db0e798d5a Use omp_get_max_threads() for OpenMP thread count (#4991)
  • 9af8384f14 Bump openblas from 0.3.30 to 0.3.32 in conda recipes (#4994)
  • c048917dcd Enable quieting FAISS warning "inverted lists not stored" (#4964)
  • b2ddb465bf Loosen SVS findpackage version requirement (#4969)
  • d8c3d26130 Upgrade to C++20 for CUVS (#4881)
  • 94f2b51fdb Rename train() with queries to train_with_queries (#4955)
  • 02d609caff Upgrade cuVS Version to 26.02 (#4945)
  • 55a47c927c Upgrade cuVS Version to 26.02, switch various BUCK files over to 26.02 (#4788)
  • 0d147a78bc Make READVECTOR byte limit configurable (#4928)
  • 9962fbec6e HNSW: narrow critical section during add to avoid lock contention (#4915)
  • b1feeb79f8 Convert approx_topk and residual_quantizer_encode_steps to SIMDLevel dynamic dispatch (#4923)
  • 58a57e6bca Re-enable backwards compatibility tests for rabitq now that 1.14.1 released (#4924)
  • 5dcef1858d Refactor binary HNSW stats to use OpenMP reduction instead of destructor sync (#4910)
  • d8c1a9785f move distances implementation into SIMD specific compile units (#4906)
  • ea11f0ef9c Switch all search paths to FastScanCodeScanner and remove make_knn_handler (#4904)
  • 57190f91cd Wire RaBitQ search through FastScanCodeScanner dispatch (#4903)
  • 79e8acb072 Parallelize compute_residuals in IndexIVFPQ (#4654)
  • eddea2a607 Extract RaBitQ result handler to impl/fast_scan/ (#4895)
  • 734751a16f Extract PQ4 kernels to includable headers in impl/pq_4bit/ (#4868)
  • bb298a2323 convert simdlib in distances_simd.cpp (#4884)
  • 8d8268c8ae Templatize simdlib types on SIMDLevel (#4866)
  • c74809a7c6 Improve exception safety for the 'own_fields'/allocation pattern (#4864)
  • c6cf004ece use level but not 0 in neighbor_range(i, level, &begin, &end) (line 198) (#5005)

Fixed

  • cb69d7c566 Fix Dq=None crash and np.empty nondeterminism in search_preassigned wrappers (#5221)
  • 5c92c5c1ee Fix flaky test_hnsw smoke test by increasing efSearch (#5222)
  • 8d3cc92536 Fix clone_index null return for IndexRowwiseMinMax (#5220)
  • ff1d543977 Fix python_unnecessary_generator_set_comprehension issues in faiss/tests/test_fastscan_filter.py (#5215)
  • e2359156e0 Fix FastScan DD regression by threading SIMD level through kernel functions (#5210)
  • 172324aea6 Fix IDSelectorBitmap conversion to cuVS bitset (#5211)
  • 6bd749e39b Fix IDSelector leak via SearchParameters.sel setter (#5208)
  • 6376bc35e3 Fix CI: (cuVS) conda shards cache lock, (ARM) bump openblas, (SVS) fix LeanVec double-destruction (#5209)
  • 4b5a73577e Fix python_unnecessary_generator_set_comprehension issues in faiss/.../bench_fw/optimize.py (#5205)
  • 6789bf5eb7 Validate IndexIDMap id_map and inner-index ntotal consistency to prevent search-time null deref (#5203)
  • f750815512 Pin MKL to <2026 to avoid soname mismatch with pytorch (#5192)
  • bb2ce7137d Fix 7 broken tests (#5197)
  • f323c0fa11 Fix backward compat test (#5195)
  • 23cd94cd51 Reduce BinaryCagra test parameters to prevent CI timeouts (#5194)
  • 85fc627c1e Validate ProductQuantizer M*ksub during deserialization to prevent oversized allocations (#5187)
  • 6cef1bb08c Fix cuVS and ROCm CI conda environment failures (#5180)
  • 4a471eebf9 Pin conda <25.7 to fix Windows build (#5176)
  • a9c0d4187b Work around GCC 12 miscompilation of AVX2 histogram (#5124)
  • 40a8cc0034 Fix lints associated with early stop facilities for IVF (#5172)
  • 1e69d5ab20 Fix peak-memory spike when loading IVF invlists via IO_FLAG_MMAP_IFC (#5122)
  • 9942229393 Fix add_sa_codes silently accepting non-int64 ids, corrupting stored labels (#5171)
  • c5ddbc7104 c_api: fix IndexShards own_indices getter/setter name mismatch (#5165)
  • 8380e2543d Fix avx512 unit test (#5161)
  • 71448c07d3 Fix issue with svs tests (#5162)
  • 6c70444d08 Validate code_size during deserialization to prevent oversized allocations (#5151)
  • 9dbb81ca9d Set own_fields after reading Index2Layer sub-quantizer during deserialization (#5147)
  • 01b22b4cc9 Fix memory leak warning for unordered_multimap in IndexIVFFlatDedup Python binding (#1667) (#5145)
  • 130fc2481a Fix flaky test (#5150)
  • dfce6e948e Fix OMP exception safety in IndexHNSW search (#5133)
  • c6273349f9 Fix sa_decode offset bug and integer overflow in IndexRefine (#5143)
  • 1b4b995b97 Fix implicit integer precision loss from 64-bit to 32-bit (#5091)
  • b0568942ef Fix miscellaneous lint warnings (#5093)
  • ed11f283d6 Fix broken fbcode//faiss/tests:test_contrib - test_checkpoint (test_contrib.TestBigBatchSearch) (#5139)
  • 277c53d299 Fix PCA training bug and memory safety issues in VectorTransform.cpp (#5138)
  • 8312540763 Fix integer type truncation in IDSelectorBatch bloom filter mask (#5136)
  • 9cbc8da28e Fix integer overflow and unbounded loop in Clustering.cpp (#5130)
  • 3c4056d822 Fix race condition in HNSW::add_with_locks (#5129)
  • 6e64c5d687 Bump GCC pin in faiss-gpu conda recipe to fix AVX2 SIMD miscompilation (#5125)
  • 58f6ebb7fa Add per-read byte limit to SVS ReaderStreambuf to prevent OOM from corrupt index data (#5118)
  • 817ecf9cd4 Validate inverted list entry sizes against deserialization byte limit (#5117)
  • e6be16241a Validate VectorTransform dimension consistency during deserialization (#5115)
  • 6707eacfaf Add is_trained check to IndexIVF search and range_search to prevent querying untrained indexes (#5114)
  • 349df7035b Validate IndexHNSW2Level storage type during deserialization and search (#5113)
  • edd6f3b54c Reject null quantizer during IVF index deserialization (#5112)
  • 27078c5280 Fix OMP exception safety in IndexNNDescent and IndexNSG search (#5106)
  • 99db159afd Fix OMP exception safety in IndexFlatCodes search (#5105)
  • 40ad64694d Fix cuVS build (#5107)
  • 57bf47410f Fix int/size_t signedness mismatches in HNSW add (#5116)
  • f9f116d303 Validate k_factor during deserialization to prevent search-time OOM (#5104)
  • 2d8232c981 Set code_size on IVFRaBitQFastScanScanner (#5099)
  • b923091c0d fix: GPU CAGRA copyFrom host-memory lifetime dependency and add regression test (#4968)
  • 796977a1ab Fix IndexBinaryMultiHash::reset() not clearing hash maps and avoid unnecessary copies (#5100)
  • b86066a998 fix: cagra bug (#4963)
  • 91f6636b2a Add value-initialization to uninitialized member variables (#5089)
  • 61ed7dc917 Fix orphaned OpenMP directives in IndexRowwiseMinMax training functions (#5096)
  • 740d3a3965 Fix FastScan for indices without own inverted lists + performance optimizations in RaBitQ handler (#5080)
  • 7cc63422d7 Suppress unused static constexpr variable warnings (#5087)
  • aa3ce376ce Fix race condition, memory management, debug output, and hashtable lookup in sorting.cpp (#5078)
  • 86d3371070 Validate FastScan M2 consistency during deserialization (#5056)
  • 67f066f7a0 Validate SVS storage_kind during deserialization (#5055)
  • e899476ceb Default-initialize SVSStorageKind in IndexSVSVamana (#5054)
  • c1e48a2ce1 Add search-path bounds checking to IndexIVF::search1 (#5040)
  • 97d257433a Fix correctness bugs in NNDescent Nhood copy/move operations and gen_random bounds (#5072)
  • 06ef481afa Fix uncaught exceptions in IndexIVF::range_search_preassigned OpenMP region (#5053)
  • 255250985a Fix bugs in NSG search_on_graph and sync_prune (#5063)
  • 7047dc5346 Fix priority_queue constructor inheritance for Apple Clang on macOS (#5065)
  • e0a1aec811 Assorted Dynamic Dispatch cleanup fixes (#5060)
  • 25296bad4f Fix type mismatch bug and remove dead code in IndexRowwiseMinMax::sa_decode_impl (#5051)
  • 7b2705c269 Debug manifold crash with NaN (#5025)
  • 9d3f97e620 Fix duplicate words and grammar typos across codebase (#5044)
  • 84262f09d4 Fix d_out check bug and add descriptive error messages to VectorTransform assertions (#5047)
  • ef28c6beb0 Fix uncaught exceptions in IndexIVF::search_preassigned OpenMP region (#5037)
  • 8008ca2a70 Fix deadly signal in to_svs_metric() for unsupported metrics (#5032)
  • 4b8da6820e Fix IndexSVSVamana null-deref in deserialize_impl (#5029)
  • ab3da522a4 Cap ZnSphereCodecRec decode cache size (#5028)
  • d68050d269 Add missing input validation to IndexFlat::range_search and compute_distance_subset (#5038)
  • c6fa50a451 Validate IndexIDMap id_map size during deserialization (#5024)
  • 408786bec9 Validate AdditiveQuantizer dimension consistency during deserialization (#5023)
  • 0ce4dfb206 Fix AVX512_SPR build failure for 512-bit SIMD types (#5030)
  • a308adae08 Harden ScalarQuantizer deserialization validation (#5020)
  • ab46dcbeae Validate qbs at deserialization time in FastScan index formats (#5019)
  • 668da4a386 Validate IndexBinaryHash b <= code_size*8 during deserialization (#5011)
  • 87bc9b0872 Validate IndexFastScan quantizer state during deserialization (#5009)
  • 4c391564a6 Validate codebooks size at deserialization time in read_AdditiveQuantizer (#5008)
  • 8c1f3f48d4 read-heap-buffer-overflow (size 32) in float faiss::fvec_norm_L2sqr<>()
  • 226ccf3e84 Fix OSX arm64 nightly: bump libopenblas from 0.3.30 to 0.3.32 (#5006)
  • aeb170c15a large-malloc (15023964028 bytes) in __sanitizer::RunMallocHooks() (#5018)
  • 8550f2304a Validate VectorTransform dimensions during deserialization (#5007)
  • 833d4aaf7b out-of-memory in __gnu_cxx::new_allocator<>::allocate() (#5014)
  • d716be39ed Fix avx512_result_handlers build on aarch64 (#4965)
  • 18c85e17e1 Add deserialization vector limit enforcement for ResidualCoarseQuantizer (#4997)
  • b74f3cd8d9 Validate IndexBinaryMultiHash b and nhash*b bounds during deserialization (#4984)
  • b9f49601d1 Add invlists null check to IndexBinaryIVF::search (#4980)
  • ba1981ca4c Add input validation to IndexBinaryHNSW search preconditions (#4979)
  • d26c15d954 Validate binary index consistency during deserialization (#4978)
  • 2c28ef5382 Validate RaBitQ qb during deserialization (#4983)
  • 5a4d62146c deadly-signal (vector::_M_default_append) in __clang_call_terminate (#4986)
  • 0759009bd7 Fix compiler warnings for pip wheel builds (macOS + Windows) (#4989)
  • 8a80b3dd6e signal in faiss::ArrayInvertedListsPanorama::ArrayInvertedListsPanorama() (#4987)
  • 12675affbc out-of-memory in __gnu_cxx::new_allocator<>::allocate() (#4985)
  • 0a8e516058 Fix HNSW Panorama Perf Bug (#4974)
  • 6dbf2713db Validate VectorTransform data during deserialization (#4981)
  • 3f7938924d Fix MSVC link failure: remove __restrict from fvec_madd specializations (#4972)
  • d47b281578 deadly-signal (vector::_M_default_append) in __clang_call_terminate (#4982)
  • f851c54cd9 large-malloc (6241124352 bytes) in __sanitizer::RunMallocHooks() (#4977)
  • bd5ed00c38 Validate inverted lists pointer in IndexIVF operations (#4951)
  • 398857b1ff Handle empty index in IndexHNSWCagra base_level_only search (#4950)
  • d647b596e0 Validate graph index data during deserialization (#4949)
  • e5114c2368 fix: resolve compiler warnings in binary and miscellaneous Index files (#4940)
  • 44f57ba4c9 fix: resolve compiler warnings in top-level FAISS source files (#4943)
  • b3a2914982 fix: resolve compiler warnings in test files (#4944)
  • 88efcb981a fix: resolve compiler warnings in core base classes and headers (#4933)
  • 7acc420929 fix: resolve compiler warnings in inverted lists and cppcontrib (#4939)
  • 64a2122ef1 fix: resolve compiler warnings in IO, result handlers, and misc impl (#4936)
  • a05f13ff6a fix: resolve compiler warnings in PQ, PreTransform, and Refine Index files (#4941)
  • 7645426ac3 fix: resolve compiler warnings in IVF Index implementations (#4942)
  • f5142bfc5d large-malloc (7046432072 bytes) in __sanitizer::RunMallocHooks() (#4967)
  • 4db01e3431 fix: resolve compiler warnings in graph-based index implementations (#4956)
  • ccc3cd619a Validate code vector sizes during index deserialization (#4948)
  • ec30fb387c Use BitstringReader in IndexBinaryHash to avoid OOB reads (#4961)
  • fa8ddd99a3 Fix flaky test for Panaorama/regular IVFFlat equivalence (#4954)
  • 1e6729d53e Validate quantizer data sizes during index deserialization (#4947)
  • 62a1969098 fix: resolve compiler warnings in distance and hamming utilities (#4937)
  • 645a742b51 Re add cuvs to cmakelists.txt (#4953)
  • 5287db0537 fix: resolve compiler warnings in graph-based index implementations (#4934)
  • a48e45af3a fix: resolve compiler warnings in quantizer implementations (#4935)
  • 32ca42f873 fix: resolve compiler warnings in SIMD, sorting, and misc utilities (#4938)
  • 52d9fc7053 Add overflow check in READVECTOR macro (#4946)
  • 0f7e65e53d Enforce memory limit in read_ProductQuantizer (#4930)
  • 9ea026cc93 Validate codes vector size in BlockInvertedLists deserialization (#4920)
  • a4385dfd07 Validate n_per_block and block_size in BlockInvertedLists deserialization (#4919)
  • cdb7254667 Validate id_map size matches ntotal in IndexBinaryIDMap deserialization (#4917)
  • 05ca04e469 Validate per-entry ilsz in read_binary_multi_hash_map (#4916)
  • b023178c5d Fix MSVC OpenMP build: use idx_t instead of size_t in parallel for loop (#4922)
  • 5b83ec6856 Fix OpenMP critical section contention in IndexBinaryHNSW search (#4909)
  • e96ba2d13c fix: decouple coarse quantizer from cuvs index reset (#4885)
  • 9d6b2e7b18 Additional input validation for index deserialization (#4899)
  • 796bdf94a8 Additional binary index input validation (#4898)
  • d0434be649 Fix cloning for IVFFlatPanorama (#4887)
  • 3e4c103d77 Validate dynamic_casts during index load (#4883)
  • 47e53b4468 Fix backward compatibility to use latest version (#4855)

Deprecated

  • 812010fe19 Remove flaky test (#5169)
  • 74dceee903 Remove RaBitQStats debug counters from all RaBitQ handlers (#5102)
  • 000eec283a Delete old pq4_accumulate_loop files (replaced by dispatching.h) (#4905)

1.14.1 - 2026-03-04

Added

  • 5cf2c4203f Expose IndexBinaryFlat to the C API. (#4834)
  • db9ba35118 add hadamard transformation as an index for IVF (#4856)

Changed

  • d2f8d35140 removed conda-forge install documentation (#4843)
  • c90c9dc544 Update python to include 3.13 and 3.14 (#4859)
  • 8af77fe730 SIMD-optimize multi-bit RaBitQ inner product (#4850)
  • ccc934f586 ScalarQuantizer: split SIMD specializations into per-SIMD TUs + DD dispatch (#4839)

Fixed

  • 28f79bd98e Fix 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

  • 033e6acc69 Add RaBitQStats for tracking two-stage search filtering effectiveness (#4723)
  • 64a236744b Add multi-bit support for IndexIVFRaBitQFastScan (#4722)
  • cd2af8bc37 Implement IndexRefinePanorama (#4683)
  • 18d20febb5 Add multi-bit support for IndexRaBitQFastScan (#4721)
  • 7372bc7982 Reapply IndexHNSWFlatPanorama with backward compatible serialization (#4692)
  • 1721ebff6d Also add backwards compatible check for binary (#4714)
  • 98bf8b3808 Implement remaining IndexFlatPanorama functions (#4694)
  • a695814f4c Enable Intel ScalableVectorSearch support (#4548)
  • d81a08e240 Index serialization backward compatibility test (#4706)

Changed

  • 9a6c02b061 Rename RaBitQ factor structs for clarity and reorganize tests (#4730)
  • 281a999aba Enable cuVS in Faiss (#4729)
  • 6452d192cf Update SVS binary to v0.1.0 (#4726)
  • 1ea99d8073 clean up serialization tests (#4700)
  • 89dd5a7b4e Enable -Wunused-exception-parameter in faiss/PACKAGE +1

Fixed

  • 5b19fca3f0 Allow over-writing centroid files to mitigate [S603653] (#4725)
  • 337dfe8043 Fix typos in demos, benchs, and other directories" (#4719)
  • aea2b6bc85 fix(docs): broken link to SVS in INSTALL.md (#4724)
  • 4627695179 Fix SVS Python tutorial (#4720)
  • ac2e3abe38 Update c_api install docs for CMake build system (#4702)
  • abc294419a fix broken test due to renaming to avoid lint (#4712)
  • 3d4d59fc3b Fix 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

  • 2cf82cabf2 Implement PanoramaStats (#4628)
  • 859127cd0b Implement serialization for IndexIVFFlatPanorama (#4636)
  • 7744239dc5 Add getter/setter for balanced_bins in PCAMatrix C API issue #4617 (#4630)
  • e6510bd004 Add immediate notification when autoclose label is applied (#4624)
  • f983e3ab69 Integrate Panorama into IndexIVFFlatPanorama (#4606)
  • 3af3e00103 Implementation of IndexIVFRaBitQFastScan (#4596)
  • f58fd4c8ca Add InvertedListScanner for IVFPQFastScan (#4537)
  • 01d394e583 RaBitQ Fast Scan (#4595)
  • 752832cac9 Add missing Thrust includes (#4597)
  • 6470b8d9d0 Simplify RaBitQ slightly, improving speed and recall (#4550)
  • bc3e3a1ef1 RaBitQ: SIMD helper simplification, use faster popcount for doc-side sum (#4573)
  • b7c88eaff8 Microbenchmarks for rabitq_simd.h (#4572)
  • 786e4051fc RabitQ test coverage for SIMD codepaths (#4571)
  • fa5532734e Adding Idx tags in extended APIs (#4532)
  • fbbb290a57 Set NN Descent Metric From CAGRA Params (#4540)
  • 514b44fca8 OSS changes: Enable ROCm to work with Faiss on BUCK (#4485)

Changed

  • a9cc039aed Upgrade cuVS to 25.10 and build pkg with CUDA=12.6 (#4639)
  • 6ca45d23a7 Optimize IVFRaBitQFastScan query factors: nnlist to nnprobe (#4643)
  • 49df7737f8 Update GitHub workflow to use clang-format-21 (#4644)
  • a0bd7aac69 clang-format | Format fbsource with clang-format 21.
  • 595c8aa8a2 Allow unaligned fast-scan (#4623)
  • 4fab13c9c6 Upgrade Faiss OSS side to numpy2 (#4523)
  • 2505168e18 Expose Remaining IVF-PQ params for CAGRA (#4593)
  • 1ed2611c03 Remove unused imports from faiss directory files (#4565)
  • e5de66e2c2 Use Development.Module component in CMake FindPython (#4549)
  • 3c7235c6c7 Update Install Docs with Correct cuVS Version (#4547)
  • f361df8385 Use c++11 only in headers (#4421)
  • dd637c98d6 Change extended API suffix from Ex to _ex (#4530)

Fixed

  • ff1a2d4f6e Fix typos in core library (root + impl/) (#4670)
  • d94c33065a chore: fix typos in some files (#4669)
  • 5d9f8d484c Fix additional typos found in second review (#4667)
  • 451ca8429d Fix typos in documentation, tutorials, and C API (#4666)
  • d0d066e430 Fix typos in comments and documentation (#4664)
  • 3ffec120fe Fix typos in comments and documentation (#4662)
  • 2af54a46bb Fix typos in comments and documentation (#4661)
  • ec877e794e Fix typos in comments and documentation (#4660)
  • 3de200f5af try to fix nightly (#4657)
  • 18f5574a50 typo: SIFT -> GIST (#4642)
  • 675661b4d3 Fix IndexIVFRaBitQFastScan nprobe handling in search_with_parameters (#4629)
  • 64b1f3a04c Fix autoclose workflow - add GH_REPO for immediate notification
  • e5fee1015a Fix IVFFlatPanorama bench (#4622)
  • 70df32b2e9 Fix IndexIVFRaBitQFastScan by overriding search_preassigned (#4618)
  • 61c1c76929 Fix nightly build on windows due to c++20 initializer (#4612)
  • 513eabc91d Replace static constexpr with inline constexpr in header (#4613)
  • 97dc014472 fix: initializing order of gpu compile options (#4581)
  • dbc7550615 Fix ARM64 compilation error in IndexRaBitQFastScan (#4611)
  • 484dd97ce0 Add IndexBinaryIDMap2 support to index binary factory (#4603)
  • 041ac84318 Fix memory bloat in IndexBinaryHash search due to argument copying in dispatch_HammingComputer (#4600)
  • 2964a374db Fix nightly by updating mkl version (#4604)
  • 7f7b518df5 Unable to import faiss in python in AIX (#4602)
  • 266b71285a Added code to catch 'ModuleNotFoundError' exception (#4577)
  • 3b14dad6d9 Fix AIX compilation issue while building python extension (#4587)
  • 1deba7b90f Add attribute validation to prevent silent failures in SWIG wrappers (#4583)
  • 3671c61af1 more formatting (#4568)
  • d98ff432b9 Fix FAISS build with ROCm7 (#4567)
  • 50b3eb48d2 add "override" to overriden destructors (#4566)
  • 2135e5a28d add missing explicit specifier (#4564)
  • 0031d61da8 Revert D80734790 (#4563)
  • ee6b7ddd9d add #pragma once to some header files (#4562)
  • 8b83ebbf62 fix python blank space lints (#4560)
  • f46ac530b5 Fix missing object reference in Faiss python wrapper for IndexIVFRaBitQ (#4554)
  • 69f1ac0f0f resolve Open Source requirement violations (#4551)
  • dca887a656 Remove unused include from IVFlib.cpp (#4534)
  • 3b3bf5e4e5 bugfix: add a macro guard for avx512 operation (#4539)
  • fe5e77f1cb Remove unnecessary std::move on temporaries to fix -Wpessimizing-move warnings in DeviceTensor-inl.cuh (#4545)
  • 2fca92f477 fix test_binary_cagra tests failure (#4546)
  • 8d9d3bea7c Remove unused includes from AutoTune.cpp (#4533)
  • 75be84d086 Remove unused imports from fbcode/faiss (#4543)
  • 5c61ed8c94 Fix E302 lint errors: Add required blank lines before class definitions (#4541)
  • daceaac99a replace type(x) == y with isinstance(x, y) (#4542)

Deprecated

  • 2705d7a5d3 Delete rocm runner for now until it is fixed (#4658)
  • f9ccd582f9 Remove invalid assertion checking #neighbors == graph degree (#4528)

1.12.0 - 2025-08-11

Added

  • Adding Ex suffix 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)
  • int8 support 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 nullptr in faiss/gpu/StandardGpuResources.cpp (#4232)
  • Make static method in header inline (#4214)
  • Upgrade openblas to 0.3.29 for ARM architectures (#4203)
  • Pass store_dataset argument 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 the ARM architecture (#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_API CMake 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.knn and faiss.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 accepts int32 indices.
  • Nightly conda builds now available (for CPU).
  • Faiss is now supported on Windows.

1.6.3 - 2020-03-24

Added

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

Changed

Fixed

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.