faiss 0.6.2 → 0.6.3
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 +4 -0
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +3 -1
- data/vendor/faiss/faiss/Clustering.cpp +9 -1
- data/vendor/faiss/faiss/IVFlib.cpp +14 -3
- data/vendor/faiss/faiss/Index.h +2 -2
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +9 -10
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +2 -3
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +1 -2
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +4 -5
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +5 -9
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +2 -4
- data/vendor/faiss/faiss/IndexEDEN.cpp +273 -0
- data/vendor/faiss/faiss/IndexEDEN.h +57 -0
- data/vendor/faiss/faiss/IndexFastScan.cpp +15 -4
- data/vendor/faiss/faiss/IndexFlat.cpp +13 -50
- data/vendor/faiss/faiss/IndexHNSW.cpp +10 -11
- data/vendor/faiss/faiss/IndexIDMap.cpp +16 -3
- data/vendor/faiss/faiss/IndexIDMap.h +2 -0
- data/vendor/faiss/faiss/IndexIVF.cpp +17 -6
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +1 -1
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +3 -4
- data/vendor/faiss/faiss/IndexIVFEDEN.cpp +302 -0
- data/vendor/faiss/faiss/IndexIVFEDEN.h +70 -0
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +5 -6
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +3 -4
- data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +1 -1
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +40 -22
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +0 -1
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +19 -49
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +180 -76
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +5 -4
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +8 -6
- data/vendor/faiss/faiss/IndexLSH.cpp +2 -3
- data/vendor/faiss/faiss/IndexLattice.cpp +5 -0
- data/vendor/faiss/faiss/IndexNNDescent.cpp +9 -2
- data/vendor/faiss/faiss/IndexNSG.cpp +7 -2
- data/vendor/faiss/faiss/IndexPQ.cpp +6 -8
- data/vendor/faiss/faiss/IndexPreTransform.cpp +15 -0
- data/vendor/faiss/faiss/IndexRaBitQ.cpp +2 -2
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +1 -2
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +5 -1
- data/vendor/faiss/faiss/IndexRefine.cpp +30 -1
- data/vendor/faiss/faiss/IndexReplicas.cpp +1 -2
- data/vendor/faiss/faiss/IndexShards.cpp +2 -2
- data/vendor/faiss/faiss/IndexShardsIVF.cpp +2 -2
- data/vendor/faiss/faiss/MetaIndexes.cpp +2 -4
- data/vendor/faiss/faiss/SuperKMeans.cpp +256 -240
- data/vendor/faiss/faiss/SuperKMeans.h +30 -0
- data/vendor/faiss/faiss/VectorTransform.cpp +33 -2
- data/vendor/faiss/faiss/clone_index.cpp +5 -0
- data/vendor/faiss/faiss/factory_tools.cpp +47 -4
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +11 -11
- data/vendor/faiss/faiss/gpu/GpuIndex.h +34 -11
- data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +47 -0
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +17 -0
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +16 -0
- data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +1 -1
- data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +2 -2
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +180 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h +1 -5
- data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFPQ.h +88 -0
- data/vendor/faiss/faiss/gpu_metal/impl/MetalIVFPQ.h +134 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +2 -2
- data/vendor/faiss/faiss/impl/DistanceComputer.h +34 -0
- data/vendor/faiss/faiss/impl/EDENQuantizer.h +119 -0
- data/vendor/faiss/faiss/impl/HNSW.cpp +109 -152
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +2 -2
- data/vendor/faiss/faiss/impl/NSG.cpp +3 -1
- data/vendor/faiss/faiss/impl/Panorama.h +9 -7
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +152 -84
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +34 -22
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +44 -36
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +35 -0
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +168 -67
- data/vendor/faiss/faiss/impl/RaBitQuantizer.h +19 -0
- data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +2 -11
- data/vendor/faiss/faiss/impl/ResultHandler.h +25 -31
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +258 -57
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +20 -0
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +2 -2
- data/vendor/faiss/faiss/impl/VisitedTable.cpp +22 -2
- data/vendor/faiss/faiss/impl/VisitedTable.h +20 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +1 -1
- data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +4 -4
- data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +35 -2
- data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +1 -1
- data/vendor/faiss/faiss/impl/index_read.cpp +376 -36
- data/vendor/faiss/faiss/impl/index_write.cpp +55 -4
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +8 -9
- data/vendor/faiss/faiss/impl/platform_macros.h +3 -1
- data/vendor/faiss/faiss/impl/polysemous_training/avx512.cpp +284 -0
- data/vendor/faiss/faiss/impl/polysemous_training/dispatch.h +115 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +0 -1
- data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +26 -15
- data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +4 -4
- data/vendor/faiss/faiss/impl/result_handler/ResultHandler.cpp +195 -0
- data/vendor/faiss/faiss/impl/result_handler/avx2.cpp +133 -0
- data/vendor/faiss/faiss/impl/result_handler/avx512.cpp +281 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx2.cpp +72 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx512.cpp +228 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer.cpp +882 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +9 -8
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +85 -23
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-impl.h +30 -30
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-spr.cpp +4 -5
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +101 -34
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +136 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +16 -16
- data/vendor/faiss/faiss/impl/simd_dispatch.h +30 -9
- data/vendor/faiss/faiss/index_factory.cpp +32 -6
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +1 -1
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +2 -2
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +19 -4
- data/vendor/faiss/faiss/python/python_callbacks.cpp +3 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +60 -0
- data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +26 -1
- data/vendor/faiss/faiss/svs/IndexSVSFlat.h +13 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +31 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +15 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +1 -2
- data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +1 -1
- data/vendor/faiss/faiss/utils/distances.cpp +14 -2
- data/vendor/faiss/faiss/utils/distances_simd.cpp +4 -3
- data/vendor/faiss/faiss/utils/extra_distances.cpp +4 -14
- data/vendor/faiss/faiss/utils/extra_distances.h +1 -2
- data/vendor/faiss/faiss/utils/hamming.cpp +1 -1
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +29 -8
- data/vendor/faiss/faiss/utils/rabitq_simd.h +202 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +0 -1
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +263 -15
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +160 -18
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +245 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +273 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512_spr.cpp +92 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +11 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +143 -6
- data/vendor/faiss/faiss/utils/simd_levels.cpp +44 -0
- data/vendor/faiss/faiss/utils/simd_levels.h +14 -0
- data/vendor/faiss/faiss/utils/utils.cpp +9 -27
- metadata +16 -1
|
@@ -156,7 +156,17 @@ void IndexRefine::range_search(
|
|
|
156
156
|
SearchParameters* base_index_params =
|
|
157
157
|
(params != nullptr) ? params->base_index_params : nullptr;
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
const float kf = (params != nullptr) ? params->k_factor : this->k_factor;
|
|
160
|
+
|
|
161
|
+
const bool is_similarity = is_similarity_metric(metric_type);
|
|
162
|
+
|
|
163
|
+
// Scale the base_index search radius by k_factor. Results are filtered to
|
|
164
|
+
// the exact radius below, so this only affects recall, not correctness; it
|
|
165
|
+
// is up to the user to pick a k_factor that widens the base search for
|
|
166
|
+
// their metric.
|
|
167
|
+
const float base_radius = radius * kf;
|
|
168
|
+
|
|
169
|
+
base_index->range_search(n, x, base_radius, result, base_index_params);
|
|
160
170
|
|
|
161
171
|
#pragma omp parallel if (n > 1)
|
|
162
172
|
{
|
|
@@ -177,6 +187,25 @@ void IndexRefine::range_search(
|
|
|
177
187
|
}
|
|
178
188
|
}
|
|
179
189
|
}
|
|
190
|
+
|
|
191
|
+
// Exact filtering done here, as base index's approximations
|
|
192
|
+
// can fall outside the specified exact radius.
|
|
193
|
+
const std::vector<size_t> prev_lims(result->lims, result->lims + n + 1);
|
|
194
|
+
size_t wp = 0;
|
|
195
|
+
for (idx_t i = 0; i < n; i++) {
|
|
196
|
+
for (size_t j = prev_lims[i]; j < prev_lims[i + 1]; j++) {
|
|
197
|
+
const float dis = result->distances[j];
|
|
198
|
+
const bool within = is_similarity
|
|
199
|
+
? CMin<float, idx_t>::cmp(radius, dis)
|
|
200
|
+
: CMax<float, idx_t>::cmp(radius, dis);
|
|
201
|
+
if (within) {
|
|
202
|
+
result->labels[wp] = result->labels[j];
|
|
203
|
+
result->distances[wp] = result->distances[j];
|
|
204
|
+
wp++;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
result->lims[i + 1] = wp;
|
|
208
|
+
}
|
|
180
209
|
}
|
|
181
210
|
|
|
182
211
|
void IndexRefine::reconstruct(idx_t key, float* recons) const {
|
|
@@ -127,8 +127,7 @@ void IndexReplicasTemplate<IndexT>::search(
|
|
|
127
127
|
distance_t* distances,
|
|
128
128
|
idx_t* labels,
|
|
129
129
|
const SearchParameters* params) const {
|
|
130
|
-
|
|
131
|
-
!params, "search params not supported for this index");
|
|
130
|
+
FAISS_THROW_IF_MSG(params, "search params not supported for this index");
|
|
132
131
|
FAISS_THROW_IF_NOT(k > 0);
|
|
133
132
|
FAISS_THROW_IF_NOT_MSG(this->count() > 0, "no replicas in index");
|
|
134
133
|
|
|
@@ -143,8 +143,8 @@ void IndexShardsTemplate<IndexT>::add_with_ids(
|
|
|
143
143
|
"request them to be shifted");
|
|
144
144
|
|
|
145
145
|
if (successive_ids) {
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
FAISS_THROW_IF_MSG(
|
|
147
|
+
xids,
|
|
148
148
|
"It makes no sense to pass in ids and "
|
|
149
149
|
"request them to be shifted");
|
|
150
150
|
FAISS_THROW_IF_NOT_MSG(
|
|
@@ -106,8 +106,8 @@ void IndexShardsIVF::add_with_ids(
|
|
|
106
106
|
"request them to be shifted");
|
|
107
107
|
|
|
108
108
|
if (successive_ids) {
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
FAISS_THROW_IF_MSG(
|
|
110
|
+
xids,
|
|
111
111
|
"It makes no sense to pass in ids and "
|
|
112
112
|
"request them to be shifted");
|
|
113
113
|
FAISS_THROW_IF_NOT_MSG(
|
|
@@ -63,8 +63,7 @@ void IndexSplitVectors::search(
|
|
|
63
63
|
float* distances,
|
|
64
64
|
idx_t* labels,
|
|
65
65
|
const SearchParameters* params) const {
|
|
66
|
-
|
|
67
|
-
!params, "search params not supported for this index");
|
|
66
|
+
FAISS_THROW_IF_MSG(params, "search params not supported for this index");
|
|
68
67
|
FAISS_THROW_IF_NOT_MSG(k == 1, "search implemented only for k=1");
|
|
69
68
|
FAISS_THROW_IF_NOT_MSG(
|
|
70
69
|
sum_d == d, "not enough indexes compared to # dimensions");
|
|
@@ -187,8 +186,7 @@ void IndexRandom::search(
|
|
|
187
186
|
float* distances,
|
|
188
187
|
idx_t* labels,
|
|
189
188
|
const SearchParameters* params) const {
|
|
190
|
-
|
|
191
|
-
!params, "search params not supported for this index");
|
|
189
|
+
FAISS_THROW_IF_MSG(params, "search params not supported for this index");
|
|
192
190
|
FAISS_THROW_IF_NOT(k <= ntotal);
|
|
193
191
|
#pragma omp parallel for if (n > 1000)
|
|
194
192
|
for (idx_t i = 0; i < n; i++) {
|