Skip to content

Commit

Permalink
Support IVFPQ training (#2078)
Browse files Browse the repository at this point in the history
### What problem does this PR solve?

Support IVFPQ training

Issue link:#2077

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
  • Loading branch information
yangzq50 authored Oct 21, 2024
1 parent fe3c181 commit 86f0c8b
Show file tree
Hide file tree
Showing 5 changed files with 830 additions and 282 deletions.
11 changes: 6 additions & 5 deletions src/storage/definition/index_ivf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,11 +276,12 @@ void CheckIndexIVFStorageOption(IndexIVFStorageOption &storage_option, const Dat
} else if (storage_option.type_ == IndexIVFStorageOption::Type::kProductQuantization) {
// check product_quantization_subspace_num_, product_quantization_subspace_bits_
if (const auto product_quantization_subspace_num = storage_option.product_quantization_subspace_num_;
product_quantization_subspace_num > embedding_dimension) {
RecoverableError(
Status::InvalidIndexDefinition(std::format("product_quantization_subspace_num ({}) is larger than embedding_dimension({}).",
product_quantization_subspace_num,
embedding_dimension)));
product_quantization_subspace_num >= embedding_dimension || product_quantization_subspace_num <= 0 ||
embedding_dimension % product_quantization_subspace_num != 0) {
RecoverableError(Status::InvalidIndexDefinition(
std::format("product_quantization_subspace_num ({}) is not divisor of embedding_dimension({})!",
product_quantization_subspace_num,
embedding_dimension)));
}
if (const auto product_quantization_subspace_bits = storage_option.product_quantization_subspace_bits_;
product_quantization_subspace_bits < 4 || product_quantization_subspace_bits > 16) {
Expand Down
2 changes: 1 addition & 1 deletion src/storage/definition/index_ivf.cppm
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export struct IndexIVFStorageOption {
// kScalarQuantization
u32 scalar_quantization_bits_ = 0; // 4 or 8
// kProductQuantization
u32 product_quantization_subspace_num_ = 0; // in range [1, dim]
u32 product_quantization_subspace_num_ = 0; // divisor of embedding dimension
u32 product_quantization_subspace_bits_ = 0; // in range [4, 16]
bool operator==(const IndexIVFStorageOption &other) const = default;
String ToString() const;
Expand Down
Loading

0 comments on commit 86f0c8b

Please sign in to comment.