faiss 0.3.0 → 0.3.1

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.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +1 -1
  5. data/ext/faiss/extconf.rb +9 -2
  6. data/ext/faiss/index.cpp +1 -1
  7. data/ext/faiss/index_binary.cpp +2 -2
  8. data/ext/faiss/product_quantizer.cpp +1 -1
  9. data/lib/faiss/version.rb +1 -1
  10. data/vendor/faiss/faiss/AutoTune.cpp +7 -7
  11. data/vendor/faiss/faiss/AutoTune.h +0 -1
  12. data/vendor/faiss/faiss/Clustering.cpp +4 -18
  13. data/vendor/faiss/faiss/Clustering.h +31 -21
  14. data/vendor/faiss/faiss/IVFlib.cpp +22 -11
  15. data/vendor/faiss/faiss/Index.cpp +1 -1
  16. data/vendor/faiss/faiss/Index.h +20 -5
  17. data/vendor/faiss/faiss/Index2Layer.cpp +7 -7
  18. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +176 -166
  19. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +15 -15
  20. data/vendor/faiss/faiss/IndexBinary.cpp +9 -4
  21. data/vendor/faiss/faiss/IndexBinary.h +8 -19
  22. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +2 -1
  23. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +24 -31
  24. data/vendor/faiss/faiss/IndexBinaryHash.cpp +25 -50
  25. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +106 -187
  26. data/vendor/faiss/faiss/IndexFastScan.cpp +90 -159
  27. data/vendor/faiss/faiss/IndexFastScan.h +9 -8
  28. data/vendor/faiss/faiss/IndexFlat.cpp +195 -3
  29. data/vendor/faiss/faiss/IndexFlat.h +20 -1
  30. data/vendor/faiss/faiss/IndexFlatCodes.cpp +11 -0
  31. data/vendor/faiss/faiss/IndexFlatCodes.h +3 -1
  32. data/vendor/faiss/faiss/IndexHNSW.cpp +112 -316
  33. data/vendor/faiss/faiss/IndexHNSW.h +12 -48
  34. data/vendor/faiss/faiss/IndexIDMap.cpp +69 -28
  35. data/vendor/faiss/faiss/IndexIDMap.h +24 -2
  36. data/vendor/faiss/faiss/IndexIVF.cpp +159 -53
  37. data/vendor/faiss/faiss/IndexIVF.h +37 -5
  38. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +18 -26
  39. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +3 -2
  40. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +19 -46
  41. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +4 -3
  42. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +433 -405
  43. data/vendor/faiss/faiss/IndexIVFFastScan.h +56 -26
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +15 -5
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +3 -2
  46. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +172 -0
  47. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.h +56 -0
  48. data/vendor/faiss/faiss/IndexIVFPQ.cpp +78 -122
  49. data/vendor/faiss/faiss/IndexIVFPQ.h +6 -7
  50. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +18 -50
  51. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +4 -3
  52. data/vendor/faiss/faiss/IndexIVFPQR.cpp +45 -29
  53. data/vendor/faiss/faiss/IndexIVFPQR.h +5 -2
  54. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +25 -27
  55. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +6 -6
  56. data/vendor/faiss/faiss/IndexLSH.cpp +14 -16
  57. data/vendor/faiss/faiss/IndexNNDescent.cpp +3 -4
  58. data/vendor/faiss/faiss/IndexNSG.cpp +11 -27
  59. data/vendor/faiss/faiss/IndexNSG.h +10 -10
  60. data/vendor/faiss/faiss/IndexPQ.cpp +72 -88
  61. data/vendor/faiss/faiss/IndexPQ.h +1 -4
  62. data/vendor/faiss/faiss/IndexPQFastScan.cpp +1 -1
  63. data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -31
  64. data/vendor/faiss/faiss/IndexRefine.cpp +49 -19
  65. data/vendor/faiss/faiss/IndexRefine.h +7 -0
  66. data/vendor/faiss/faiss/IndexReplicas.cpp +23 -26
  67. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +22 -16
  68. data/vendor/faiss/faiss/IndexScalarQuantizer.h +6 -4
  69. data/vendor/faiss/faiss/IndexShards.cpp +21 -29
  70. data/vendor/faiss/faiss/IndexShardsIVF.cpp +1 -2
  71. data/vendor/faiss/faiss/MatrixStats.cpp +17 -32
  72. data/vendor/faiss/faiss/MatrixStats.h +21 -9
  73. data/vendor/faiss/faiss/MetaIndexes.cpp +35 -35
  74. data/vendor/faiss/faiss/VectorTransform.cpp +13 -26
  75. data/vendor/faiss/faiss/VectorTransform.h +7 -7
  76. data/vendor/faiss/faiss/clone_index.cpp +15 -10
  77. data/vendor/faiss/faiss/clone_index.h +3 -0
  78. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +87 -4
  79. data/vendor/faiss/faiss/gpu/GpuCloner.h +22 -0
  80. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +7 -0
  81. data/vendor/faiss/faiss/gpu/GpuDistance.h +46 -38
  82. data/vendor/faiss/faiss/gpu/GpuIndex.h +28 -4
  83. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +4 -4
  84. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +8 -9
  85. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +18 -3
  86. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +22 -11
  87. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +1 -3
  88. data/vendor/faiss/faiss/gpu/GpuResources.cpp +24 -3
  89. data/vendor/faiss/faiss/gpu/GpuResources.h +39 -11
  90. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +117 -17
  91. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +57 -3
  92. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +1 -1
  93. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +25 -0
  94. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +129 -9
  95. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +267 -40
  96. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +299 -208
  97. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +1 -0
  98. data/vendor/faiss/faiss/gpu/utils/RaftUtils.h +75 -0
  99. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +3 -1
  100. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +5 -5
  101. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +1 -1
  102. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +1 -2
  103. data/vendor/faiss/faiss/impl/DistanceComputer.h +24 -1
  104. data/vendor/faiss/faiss/impl/FaissException.h +13 -34
  105. data/vendor/faiss/faiss/impl/HNSW.cpp +321 -70
  106. data/vendor/faiss/faiss/impl/HNSW.h +9 -8
  107. data/vendor/faiss/faiss/impl/IDSelector.h +4 -4
  108. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +3 -1
  109. data/vendor/faiss/faiss/impl/NNDescent.cpp +29 -19
  110. data/vendor/faiss/faiss/impl/NSG.h +1 -1
  111. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +14 -12
  112. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.h +1 -1
  113. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +24 -22
  114. data/vendor/faiss/faiss/impl/ProductQuantizer.h +1 -1
  115. data/vendor/faiss/faiss/impl/Quantizer.h +1 -1
  116. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +27 -1015
  117. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +5 -63
  118. data/vendor/faiss/faiss/impl/ResultHandler.h +232 -176
  119. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +444 -104
  120. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +0 -8
  121. data/vendor/faiss/faiss/impl/code_distance/code_distance-avx2.h +280 -42
  122. data/vendor/faiss/faiss/impl/code_distance/code_distance-generic.h +21 -14
  123. data/vendor/faiss/faiss/impl/code_distance/code_distance.h +22 -12
  124. data/vendor/faiss/faiss/impl/index_read.cpp +45 -19
  125. data/vendor/faiss/faiss/impl/index_write.cpp +60 -41
  126. data/vendor/faiss/faiss/impl/io.cpp +10 -10
  127. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +1 -1
  128. data/vendor/faiss/faiss/impl/platform_macros.h +18 -1
  129. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +3 -0
  130. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +7 -6
  131. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +52 -38
  132. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +40 -49
  133. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +960 -0
  134. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +176 -0
  135. data/vendor/faiss/faiss/impl/simd_result_handlers.h +374 -202
  136. data/vendor/faiss/faiss/index_factory.cpp +10 -7
  137. data/vendor/faiss/faiss/invlists/DirectMap.cpp +1 -1
  138. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +27 -9
  139. data/vendor/faiss/faiss/invlists/InvertedLists.h +12 -3
  140. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +3 -3
  141. data/vendor/faiss/faiss/python/python_callbacks.cpp +1 -1
  142. data/vendor/faiss/faiss/utils/Heap.cpp +3 -1
  143. data/vendor/faiss/faiss/utils/WorkerThread.h +1 -0
  144. data/vendor/faiss/faiss/utils/distances.cpp +128 -74
  145. data/vendor/faiss/faiss/utils/distances.h +81 -4
  146. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +5 -5
  147. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +2 -2
  148. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +2 -2
  149. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +1 -1
  150. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +5 -5
  151. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.h +1 -1
  152. data/vendor/faiss/faiss/utils/distances_simd.cpp +428 -70
  153. data/vendor/faiss/faiss/utils/fp16-arm.h +29 -0
  154. data/vendor/faiss/faiss/utils/fp16.h +2 -0
  155. data/vendor/faiss/faiss/utils/hamming.cpp +162 -110
  156. data/vendor/faiss/faiss/utils/hamming.h +58 -0
  157. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +16 -89
  158. data/vendor/faiss/faiss/utils/hamming_distance/common.h +1 -0
  159. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +15 -87
  160. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +57 -0
  161. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +14 -104
  162. data/vendor/faiss/faiss/utils/partitioning.cpp +3 -4
  163. data/vendor/faiss/faiss/utils/prefetch.h +77 -0
  164. data/vendor/faiss/faiss/utils/quantize_lut.cpp +0 -14
  165. data/vendor/faiss/faiss/utils/simdlib_avx2.h +0 -6
  166. data/vendor/faiss/faiss/utils/simdlib_neon.h +72 -77
  167. data/vendor/faiss/faiss/utils/sorting.cpp +140 -5
  168. data/vendor/faiss/faiss/utils/sorting.h +27 -0
  169. data/vendor/faiss/faiss/utils/utils.cpp +112 -6
  170. data/vendor/faiss/faiss/utils/utils.h +57 -20
  171. metadata +10 -3
