Skip to content

Commit 0f2f511

Browse files
remove fork's ScalarQuantizer
Signed-off-by: Alexandr Guzhva <alexanderguzhva@gmail.com>
1 parent 4489f68 commit 0f2f511

65 files changed

Lines changed: 2499 additions & 8152 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmake/libs/libfaiss.cmake

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,31 @@ knowhere_file_glob(
3737
FAISS_AVX512_SRCS
3838
thirdparty/faiss/faiss/cppcontrib/knowhere/impl/*avx512.cpp
3939
)
40-
# AVX512 vanilla Faiss dynamic dispatch related files
40+
# AVX512 vanilla Faiss dynamic dispatch related files. Baseline
41+
# sq-avx512.cpp is replaced by a knowhere-local prelude file that declares
42+
# a fast DCTemplate specialization for QT_4bit_uniform + L2 and then
43+
# textually #includes the baseline sq-avx512.cpp — see
44+
# cppcontrib/knowhere/impl/sq-avx512-fastpath.cpp for the full design note.
4145
knowhere_file_glob(
4246
GLOB
4347
FAISS_DD_AVX512_SRCS
4448
thirdparty/faiss/faiss/impl/fast_scan/impl-avx512.cpp
4549
thirdparty/faiss/faiss/impl/hnsw/avx512.cpp
4650
thirdparty/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx512.cpp
47-
thirdparty/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp
51+
thirdparty/faiss/faiss/cppcontrib/knowhere/impl/sq-avx512-fastpath.cpp
4852
thirdparty/faiss/faiss/utils/distances_fused/avx512.cpp
4953
thirdparty/faiss/faiss/utils/simd_impl/distances_avx512.cpp
5054
thirdparty/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp
5155
)
56+
# Baseline sq-avx512.cpp is pulled in textually by the prelude file, not
57+
# compiled directly. Remove it from the generic list so it is not picked
58+
# up as a stand-alone TU (which would duplicate symbols).
59+
knowhere_file_glob(
60+
GLOB
61+
FAISS_SQ_AVX512_EXCLUDE
62+
thirdparty/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp
63+
)
64+
list(REMOVE_ITEM FAISS_SRCS ${FAISS_SQ_AVX512_EXCLUDE})
5265
# combine files
5366
list(APPEND FAISS_AVX512_SRCS ${FAISS_DD_AVX512_SRCS})
5467
# remove platform files from general files
@@ -61,20 +74,27 @@ knowhere_file_glob(
6174
FAISS_AVX2_SRCS
6275
thirdparty/faiss/faiss/cppcontrib/knowhere/impl/*avx.cpp
6376
)
64-
# AVX2 vanilla Faiss dynamic dispatch related files
77+
# AVX2 vanilla Faiss dynamic dispatch related files. sq-avx2.cpp is
78+
# textually wrapped by sq-avx2-fastpath.cpp (see design note there).
6579
knowhere_file_glob(
6680
GLOB
6781
FAISS_DD_AVX2_SRCS
6882
thirdparty/faiss/faiss/impl/approx_topk/avx2.cpp
6983
thirdparty/faiss/faiss/impl/fast_scan/impl-avx2.cpp
7084
thirdparty/faiss/faiss/impl/hnsw/avx2.cpp
7185
thirdparty/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx2.cpp
72-
thirdparty/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp
86+
thirdparty/faiss/faiss/cppcontrib/knowhere/impl/sq-avx2-fastpath.cpp
7387
thirdparty/faiss/faiss/utils/distances_fused/simdlib_based.cpp
7488
thirdparty/faiss/faiss/utils/simd_impl/distances_avx2.cpp
7589
thirdparty/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp
7690
thirdparty/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp
7791
)
92+
knowhere_file_glob(
93+
GLOB
94+
FAISS_SQ_AVX2_EXCLUDE
95+
thirdparty/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp
96+
)
97+
list(REMOVE_ITEM FAISS_SRCS ${FAISS_SQ_AVX2_EXCLUDE})
7898
# combine files
7999
list(APPEND FAISS_AVX2_SRCS ${FAISS_DD_AVX2_SRCS})
80100
# remove platform files from general files
@@ -105,18 +125,25 @@ knowhere_file_glob(
105125
FAISS_NEON_SRCS
106126
thirdparty/faiss/faiss/cppcontrib/knowhere/impl/*neon.cpp
107127
)
108-
# NEON vanilla Faiss dynamic dispatch related files
128+
# NEON vanilla Faiss dynamic dispatch related files. sq-neon.cpp is
129+
# textually wrapped by sq-neon-fastpath.cpp (see design note there).
109130
knowhere_file_glob(
110131
GLOB
111132
FAISS_DD_NEON_SRCS
112133
thirdparty/faiss/faiss/impl/approx_topk/neon.cpp
113134
thirdparty/faiss/faiss/impl/fast_scan/impl-neon.cpp
114-
thirdparty/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp
135+
thirdparty/faiss/faiss/cppcontrib/knowhere/impl/sq-neon-fastpath.cpp
115136
thirdparty/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp
116137
thirdparty/faiss/faiss/utils/simd_impl/distances_aarch64.cpp
117138
thirdparty/faiss/faiss/utils/simd_impl/partitioning_neon.cpp
118139
thirdparty/faiss/faiss/utils/simd_impl/rabitq_neon.cpp
119140
)
141+
knowhere_file_glob(
142+
GLOB
143+
FAISS_SQ_NEON_EXCLUDE
144+
thirdparty/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp
145+
)
146+
list(REMOVE_ITEM FAISS_SRCS ${FAISS_SQ_NEON_EXCLUDE})
120147
# combine files
121148
list(APPEND FAISS_NEON_SRCS ${FAISS_DD_NEON_SRCS})
122149
# remove platform files from general files

src/index/data_view_dense_index/refine_computer.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
// knowhere-specific indices
1313
#pragma once
1414

15-
#include "faiss/cppcontrib/knowhere/impl/ScalarQuantizer.h"
1615
#include "faiss/cppcontrib/knowhere/invlists/InvertedLists.h"
1716
#include "faiss/impl/DistanceComputer.h"
17+
#include "faiss/impl/ScalarQuantizer.h"
1818
#include "knowhere/comp/index_param.h"
1919
#include "knowhere/object.h"
2020
#include "knowhere/operands.h"
@@ -63,16 +63,13 @@ struct QuantRefine {
6363
}
6464
switch (refine_type) {
6565
case RefineType::UINT8_QUANT:
66-
quantizer = new faiss::cppcontrib::knowhere::ScalarQuantizer(
67-
d, faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_8bit);
66+
quantizer = new faiss::ScalarQuantizer(d, faiss::ScalarQuantizer::QuantizerType::QT_8bit);
6867
break;
6968
case RefineType::BFLOAT16_QUANT:
70-
quantizer = new faiss::cppcontrib::knowhere::ScalarQuantizer(
71-
d, faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_bf16);
69+
quantizer = new faiss::ScalarQuantizer(d, faiss::ScalarQuantizer::QuantizerType::QT_bf16);
7270
break;
7371
case RefineType::FLOAT16_QUANT:
74-
quantizer = new faiss::cppcontrib::knowhere::ScalarQuantizer(
75-
d, faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_fp16);
72+
quantizer = new faiss::ScalarQuantizer(d, faiss::ScalarQuantizer::QuantizerType::QT_fp16);
7673
break;
7774
default:
7875
throw std::runtime_error("Fail to generate quant for refiner if refine_type == RefineType::DATA_VIEW");
@@ -118,9 +115,9 @@ struct QuantRefine {
118115
GetMetric() {
119116
return metric_type;
120117
}
121-
std::unique_ptr<faiss::cppcontrib::knowhere::ScalarQuantizer::SQDistanceComputer>
118+
std::unique_ptr<faiss::ScalarQuantizer::SQDistanceComputer>
122119
GetQuantComputer() {
123-
return std::unique_ptr<faiss::cppcontrib::knowhere::ScalarQuantizer::SQDistanceComputer>(
120+
return std::unique_ptr<faiss::ScalarQuantizer::SQDistanceComputer>(
124121
quantizer->get_distance_computer(metric_type));
125122
}
126123
DataFormatEnum
@@ -141,7 +138,7 @@ struct QuantRefine {
141138
static constexpr size_t key = 0;
142139
static constexpr size_t list_num = 1;
143140
static constexpr size_t segment_size = 48;
144-
faiss::cppcontrib::knowhere::ScalarQuantizer* quantizer = nullptr;
141+
faiss::ScalarQuantizer* quantizer = nullptr;
145142
faiss::cppcontrib::knowhere::InvertedLists* storage = nullptr;
146143
faiss::MetricType metric_type;
147144
DataFormatEnum origin_data_type;
@@ -153,7 +150,7 @@ template <bool NeedNormalize = false>
153150
struct QuantDataDistanceComputer : faiss::DistanceComputer {
154151
std::vector<float> query_buf;
155152
std::shared_ptr<QuantRefine> quant_data;
156-
std::unique_ptr<faiss::cppcontrib::knowhere::ScalarQuantizer::SQDistanceComputer> qc;
153+
std::unique_ptr<faiss::ScalarQuantizer::SQDistanceComputer> qc;
157154
float q_norm;
158155
size_t dim;
159156

src/index/hnsw/faiss_hnsw.cc

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1010
// or implied. See the License for the specific language governing permissions and limitations under the License.
1111

12+
#include <faiss/cppcontrib/knowhere/IndexBinaryScalarQuantizer.h>
1213
#include <faiss/cppcontrib/knowhere/IndexCosine.h>
1314
#include <faiss/cppcontrib/knowhere/IndexFlat.h>
15+
#include <faiss/cppcontrib/knowhere/IndexHNSWBinary.h>
1416
#include <faiss/cppcontrib/knowhere/IndexSQ4Uniform.h>
1517
#include <faiss/cppcontrib/knowhere/MetricType.h>
1618
#include <faiss/cppcontrib/knowhere/impl/CountSizeIOWriter.h>
@@ -32,7 +34,6 @@
3234
#include "common/metric.h"
3335
#include "faiss/cppcontrib/knowhere/IndexHNSW.h"
3436
#include "faiss/cppcontrib/knowhere/IndexRefine.h"
35-
#include "faiss/cppcontrib/knowhere/impl/ScalarQuantizer.h"
3637
#include "faiss/cppcontrib/knowhere/index_io.h"
3738
#include "faiss/impl/mapped_io.h"
3839
#include "index/clustering_config.h"
@@ -546,10 +547,10 @@ convert_rows_to_fp32(const void* const __restrict src_in, float* const __restric
546547
// where each query_row has ((dim + 7) / 8) * 8 bits, and the total is nrows * ((dim + 7) / 8) * 8 bits.
547548
// But the final format required is nrows * dim * 32 bits (float).
548549
// There are actually two conversions happening here:
549-
// 1. Each uint8_t value must be converted to float (in `BinarySQDistanceComputerWrapper::set_query`
550-
// and `ScalarQuantizer::compute_codes`), it will be converted back to uint8_t). [same as int8]
550+
// 1. Each uint8_t value must be converted to float (in `BinaryFlatCodesDC::set_query` inside
551+
// IndexBinaryScalarQuantizer, it will be converted back to uint8_t). [same as int8]
551552
// 2. Each row must occupy dim * 32 bits of space, even if not all bits are filled;
552-
// this is required by the convention set in `ScalarQuantizer::compute_codes`.
553+
// this is required by the convention set by IndexBinaryScalarQuantizer::sa_encode.
553554
const knowhere::bin1* const src = reinterpret_cast<const knowhere::bin1*>(src_in);
554555
auto uint8_dim = (dim + 7) / 8;
555556
for (size_t i = 0; i < nrows; i++) {
@@ -711,20 +712,26 @@ get_index_data_format(const faiss::Index* index) {
711712
return DataFormatEnum::fp32;
712713
}
713714

714-
// is it sq?
715-
// note: IndexScalarQuantizerCosine preserves the original data, no cosine norm is appliesd
716-
auto index_sq = dynamic_cast<const faiss::cppcontrib::knowhere::IndexScalarQuantizer*>(index);
717-
if (index_sq != nullptr) {
718-
if (index_sq->sq.qtype == faiss::cppcontrib::knowhere::ScalarQuantizer::QT_bf16) {
719-
return DataFormatEnum::bf16;
720-
} else if (index_sq->sq.qtype == faiss::cppcontrib::knowhere::ScalarQuantizer::QT_fp16) {
721-
return DataFormatEnum::fp16;
722-
} else if (index_sq->sq.qtype == faiss::cppcontrib::knowhere::ScalarQuantizer::QT_8bit_direct_signed) {
723-
return DataFormatEnum::int8;
724-
} else if (index_sq->sq.qtype == faiss::cppcontrib::knowhere::ScalarQuantizer::QT_1bit_direct) {
725-
return DataFormatEnum::bin1;
726-
} else {
727-
return std::nullopt;
715+
// is it binary (1-bit-direct)? Routed through
716+
// IndexBinaryScalarQuantizer, which replaces the legacy
717+
// IndexScalarQuantizer(QT_1bit_direct) path.
718+
if (dynamic_cast<const faiss::cppcontrib::knowhere::IndexBinaryScalarQuantizer*>(index) != nullptr) {
719+
return DataFormatEnum::bin1;
720+
}
721+
722+
// is it sq? All SQ storage produced by knowhere now inherits from
723+
// baseline faiss::IndexScalarQuantizer (Cosine/SQ4U wrappers,
724+
// plain IndexHNSWSQ, and refine).
725+
if (auto* index_sq = dynamic_cast<const faiss::IndexScalarQuantizer*>(index)) {
726+
switch (index_sq->sq.qtype) {
727+
case faiss::ScalarQuantizer::QT_bf16:
728+
return DataFormatEnum::bf16;
729+
case faiss::ScalarQuantizer::QT_fp16:
730+
return DataFormatEnum::fp16;
731+
case faiss::ScalarQuantizer::QT_8bit_direct_signed:
732+
return DataFormatEnum::int8;
733+
default:
734+
return std::nullopt;
728735
}
729736
}
730737

@@ -2068,9 +2075,8 @@ class BaseFaissRegularIndexHNSWFlatNode : public BaseFaissRegularIndexHNSWNode {
20682075
if (is_binary) {
20692076
if (metric.value() == faiss::MetricType::METRIC_Hamming ||
20702077
metric.value() == faiss::MetricType::METRIC_Jaccard) {
2071-
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQ>(
2072-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_1bit_direct, hnsw_cfg.M.value(),
2073-
metric.value());
2078+
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWBinary>(dim, hnsw_cfg.M.value(),
2079+
metric.value());
20742080
} else {
20752081
LOG_KNOWHERE_ERROR_ << "Unsupported metric for binary data: " << hnsw_cfg.metric_type.value();
20762082
return Status::invalid_metric_type;
@@ -2082,14 +2088,13 @@ class BaseFaissRegularIndexHNSWFlatNode : public BaseFaissRegularIndexHNSWNode {
20822088
std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWFlatCosine>(dim, hnsw_cfg.M.value());
20832089
} else if (data_format == DataFormatEnum::fp16) {
20842090
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQCosine>(
2085-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_fp16, hnsw_cfg.M.value());
2091+
dim, faiss::ScalarQuantizer::QT_fp16, hnsw_cfg.M.value());
20862092
} else if (data_format == DataFormatEnum::bf16) {
20872093
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQCosine>(
2088-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_bf16, hnsw_cfg.M.value());
2094+
dim, faiss::ScalarQuantizer::QT_bf16, hnsw_cfg.M.value());
20892095
} else if (data_format == DataFormatEnum::int8) {
20902096
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQCosine>(
2091-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_8bit_direct_signed,
2092-
hnsw_cfg.M.value());
2097+
dim, faiss::ScalarQuantizer::QT_8bit_direct_signed, hnsw_cfg.M.value());
20932098
} else {
20942099
LOG_KNOWHERE_ERROR_ << "Unsupported metric type: " << hnsw_cfg.metric_type.value();
20952100
return Status::invalid_metric_type;
@@ -2100,16 +2105,13 @@ class BaseFaissRegularIndexHNSWFlatNode : public BaseFaissRegularIndexHNSWNode {
21002105
dim, hnsw_cfg.M.value(), metric.value());
21012106
} else if (data_format == DataFormatEnum::fp16) {
21022107
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQ>(
2103-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_fp16, hnsw_cfg.M.value(),
2104-
metric.value());
2108+
dim, faiss::ScalarQuantizer::QT_fp16, hnsw_cfg.M.value(), metric.value());
21052109
} else if (data_format == DataFormatEnum::bf16) {
21062110
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQ>(
2107-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_bf16, hnsw_cfg.M.value(),
2108-
metric.value());
2111+
dim, faiss::ScalarQuantizer::QT_bf16, hnsw_cfg.M.value(), metric.value());
21092112
} else if (data_format == DataFormatEnum::int8) {
21102113
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQ>(
2111-
dim, faiss::cppcontrib::knowhere::ScalarQuantizer::QT_8bit_direct_signed,
2112-
hnsw_cfg.M.value(), metric.value());
2114+
dim, faiss::ScalarQuantizer::QT_8bit_direct_signed, hnsw_cfg.M.value(), metric.value());
21132115
} else {
21142116
LOG_KNOWHERE_ERROR_ << "Unsupported metric type: " << hnsw_cfg.metric_type.value();
21152117
return Status::invalid_metric_type;
@@ -2548,7 +2550,7 @@ class BaseFaissRegularIndexHNSWSQNode : public BaseFaissRegularIndexHNSWNode {
25482550

25492551
// create an index
25502552
const bool is_cosine = IsMetricType(hnsw_cfg.metric_type.value(), metric::COSINE);
2551-
const bool is_sq4u = sq_type.value() == faiss::cppcontrib::knowhere::ScalarQuantizer::QT_4bit_uniform;
2553+
const bool is_sq4u = sq_type.value() == faiss::ScalarQuantizer::QT_4bit_uniform;
25522554

25532555
// should refine be used?
25542556
std::unique_ptr<faiss::Index> final_index;
@@ -2570,6 +2572,17 @@ class BaseFaissRegularIndexHNSWSQNode : public BaseFaissRegularIndexHNSWNode {
25702572
} else {
25712573
hnsw_index = std::make_unique<faiss::cppcontrib::knowhere::IndexHNSWSQ>(
25722574
dim, sq_type.value(), hnsw_cfg.M.value(), metric.value());
2575+
// QT_4bit_uniform + L2 benefits from quantile-based range
2576+
// estimation. This used to be hard-coded inside the fork
2577+
// IndexScalarQuantizer ctor; moved here so that ctor is
2578+
// behaviorally equivalent to baseline.
2579+
if (is_sq4u) {
2580+
auto* idx_sq = dynamic_cast<faiss::IndexScalarQuantizer*>(hnsw_index->storage);
2581+
if (idx_sq != nullptr) {
2582+
idx_sq->sq.rangestat = faiss::ScalarQuantizer::RS_quantiles;
2583+
idx_sq->sq.rangestat_arg = 0.01;
2584+
}
2585+
}
25732586
}
25742587

25752588
hnsw_index->hnsw.efConstruction = hnsw_cfg.efConstruction.value();

src/index/ivf/ivf.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -507,19 +507,19 @@ to_index_flat(std::unique_ptr<faiss::cppcontrib::knowhere::IndexFlat>&& index) {
507507
return std::make_unique<faiss::cppcontrib::knowhere::IndexFlat>(std::move(*index));
508508
}
509509

510-
expected<faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType>
510+
expected<faiss::ScalarQuantizer::QuantizerType>
511511
get_ivf_sq_quantizer_type(int code_size) {
512512
switch (code_size) {
513513
case 4:
514-
return faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_4bit;
514+
return faiss::ScalarQuantizer::QuantizerType::QT_4bit;
515515
case 6:
516-
return faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_6bit;
516+
return faiss::ScalarQuantizer::QuantizerType::QT_6bit;
517517
case 8:
518-
return faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_8bit;
518+
return faiss::ScalarQuantizer::QuantizerType::QT_8bit;
519519
case 16:
520-
return faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_fp16;
520+
return faiss::ScalarQuantizer::QuantizerType::QT_fp16;
521521
default:
522-
return expected<faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType>::Err(
522+
return expected<faiss::ScalarQuantizer::QuantizerType>::Err(
523523
Status::invalid_args, fmt::format("current code size {} not in (4, 6, 8, 16)", code_size));
524524
}
525525
}

src/index/ivf/ivf_wrapper.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,15 @@ IndexIvfFactory::create_for_sq(faiss::cppcontrib::knowhere::IndexFlat* qzr_raw_p
196196

197197
// create IndexIVFSQ
198198
// Index does not own qzr
199-
faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType quantizer_type;
199+
faiss::ScalarQuantizer::QuantizerType quantizer_type;
200200
// ivf_sq_cfg.sq_type.value() has already been guaranteed to be legal in CheckAndAdjust
201201
std::string quantizer_type_tolower = str_to_lower(ivf_sq_cfg.sq_type.value());
202202
if (quantizer_type_tolower == "sq4") {
203-
quantizer_type = faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_4bit;
203+
quantizer_type = faiss::ScalarQuantizer::QuantizerType::QT_4bit;
204204
} else if (quantizer_type_tolower == "sq6") {
205-
quantizer_type = faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_6bit;
205+
quantizer_type = faiss::ScalarQuantizer::QuantizerType::QT_6bit;
206206
} else {
207-
quantizer_type = faiss::cppcontrib::knowhere::ScalarQuantizer::QuantizerType::QT_8bit;
207+
quantizer_type = faiss::ScalarQuantizer::QuantizerType::QT_8bit;
208208
}
209209
auto index = std::make_unique<faiss::cppcontrib::knowhere::IndexIVFScalarQuantizer>(qzr_raw_ptr, d, nlist,
210210
quantizer_type, metric);

0 commit comments

Comments
 (0)