faiss 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +23 -21
- data/ext/faiss/extconf.rb +11 -0
- data/ext/faiss/index.cpp +4 -4
- data/ext/faiss/index_binary.cpp +6 -6
- data/ext/faiss/product_quantizer.cpp +4 -4
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +13 -0
- data/vendor/faiss/faiss/IVFlib.cpp +101 -2
- data/vendor/faiss/faiss/IVFlib.h +26 -2
- data/vendor/faiss/faiss/Index.cpp +36 -3
- data/vendor/faiss/faiss/Index.h +43 -6
- data/vendor/faiss/faiss/Index2Layer.cpp +6 -2
- data/vendor/faiss/faiss/Index2Layer.h +6 -1
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +219 -16
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +63 -5
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +299 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +199 -0
- data/vendor/faiss/faiss/IndexBinary.cpp +20 -4
- data/vendor/faiss/faiss/IndexBinary.h +18 -3
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +9 -2
- data/vendor/faiss/faiss/IndexBinaryFlat.h +4 -2
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -1
- data/vendor/faiss/faiss/IndexBinaryFromFloat.h +2 -1
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +5 -1
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +2 -1
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +17 -4
- data/vendor/faiss/faiss/IndexBinaryHash.h +8 -4
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +28 -13
- data/vendor/faiss/faiss/IndexBinaryIVF.h +10 -7
- data/vendor/faiss/faiss/IndexFastScan.cpp +626 -0
- data/vendor/faiss/faiss/IndexFastScan.h +145 -0
- data/vendor/faiss/faiss/IndexFlat.cpp +34 -21
- data/vendor/faiss/faiss/IndexFlat.h +7 -4
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +35 -1
- data/vendor/faiss/faiss/IndexFlatCodes.h +12 -0
- data/vendor/faiss/faiss/IndexHNSW.cpp +66 -138
- data/vendor/faiss/faiss/IndexHNSW.h +4 -2
- data/vendor/faiss/faiss/IndexIDMap.cpp +247 -0
- data/vendor/faiss/faiss/IndexIDMap.h +107 -0
- data/vendor/faiss/faiss/IndexIVF.cpp +121 -33
- data/vendor/faiss/faiss/IndexIVF.h +35 -16
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +84 -7
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +63 -1
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +590 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +171 -0
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +1290 -0
- data/vendor/faiss/faiss/IndexIVFFastScan.h +213 -0
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +37 -17
- data/vendor/faiss/faiss/IndexIVFFlat.h +4 -2
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +234 -50
- data/vendor/faiss/faiss/IndexIVFPQ.h +5 -1
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +23 -852
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +7 -112
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +3 -3
- data/vendor/faiss/faiss/IndexIVFPQR.h +1 -1
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +3 -1
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +2 -1
- data/vendor/faiss/faiss/IndexLSH.cpp +4 -2
- data/vendor/faiss/faiss/IndexLSH.h +2 -1
- data/vendor/faiss/faiss/IndexLattice.cpp +7 -1
- data/vendor/faiss/faiss/IndexLattice.h +3 -1
- data/vendor/faiss/faiss/IndexNNDescent.cpp +4 -3
- data/vendor/faiss/faiss/IndexNNDescent.h +2 -1
- data/vendor/faiss/faiss/IndexNSG.cpp +37 -3
- data/vendor/faiss/faiss/IndexNSG.h +25 -1
- data/vendor/faiss/faiss/IndexPQ.cpp +106 -69
- data/vendor/faiss/faiss/IndexPQ.h +19 -5
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +15 -450
- data/vendor/faiss/faiss/IndexPQFastScan.h +15 -78
- data/vendor/faiss/faiss/IndexPreTransform.cpp +47 -8
- data/vendor/faiss/faiss/IndexPreTransform.h +15 -3
- data/vendor/faiss/faiss/IndexRefine.cpp +8 -4
- data/vendor/faiss/faiss/IndexRefine.h +4 -2
- data/vendor/faiss/faiss/IndexReplicas.cpp +4 -2
- data/vendor/faiss/faiss/IndexReplicas.h +2 -1
- data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +438 -0
- data/vendor/faiss/faiss/IndexRowwiseMinMax.h +92 -0
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +26 -15
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +6 -7
- data/vendor/faiss/faiss/IndexShards.cpp +4 -1
- data/vendor/faiss/faiss/IndexShards.h +2 -1
- data/vendor/faiss/faiss/MetaIndexes.cpp +5 -178
- data/vendor/faiss/faiss/MetaIndexes.h +3 -81
- data/vendor/faiss/faiss/VectorTransform.cpp +43 -0
- data/vendor/faiss/faiss/VectorTransform.h +22 -4
- data/vendor/faiss/faiss/clone_index.cpp +23 -1
- data/vendor/faiss/faiss/clone_index.h +3 -0
- data/vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h +300 -0
- data/vendor/faiss/faiss/cppcontrib/detail/CoarseBitType.h +24 -0
- data/vendor/faiss/faiss/cppcontrib/detail/UintReader.h +195 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +2058 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +408 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h +2147 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMax-inl.h +460 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMaxFP16-inl.h +465 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +1618 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +251 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h +1452 -0
- data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +1 -0
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +0 -4
- data/vendor/faiss/faiss/gpu/GpuIndex.h +28 -4
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +2 -1
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +10 -8
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +75 -14
- data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +19 -32
- data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +22 -31
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +22 -28
- data/vendor/faiss/faiss/gpu/GpuResources.cpp +14 -0
- data/vendor/faiss/faiss/gpu/GpuResources.h +16 -3
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +3 -3
- data/vendor/faiss/faiss/gpu/impl/IndexUtils.h +32 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +1 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +311 -75
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +10 -0
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +3 -0
- data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +2 -2
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +5 -4
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +116 -47
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +44 -13
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +0 -54
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +0 -76
- data/vendor/faiss/faiss/impl/DistanceComputer.h +64 -0
- data/vendor/faiss/faiss/impl/HNSW.cpp +123 -27
- data/vendor/faiss/faiss/impl/HNSW.h +19 -16
- data/vendor/faiss/faiss/impl/IDSelector.cpp +125 -0
- data/vendor/faiss/faiss/impl/IDSelector.h +135 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +6 -28
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +6 -1
- data/vendor/faiss/faiss/impl/LookupTableScaler.h +77 -0
- data/vendor/faiss/faiss/impl/NNDescent.cpp +1 -0
- data/vendor/faiss/faiss/impl/NSG.cpp +1 -1
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +383 -0
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.h +154 -0
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +225 -145
- data/vendor/faiss/faiss/impl/ProductQuantizer.h +29 -10
- data/vendor/faiss/faiss/impl/Quantizer.h +43 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +192 -36
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +40 -20
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -0
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +97 -173
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +18 -18
- data/vendor/faiss/faiss/impl/index_read.cpp +240 -9
- data/vendor/faiss/faiss/impl/index_write.cpp +237 -5
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +6 -4
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +56 -16
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +25 -8
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +66 -25
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +75 -27
- data/vendor/faiss/faiss/index_factory.cpp +196 -7
- data/vendor/faiss/faiss/index_io.h +5 -0
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +1 -0
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +4 -1
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +2 -1
- data/vendor/faiss/faiss/python/python_callbacks.cpp +27 -0
- data/vendor/faiss/faiss/python/python_callbacks.h +15 -0
- data/vendor/faiss/faiss/utils/Heap.h +31 -15
- data/vendor/faiss/faiss/utils/distances.cpp +380 -56
- data/vendor/faiss/faiss/utils/distances.h +113 -15
- data/vendor/faiss/faiss/utils/distances_simd.cpp +726 -6
- data/vendor/faiss/faiss/utils/extra_distances.cpp +12 -7
- data/vendor/faiss/faiss/utils/extra_distances.h +3 -1
- data/vendor/faiss/faiss/utils/fp16-fp16c.h +21 -0
- data/vendor/faiss/faiss/utils/fp16-inl.h +101 -0
- data/vendor/faiss/faiss/utils/fp16.h +11 -0
- data/vendor/faiss/faiss/utils/hamming-inl.h +54 -0
- data/vendor/faiss/faiss/utils/hamming.cpp +0 -48
- data/vendor/faiss/faiss/utils/ordered_key_value.h +10 -0
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +62 -0
- data/vendor/faiss/faiss/utils/quantize_lut.h +20 -0
- data/vendor/faiss/faiss/utils/random.cpp +53 -0
- data/vendor/faiss/faiss/utils/random.h +5 -0
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +4 -0
- data/vendor/faiss/faiss/utils/simdlib_emulated.h +6 -1
- data/vendor/faiss/faiss/utils/simdlib_neon.h +7 -2
- metadata +37 -3
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
namespace faiss {
|
|
20
20
|
|
|
21
|
+
struct IDSelector;
|
|
22
|
+
|
|
21
23
|
/*********************************************************
|
|
22
24
|
* Optimized distance/norm/inner prod computations
|
|
23
25
|
*********************************************************/
|
|
@@ -71,6 +73,29 @@ void fvec_L2sqr_ny(
|
|
|
71
73
|
size_t d,
|
|
72
74
|
size_t ny);
|
|
73
75
|
|
|
76
|
+
/* compute ny square L2 distance between x and a set of contiguous y vectors
|
|
77
|
+
and return the index of the nearest vector.
|
|
78
|
+
return 0 if ny == 0. */
|
|
79
|
+
size_t fvec_L2sqr_ny_nearest(
|
|
80
|
+
float* distances_tmp_buffer,
|
|
81
|
+
const float* x,
|
|
82
|
+
const float* y,
|
|
83
|
+
size_t d,
|
|
84
|
+
size_t ny);
|
|
85
|
+
|
|
86
|
+
/* compute ny square L2 distance between x and a set of transposed contiguous
|
|
87
|
+
y vectors and return the index of the nearest vector.
|
|
88
|
+
squared lengths of y should be provided as well
|
|
89
|
+
return 0 if ny == 0. */
|
|
90
|
+
size_t fvec_L2sqr_ny_nearest_y_transposed(
|
|
91
|
+
float* distances_tmp_buffer,
|
|
92
|
+
const float* x,
|
|
93
|
+
const float* y,
|
|
94
|
+
const float* y_sqlen,
|
|
95
|
+
size_t d,
|
|
96
|
+
size_t d_offset,
|
|
97
|
+
size_t ny);
|
|
98
|
+
|
|
74
99
|
/** squared norm of a vector */
|
|
75
100
|
float fvec_norm_L2sqr(const float* x, size_t d);
|
|
76
101
|
|
|
@@ -198,11 +223,11 @@ FAISS_API extern int distance_compute_blas_database_bs;
|
|
|
198
223
|
FAISS_API extern int distance_compute_min_k_reservoir;
|
|
199
224
|
|
|
200
225
|
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
201
|
-
* vector y, w.r.t to max inner product
|
|
226
|
+
* vector y, w.r.t to max inner product.
|
|
202
227
|
*
|
|
203
228
|
* @param x query vectors, size nx * d
|
|
204
229
|
* @param y database vectors, size ny * d
|
|
205
|
-
* @param res result
|
|
230
|
+
* @param res result heap structure, which also provides k. Sorted on output
|
|
206
231
|
*/
|
|
207
232
|
void knn_inner_product(
|
|
208
233
|
const float* x,
|
|
@@ -210,10 +235,35 @@ void knn_inner_product(
|
|
|
210
235
|
size_t d,
|
|
211
236
|
size_t nx,
|
|
212
237
|
size_t ny,
|
|
213
|
-
float_minheap_array_t* res
|
|
238
|
+
float_minheap_array_t* res,
|
|
239
|
+
const IDSelector* sel = nullptr);
|
|
214
240
|
|
|
215
|
-
/**
|
|
216
|
-
*
|
|
241
|
+
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
242
|
+
* vector y, for the inner product metric.
|
|
243
|
+
*
|
|
244
|
+
* @param x query vectors, size nx * d
|
|
245
|
+
* @param y database vectors, size ny * d
|
|
246
|
+
* @param distances output distances, size nq * k
|
|
247
|
+
* @param indexes output vector ids, size nq * k
|
|
248
|
+
*/
|
|
249
|
+
void knn_inner_product(
|
|
250
|
+
const float* x,
|
|
251
|
+
const float* y,
|
|
252
|
+
size_t d,
|
|
253
|
+
size_t nx,
|
|
254
|
+
size_t ny,
|
|
255
|
+
size_t k,
|
|
256
|
+
float* distances,
|
|
257
|
+
int64_t* indexes,
|
|
258
|
+
const IDSelector* sel = nullptr);
|
|
259
|
+
|
|
260
|
+
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
261
|
+
* vector y, for the L2 distance
|
|
262
|
+
* @param x query vectors, size nx * d
|
|
263
|
+
* @param y database vectors, size ny * d
|
|
264
|
+
* @param res result heap strcture, which also provides k. Sorted on output
|
|
265
|
+
* @param y_norm2 (optional) norms for the y vectors (nullptr or size ny)
|
|
266
|
+
* @param sel search in this subset of vectors
|
|
217
267
|
*/
|
|
218
268
|
void knn_L2sqr(
|
|
219
269
|
const float* x,
|
|
@@ -222,28 +272,74 @@ void knn_L2sqr(
|
|
|
222
272
|
size_t nx,
|
|
223
273
|
size_t ny,
|
|
224
274
|
float_maxheap_array_t* res,
|
|
225
|
-
const float* y_norm2 = nullptr
|
|
275
|
+
const float* y_norm2 = nullptr,
|
|
276
|
+
const IDSelector* sel = nullptr);
|
|
226
277
|
|
|
227
|
-
|
|
278
|
+
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
279
|
+
* vector y, for the L2 distance
|
|
280
|
+
*
|
|
281
|
+
* @param x query vectors, size nx * d
|
|
282
|
+
* @param y database vectors, size ny * d
|
|
283
|
+
* @param distances output distances, size nq * k
|
|
284
|
+
* @param indexes output vector ids, size nq * k
|
|
285
|
+
* @param y_norm2 (optional) norms for the y vectors (nullptr or size ny)
|
|
286
|
+
* @param sel search in this subset of vectors
|
|
287
|
+
*/
|
|
288
|
+
void knn_L2sqr(
|
|
289
|
+
const float* x,
|
|
290
|
+
const float* y,
|
|
291
|
+
size_t d,
|
|
292
|
+
size_t nx,
|
|
293
|
+
size_t ny,
|
|
294
|
+
size_t k,
|
|
295
|
+
float* distances,
|
|
296
|
+
int64_t* indexes,
|
|
297
|
+
const float* y_norm2 = nullptr,
|
|
298
|
+
const IDSelector* sel = nullptr);
|
|
299
|
+
|
|
300
|
+
/** Find the max inner product neighbors for nx queries in a set of ny vectors
|
|
228
301
|
* indexed by ids. May be useful for re-ranking a pre-selected vector list
|
|
302
|
+
*
|
|
303
|
+
* @param x query vectors, size nx * d
|
|
304
|
+
* @param y database vectors, size (max(ids) + 1) * d
|
|
305
|
+
* @param ids subset of database vectors to consider, size (nx, nsubset)
|
|
306
|
+
* @param res result structure
|
|
307
|
+
* @param ld_ids stride for the ids array. -1: use nsubset, 0: all queries
|
|
308
|
+
* process the same subset
|
|
229
309
|
*/
|
|
230
310
|
void knn_inner_products_by_idx(
|
|
231
311
|
const float* x,
|
|
232
312
|
const float* y,
|
|
233
|
-
const int64_t*
|
|
313
|
+
const int64_t* subset,
|
|
234
314
|
size_t d,
|
|
235
315
|
size_t nx,
|
|
236
|
-
size_t
|
|
237
|
-
|
|
316
|
+
size_t nsubset,
|
|
317
|
+
size_t k,
|
|
318
|
+
float* vals,
|
|
319
|
+
int64_t* ids,
|
|
320
|
+
int64_t ld_ids = -1);
|
|
238
321
|
|
|
322
|
+
/** Find the nearest neighbors for nx queries in a set of ny vectors
|
|
323
|
+
* indexed by ids. May be useful for re-ranking a pre-selected vector list
|
|
324
|
+
*
|
|
325
|
+
* @param x query vectors, size nx * d
|
|
326
|
+
* @param y database vectors, size (max(ids) + 1) * d
|
|
327
|
+
* @param subset subset of database vectors to consider, size (nx, nsubset)
|
|
328
|
+
* @param res rIDesult structure
|
|
329
|
+
* @param ld_subset stride for the subset array. -1: use nsubset, 0: all queries
|
|
330
|
+
* process the same subset
|
|
331
|
+
*/
|
|
239
332
|
void knn_L2sqr_by_idx(
|
|
240
333
|
const float* x,
|
|
241
334
|
const float* y,
|
|
242
|
-
const int64_t*
|
|
335
|
+
const int64_t* subset,
|
|
243
336
|
size_t d,
|
|
244
337
|
size_t nx,
|
|
245
|
-
size_t
|
|
246
|
-
|
|
338
|
+
size_t nsubset,
|
|
339
|
+
size_t k,
|
|
340
|
+
float* vals,
|
|
341
|
+
int64_t* ids,
|
|
342
|
+
int64_t ld_subset = -1);
|
|
247
343
|
|
|
248
344
|
/***************************************************************************
|
|
249
345
|
* Range search
|
|
@@ -267,7 +363,8 @@ void range_search_L2sqr(
|
|
|
267
363
|
size_t nx,
|
|
268
364
|
size_t ny,
|
|
269
365
|
float radius,
|
|
270
|
-
RangeSearchResult* result
|
|
366
|
+
RangeSearchResult* result,
|
|
367
|
+
const IDSelector* sel = nullptr);
|
|
271
368
|
|
|
272
369
|
/// same as range_search_L2sqr for the inner product similarity
|
|
273
370
|
void range_search_inner_product(
|
|
@@ -277,7 +374,8 @@ void range_search_inner_product(
|
|
|
277
374
|
size_t nx,
|
|
278
375
|
size_t ny,
|
|
279
376
|
float radius,
|
|
280
|
-
RangeSearchResult* result
|
|
377
|
+
RangeSearchResult* result,
|
|
378
|
+
const IDSelector* sel = nullptr);
|
|
281
379
|
|
|
282
380
|
/***************************************************************************
|
|
283
381
|
* PQ tables computations
|