@@ -17,7 +17,9 @@
17
17
  #define FAISS_utils_h
18
18
 
19
19
  #include <stdint.h>
20
+ #include <set>
20
21
  #include <string>
22
+ #include <vector>
21
23
 
22
24
  #include <faiss/impl/platform_macros.h>
23
25
  #include <faiss/utils/Heap.h>
@@ -47,25 +49,6 @@ uint64_t get_cycles();
47
49
  * Misc matrix and vector manipulation functions
48
50
  ***************************************************************************/
49
51
 
50
- /** compute c := a + bf * b for a, b and c tables
51
- *
52
- * @param n size of the tables
53
- * @param a size n
54
- * @param b size n
55
- * @param c restult table, size n
56
- */
57
- void fvec_madd(size_t n, const float* a, float bf, const float* b, float* c);
58
-
59
- /** same as fvec_madd, also return index of the min of the result table
60
- * @return index of the min of table c
61
- */
62
- int fvec_madd_and_argmin(
63
- size_t n,
64
- const float* a,
65
- float bf,
66
- const float* b,
67
- float* c);
68
-
69
52
  /* perform a reflection (not an efficient implementation, just for test ) */
70
53
  void reflection(const float* u, float* x, size_t n, size_t d, size_t nu);
71
54
 
@@ -121,7 +104,19 @@ int ivec_hist(size_t n, const int* v, int vmax, int* hist);
121
104
  void bincode_hist(size_t n, size_t nbits, const uint8_t* codes, int* hist);
