Download Latest Version v1.15.0 source code.zip (2.5 MB)
Email in envelope

Get an email when there's a new version of Faiss

Home / v1.15.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-08-03 11.3 kB
v1.15.0 source code.tar.gz 2026-08-03 1.8 MB
v1.15.0 source code.zip 2026-08-03 2.5 MB
Totals: 3 Items   4.3 MB 3

[1.15.0] - 2026-07-31

Full changelog

Added

  • [4332ce] Enable byte-LUT gather path for QT_8bit_eden distance computation (#5498)
  • [41133f] Add EDEN quantizer indexes (#5278)
  • [3110fd] Add MetalIndexIVFPQ with product quantization and residual encoding support (#5288)
  • [6c2b68] Adding cuVS IVF-SQ backend (#5306)
  • [4d778b] Add multi-GPU CAGRA → HNSW build with trainAllNeighbors and multi-GPU optimize (#5282)
  • [42dc28] Implement memory-mapped I/O for Flat and static Vamana SVS indices (#5271)
  • [d22107] feat(riscv): Add RISC-V RVV rabitq kernels (#5369)
  • [df5101] feat(riscv): Add RISC-V RVV vector distance kernels (#5354)
  • [3b52da] Add AVX2 and AVX512 byte-domain kernels for QT_8bit_direct_signed (#5409)
  • [88b6c4] Implement IVFRaBitQ FastScan conversion constructor (#5422)
  • [d24cc8] Implement GPU IVF add_preassigned via add_core (implement [#3908]) (#5372)
  • [582657] Read/Write support for IndexHNSW base class (#5305)
  • [a3350f] faiss: support METRIC_L1 and extra metrics in IndexFlat range_search (#5391)
  • [432e8b] Extend DistanceComputer batching to PQ, SQ, and PreTransform (#5309)
  • [7d4bb3] Extract super_kmeans_assign_iteration as a shared public SuperKMeans kernel (#5443)
  • [aff858] c_api: expose ScalarQuantizer codec and complete FaissQuantizerType enum (#5477)
  • [13aa39] Clone index support for HadamardRotation (#5475)
  • [3e313e] SIMDConfig::has_dynamic_dispatch() (#5460)
  • [a6f977] Add faiss-gpu-cuvs pip wheel packaging (#5250)
  • [622732] pyfaiss_gpu_cuvs_2602: cuVS faiss Python for aarch64/GH200 (26.02, CUDA 12.4)
  • [522644] Stand up parallel cuVS 26.02 IVF-PQ targets (rmm/raft/cuvs) at CUDA 12.8 (#5414)
  • [edebab] Include Python type stubs (init.pyi, py.typed) in conda packages (#5394)
  • [9579d8] Add type stubs for SVS index classes + IndexIVFFlatPanorama.batch_size (#5489)
  • [fd7be0] Add QT_0bit and QT_2bit_tq..QT_5bit_tq to ScalarQuantizer pyi stub (#5323)
  • [ccecc8] Add ClusteringInitMethod enum constants to init.pyi stub (#5324)
  • [55990e] Port test_rabitq_utils from C++ to Python (#5442)

Changed

  • [023639] Optimize RaBitQ fastscan query setup + 80% qps (#5396)
  • [b1d61c] Fuse RaBitQ AND-dot and popcount scan (#5412)
  • [81031a] RaBitQ fastscan avx512 lut quant (#5397)
  • [b7f2b0] RaBitQ SIMD-optimized bit-plane operation (#5392)
  • [0a2770] Reuse RaBitQ IVF scanner distance computer (#5390)
  • [a3d59f] faiss DD: use 256-bit fast-scan QBS kernel on AMD Zen 4 (split AVX-512) (#5488)
  • [c374dd] Panorama HNSW Optimizations (~x1.2) (#5190)
  • [cb9a72] Reuse the HNSW visited table across searches instead of reallocating per call (#5448)
  • [4d1657] Raise HNSW visited-table hash-set threshold from 500k to 10M (#5446)
  • [a4b4c0] Optimize exhaustive_L2sqr_blas_cmax with AVX-512 intrinsics. (#4569)
  • [4a2f7e] Optimize the DistanceComputerByte::compute_code_distance with AVX512F, AVX512BW, AVX512VL instructions (#5067)
  • [9a74c6] Speed up Top1 and Reservoir add_results with AVX2/AVX512 (#5297)
  • [4030fa] Speed up polysemous training with AVX-512.
  • [ea1076] Parallelize inverted-list append loop in IndexIVFPQ::add_core_o (#5382)
  • [cf0457] ProductQuantizer::search_sdc: hoist per-subquantizer row pointers out of database-vector loop (#5338)
  • [caf88f] Improve ranklist intersection size (#5237)
  • [5c1afe] Remove dead code in quantize_ex_bits to avoid wasted compute (#5384)
  • [e3dd6a] Remove unused fields in various DistanceComputers (#5318)
  • [35c549] Remove confusing double-negative throw-macro conditions (#5471)
  • [9223d6] Rename SQI8 to SQ8 to be consistent with the rest of Faiss (#5337)
  • [b37e92] Reuse faiss.ResultHeap in benchs instead of duplicating it (#5363)
  • [1f755e] Prune cuVS brute-force flat index on aarch64 (FAISS_CUVS_NO_FLAT) (#5431)
  • [3a7cce] Faiss OSS CI: skip GPU jobs on PRs that touch no GPU-relevant code (#5402)
  • [0f48ae] Faiss OSS autofix: force cuVS nightly to break (E2E validation) (#5328)
  • [0f0f72] Format faiss Python files with black (line length 80) (#5349)
  • [7a7a8f] Align faiss .flake8 with black and the 80-char standard (#5350)
  • [259fa8] black -l 80: gpu/test formatting (1/3) (#5426)
  • [a7d91d] black -l 80: tests/ formatting (2/3) (#5427)
  • [393755] black -l 80: benchs + python + refine test formatting (3/3) (#5428)
  • [b75a23] black -l 80: python/init.pyi formatting (4/4) (#5429)
  • [a23893] Finish E501 line-length lint sweep across faiss (183 violations, 52 files) (#5444)
  • [d4564b] facebook-unused-include-check in distances_avx2.cpp (#5462)
  • [ab3a5a] facebook-unused-include-check in IndexIVFPQ.cpp (#5461)
  • [e85b9b] facebook-unused-include-check in test_svs.cpp (#5455)
  • [5e1ccc] facebook-unused-include-check in TestGpuIndexIVFScalarQuantizer.cpp (#5454)
  • [003e00] facebook-unused-include-check in IndexBinaryHash.cpp (#5453)
  • [c22dc2] facebook-unused-include-check in avx2.cpp (#5452)
  • [76e2bb] facebook-unused-include-check in IndexBinaryHNSW.cpp (#5379)
  • [7c643c] facebook-unused-include-check in IndexIVFPQFastScan.cpp (#5378)
  • [3c5c27] facebook-unused-include-check in avx2.cpp (#5377)
  • [9b3396] facebook-unused-include-check in test_ivf_early_termination.cpp (#5376)
  • [027054] facebook-unused-include-check in IVFPQ_QueryTables.cpp (#5359)
  • [f4cb96] facebook-unused-include-check in avx2.cpp (#5358)
  • [afc1be] facebook-unused-include-check in hamming.cpp (#5355)
  • [6256cc] facebook-unused-include-check in IndexIVF.cpp (#5356)
  • [83dc6a] facebook-unused-include-check in IndexIVFSpectralHash.cpp (#5357)
  • [124bfa] facebook-unused-include-check in IndexSVSVamanaLeanVec.cpp (#5343)
  • [a0457d] facebook-unused-include-check in avx2.cpp (#5344)
  • [595c5d] facebook-unused-include-check in distances_simd.cpp (#5342)
  • [543725] facebook-unused-include-check in avx2.cpp (#5314)
  • [7c56a9] facebook-unused-include-check in avx2.cpp (#5315)
  • [0f280a] facebook-unused-include-check in distances_simd.cpp (#5316)

Fixed

  • [6187d9] clang-diagnostic-unused-parameter in GpuCloner.cpp (#5480)
  • [37313e] Fix two memory leaks in shard_ivf_index_centroids (#5495)
  • [7a4e79] Fix RaBitQ fast scan aux offsets for large bbs (#5421)
  • [a03279] faiss DD: SQ AVX-512 falls back to AVX2 when d%16!=0 (#5478)
  • [de8520] missing auto vectorization for AVX512-SPR (#5433)
  • [4a2393] Fix AVX-512 PQ-encode falling back to scalar in fvec_L2sqr_ny_nearest_y_transposed (#5330)
  • [7437ca] Fix Jaccard heap selection in IVF search (#5408)
  • [458c7b] Fix division-by-zero in quantize_lut when all LUT entries are identical (#5424)
  • [ecd5b6] Guard constant/zero-norm query in RaBitQ query quantization (#5381)
  • [1190b7] RaBitQ: Clamp L2 distance estimate to >=0 (#5393)
  • [af45a3] Throw instead of abort on null buffer in RaBitQuantizer::decode_core (#5465)
  • [5372c8] Guard exhaustive_{inner_product,L2sqr}_seq against empty query batches (nx=0) (#5445)
  • [764b86] Guard ScalarQuantizer compute_codes/decode OMP region for small n (#5423)
  • [19f477] Fix out-of-bounds memory access in bvec_checksum (#5310)
  • [3553e0] Fix IndexAdditiveQuantizer::symmetric_dis() (#5319)
  • [b7cd01] Filter out-of-radius results in IndexRefine::range_search (#5370)
  • [421367] Always widen IndexRefine::range_search base radius by k_factor (#5395)
  • [ed29db] faiss: fix IndexIDMap range_search crash with empty SearchParameters (#5388)
  • [828de1] fix IDMap add_sa_codes returning -1 labels with ivf subindex Issue [#5333] (#5345)
  • [bf5310] Fix get_code_size to handle HNSW coarse quantizers with any M value (#5416)
  • [e1f8d4] Fix reverse_index_factory for multi-bit RaBitQ indexes (#5419)
  • [7b1d0c] Fix C++ reverse_index_factory: missing qtypes crash telemetry, IDMap2 misidentified (#5417)
  • [cc9be4] fix: reverse_index_factory missing 11 SQ types including all TurboQuant variants (#5322)
  • [350a50] Fix OperatingPoints::add prune loop leaving dominated points at equal time (#5415)
  • [bd6760] Fix OperatingPoints leaving dominated points on the Pareto frontier for equal-time points (#5334)
  • [376930] Fix null dereference, dead condition, and Python binding crash in AutoTune and Clustering (#5321)
  • [e306f3] Fix PyCallbackShardingFunction to properly decrement references (#5389)
  • [d91b73] fix: bs add n fix valid counter skip (#5383)
  • [247527] Fix reconstruct_n stubs resolving to torch.Tensor for numpy calls (#5411)
  • [a3e8c6] Fix heap-buffer-overflow in ResidualCoarseQuantizer deserialization (T280514309) (#5485)
  • [4d7491] Bound lattice_nbit loop in IndexLattice ctor to fix deserialization timeout (T277092535) (#5484)
  • [5987f5] Reject nbits==0 ProductQuantizer on deserialization (T279464247) (#5483)
  • [269ac4] Bound recursion depth in index deserialization (CWE-674) (#5468)
  • [a20b22] Bound decode-cache compute in ZnSphereCodecRec deserialization (#5467)
  • [6a0616] Reject null base/refine index in IndexRefine deserialization (#5466)
  • [bc102d] Bound IVFPQ precomputed-table allocation at deserialization time (#5464)
  • [756c5d] Harden FastScan deserialization: enforce ksub==16 and bound reconstruct() (#5436)
  • [f1efc2] Validate codes/ntotal consistency in Ix2L and IxLa deserialization (#5439)
  • [fba908] Validate Panorama batch_size and codes/cum_sums on deserialization (#5438)
  • [d43336] Validate SVS-Vamana stored_vectors size on deserialization (ISV2) (#5434)
  • [dfd2a2] Reject degenerate code_size==0 IndexPQ with ntotal>0 on deserialization (#5437)
  • [91ce5f] Harden reconstruct()/reset() against null storage in composite indexes (#5440)
  • [ea8e22] Bounds-check decoded direct_map entry in IndexIVF::reconstruct (#5435)
  • [79f59e] Validate legacy IVFFlat per-list codes size against ids size (#5259)
  • [c428ca] Harden OnDiskInvertedLists mmap reader against malformed list sizes (#5312)
  • [6f62d0] Guard against integer overflow in index deserialization storage-size checks (#5313)
  • [16c5d7] Don't redefine PRETTY_FUNCTION under clang-cl (#5474)
  • [a96834] clang-diagnostic-unused-parameter in bench_result_handler_overhead.cpp (#5481)
  • [d6d3dc] clang-diagnostic-unused-parameter in bench_cppcontrib_sa_decode.cpp (#5479)
  • [8d0d1a] faiss/gpu/perf: check CUDA return in PerfIVFPQAdd (clang21 nodiscard) (#5368)
  • [0fa5b0] faiss/gpu/perf: check cudaProfilerStop() return (fix clang21 -Wunused-value) (#5362)
  • [6f0155] Keep distances_simdlib256.h include in distances_simd.cpp (unused-include false positive) (#5380)
  • [22220d] Fix genuine flake8 lint in faiss Python (F401/F403/F841/B011) (#5351)
  • [63378f] Fix cuVS GPU CI timeout: pin CUDA toolkit to 13.2 (#5401)
  • [11bd76] Faiss OSS nightly autofix (#5346)
  • [7cd1ae] Fix panorama tests: pass D_panorama (not D_regular) to check_ref_knn_with_draws (#5430)
  • [ba6af9] Fix flaky IVF/Refine Panorama kNN tests under AVX512_SPR dispatch (#5420)
  • [6653b9] Fix flaky TestIVFRaBitQ_AVX2::test_comparison_vs_ref_L2_rrot — apply cross-SIMD equivalence (#5325)
  • [aa9d2b] De-flake test_flat_panorama across SIMD levels (#5361)
  • [395eaf] De-flake panorama / graph_based / hamming_utils tests (#5339)
  • [08cb1f] De-flake test_refine_panorama.test_incremental_add (seed + tolerance) (#5347)
  • [8bfcb4] De-flake test_meta_index.Shards.test_shards (loosen tie-churn tolerance) (#5348)
  • [54f83a] De-flake bench_transposed_encode (CI timeout) (#5360)
Source: README.md, updated 2026-08-03