122
105
 
123
106
  /// compute a checksum on a table.
124
- size_t ivec_checksum(size_t n, const int32_t* a);
107
+ uint64_t ivec_checksum(size_t n, const int32_t* a);
108
+
109
+ /// compute a checksum on a table.
110
+ uint64_t bvec_checksum(size_t n, const uint8_t* a);
111
+
112
+ /** compute checksums for the rows of a matrix
113
+ *
114
+ * @param n number of rows
115
+ * @param d size per row
116
+ * @param a matrix to handle, size n * d
117
+ * @param cs output checksums, size n
118
+ */
119
+ void bvecs_checksum(size_t n, size_t d, const uint8_t* a, uint64_t* cs);
125
120
 
126
121
  /** random subsamples a set of vectors if there are too many of them
127
122
  *
@@ -163,6 +158,48 @@ uint64_t hash_bytes(const uint8_t* bytes, int64_t n);
163
158
  /** Whether OpenMP annotations were respected. */
164
159
  bool check_openmp();
165
160
 
161
+ /** This class is used to combine range and knn search results
162
+ * in contrib.exhaustive_search.range_search_gpu */
163
+
164
+ template <typename T>
165
+ struct CombinerRangeKNN {
166
+ int64_t nq; /// nb of queries
167
+ size_t k; /// number of neighbors for the knn search part
168
+ T r2; /// range search radius
169
+ bool keep_max; /// whether to keep max values instead of min.
170
+
171
+ CombinerRangeKNN(int64_t nq, size_t k, T r2, bool keep_max)
172
+ : nq(nq), k(k), r2(r2), keep_max(keep_max) {}
173
+
174
+ /// Knn search results
175
+ const int64_t* I = nullptr; /// size nq * k
176
+ const T* D = nullptr; /// size nq * k
177
+
178
+ /// optional: range search results (ignored if mask is NULL)
179
+ const bool* mask =
180
+ nullptr; /// mask for where knn results are valid, size nq
181
+ // range search results for remaining entries nrange = sum(mask)
182
+ const int64_t* lim_remain = nullptr; /// size nrange + 1
183
+ const T* D_remain = nullptr; /// size lim_remain[nrange]
184
+ const int64_t* I_remain = nullptr; /// size lim_remain[nrange]
185
+
186
+ const int64_t* L_res = nullptr; /// size nq + 1
187
+ // Phase 1: compute sizes into limits array (of size nq + 1)
188
+ void compute_sizes(int64_t* L_res);
189
+
190
+ /// Phase 2: caller allocates D_res and I_res (size L_res[nq])
191
+ /// Phase 3: fill in D_res and I_res
192
+ void write_result(T* D_res, int64_t* I_res);
193
+ };
194
+
195
+ struct CodeSet {
196
+ size_t d;
197
+ std::set<std::vector<uint8_t>> s;
198
+
199
+ explicit CodeSet(size_t d) : d(d) {}
200
+ void insert(size_t n, const uint8_t* codes, bool* inserted);
201
+ };
202
+
166
203
  } // namespace faiss
167
204
 
168
205
  #endif /* FAISS_utils_h */
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-12 00:00:00.000000000 Z
11
+ date: 2024-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -107,6 +107,8 @@ files:
107
107
  - vendor/faiss/faiss/IndexIVFFastScan.h
108
108
  - vendor/faiss/faiss/IndexIVFFlat.cpp
109
109
  - vendor/faiss/faiss/IndexIVFFlat.h
110
+ - vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp
111
+ - vendor/faiss/faiss/IndexIVFIndependentQuantizer.h
110
112
  - vendor/faiss/faiss/IndexIVFPQ.cpp
111
113
  - vendor/faiss/faiss/IndexIVFPQ.h
112
114
  - vendor/faiss/faiss/IndexIVFPQFastScan.cpp
@@ -202,6 +204,7 @@ files:
202
204
  - vendor/faiss/faiss/gpu/test/TestUtils.h
203
205
  - vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp
204
206
  - vendor/faiss/faiss/gpu/utils/DeviceUtils.h
207
+ - vendor/faiss/faiss/gpu/utils/RaftUtils.h
205
208
  - vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp
206
209
  - vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h
207
210
  - vendor/faiss/faiss/gpu/utils/StaticUtils.h
@@ -261,6 +264,8 @@ files:
261
264
  - vendor/faiss/faiss/impl/pq4_fast_scan.h
262
265
  - vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp
263
266
  - vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp
267
+ - vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp
268
+ - vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h
264
269
  - vendor/faiss/faiss/impl/simd_result_handlers.h
265
270
  - vendor/faiss/faiss/index_factory.cpp
266
271
  - vendor/faiss/faiss/index_factory.h
@@ -299,6 +304,7 @@ files:
299
304
  - vendor/faiss/faiss/utils/extra_distances-inl.h
300
305
  - vendor/faiss/faiss/utils/extra_distances.cpp
301
306
  - vendor/faiss/faiss/utils/extra_distances.h
307
+ - vendor/faiss/faiss/utils/fp16-arm.h
302
308
  - vendor/faiss/faiss/utils/fp16-fp16c.h
303
309
  - vendor/faiss/faiss/utils/fp16-inl.h
304
310
  - vendor/faiss/faiss/utils/fp16.h
@@ -313,6 +319,7 @@ files:
313
319
  - vendor/faiss/faiss/utils/ordered_key_value.h
314
320
  - vendor/faiss/faiss/utils/partitioning.cpp
315
321
  - vendor/faiss/faiss/utils/partitioning.h
322
+ - vendor/faiss/faiss/utils/prefetch.h
316
323
  - vendor/faiss/faiss/utils/quantize_lut.cpp
317
324
  - vendor/faiss/faiss/utils/quantize_lut.h
318
325
  - vendor/faiss/faiss/utils/random.cpp
@@ -345,7 +352,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
345
352
  - !ruby/object:Gem::Version
346
353
  version: '0'
347
354
  requirements: []
348
- rubygems_version: 3.4.10
355
+ rubygems_version: 3.5.3
349
356
  signing_key:
350
357
  specification_version: 4
351
358
  summary: Efficient similarity search and clustering for Ruby