From eadc07cc6a17f9cfea81f3e82ec06164014232fb Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Wed, 9 Oct 2024 16:06:09 -0600 Subject: [PATCH] Fix 9.12.0 backcompat break (Lucene 9.12.0 cannot read 9.11.x indices written with quantized HNSW, `Lucene99HnswScalarQuantizedVectorsFormat`) (#13874) * carefully regenerate the int8_hnsw bwc indices so that they do in fact use Lucene99ScalarQuantizedVectorsFormat ... when running TestInt8HnswBackwardsCompatibility it now fails (as expected) on 9.11.0 and 9.11.1 bwc indices, but not on 9.10.0 * rename int8 -> int7 bwc tests since we are actually testing 7 bit quantization * actually fix the bwc bug: only allow compress=true when bits is 7 or 8 in HNSW scalar quantization * tidy * Revert "rename int8 -> int7 bwc tests since we are actually testing 7 bit quantization" This reverts commit eeb3f8a6685927791427e0e5084ecaf4ed873816. * Reapply "rename int8 -> int7 bwc tests since we are actually testing 7 bit quantization" This reverts commit 3487c4210bd83b6457dd3b639faf2d26db926ed4. * #13880: add test to verify the int7 quantized indices are in fact using quantized vectors not float32 * bump 9.12.x version to 9.12.1 and add bwc indices for 9.12.0 * remove duplicate 9.12.0 Version constant * revert changes to index.9.12.0-cfs.zip, index.9.12.0-nocfs.zip, sorted.9.12.0.zip * remove unused bwc index Closes #13867 Closes #13880 --- .../BackwardsCompatibilityTestBase.java | 4 +- .../TestGenerateBwcIndices.java | 14 +++--- ...> TestInt7HnswBackwardsCompatibility.java} | 47 ++++++++++++++---- .../backward_index/int7_hnsw.9.10.0.zip | Bin 0 -> 5861 bytes .../backward_index/int7_hnsw.9.11.0.zip | Bin 0 -> 5299 bytes .../backward_index/int7_hnsw.9.11.1.zip | Bin 0 -> 5291 bytes .../backward_index/int7_hnsw.9.12.0.zip | Bin 0 -> 5405 bytes .../backward_index/int8_hnsw.9.10.0.zip | Bin 4808 -> 0 bytes .../backward_index/int8_hnsw.9.11.0.zip | Bin 4781 -> 0 bytes .../backward_index/int8_hnsw.9.11.1.zip | Bin 4795 -> 0 bytes .../backward_index/int8_hnsw.9.12.0.zip | Bin 4932 -> 0 bytes .../Lucene99ScalarQuantizedVectorsReader.java | 2 +- 12 files changed, 48 insertions(+), 19 deletions(-) rename lucene/backward-codecs/src/test/org/apache/lucene/backward_index/{TestInt8HnswBackwardsCompatibility.java => TestInt7HnswBackwardsCompatibility.java} (75%) create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.10.0.zip create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.11.0.zip create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.11.1.zip create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.12.0.zip delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int8_hnsw.9.10.0.zip delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int8_hnsw.9.11.0.zip delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int8_hnsw.9.11.1.zip delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int8_hnsw.9.12.0.zip diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/BackwardsCompatibilityTestBase.java b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/BackwardsCompatibilityTestBase.java index ae5920de368..edbed96be75 100644 --- a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/BackwardsCompatibilityTestBase.java +++ b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/BackwardsCompatibilityTestBase.java @@ -106,8 +106,8 @@ public abstract class BackwardsCompatibilityTestBase extends LuceneTestCase { * This is a base constructor for parameterized BWC tests. The constructor arguments are provided * by {@link com.carrotsearch.randomizedtesting.RandomizedRunner} during test execution. A {@link * com.carrotsearch.randomizedtesting.annotations.ParametersFactory} specified in a subclass - * provides a list lists of arguments for the tests and RandomizedRunner will execute the test for - * each of the argument list. + * provides a list of arguments for the tests and RandomizedRunner will execute the test for each + * of the argument list. * * @param version the version this test should run for * @param indexPattern an index pattern in order to open an index of see {@link diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestGenerateBwcIndices.java b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestGenerateBwcIndices.java index 936a4c28cf2..6989731ae14 100644 --- a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestGenerateBwcIndices.java +++ b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestGenerateBwcIndices.java @@ -39,7 +39,7 @@ public class TestGenerateBwcIndices extends LuceneTestCase { // To generate backcompat indexes with the current default codec, run the following gradle // command: // gradlew test -Ptests.bwcdir=/path/to/store/indexes -Ptests.codec=default - // -Ptests.useSecurityManager=false --tests TestGenerateBwcIndices + // -Ptests.useSecurityManager=false --tests TestGenerateBwcIndices --max-workers=1 // // Also add testmethod with one of the index creation methods below, for example: // -Ptestmethod=testCreateCFS @@ -82,14 +82,14 @@ public class TestGenerateBwcIndices extends LuceneTestCase { sortedTest.createBWCIndex(); } - public void testCreateInt8HNSWIndices() throws IOException { - TestInt8HnswBackwardsCompatibility int8HnswBackwardsCompatibility = - new TestInt8HnswBackwardsCompatibility( + public void testCreateInt7HNSWIndices() throws IOException { + TestInt7HnswBackwardsCompatibility int7HnswBackwardsCompatibility = + new TestInt7HnswBackwardsCompatibility( Version.LATEST, createPattern( - TestInt8HnswBackwardsCompatibility.INDEX_NAME, - TestInt8HnswBackwardsCompatibility.SUFFIX)); - int8HnswBackwardsCompatibility.createBWCIndex(); + TestInt7HnswBackwardsCompatibility.INDEX_NAME, + TestInt7HnswBackwardsCompatibility.SUFFIX)); + int7HnswBackwardsCompatibility.createBWCIndex(); } private boolean isInitialMajorVersionRelease() { diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestInt8HnswBackwardsCompatibility.java b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestInt7HnswBackwardsCompatibility.java similarity index 75% rename from lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestInt8HnswBackwardsCompatibility.java rename to lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestInt7HnswBackwardsCompatibility.java index 8db406df992..1351d87a0ae 100644 --- a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestInt8HnswBackwardsCompatibility.java +++ b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestInt7HnswBackwardsCompatibility.java @@ -23,17 +23,22 @@ import java.io.IOException; import org.apache.lucene.backward_codecs.lucene99.Lucene99Codec; import org.apache.lucene.codecs.Codec; import org.apache.lucene.codecs.KnnVectorsFormat; +import org.apache.lucene.codecs.KnnVectorsReader; import org.apache.lucene.codecs.lucene99.Lucene99HnswScalarQuantizedVectorsFormat; import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat; +import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsReader; +import org.apache.lucene.codecs.perfield.PerFieldKnnVectorsFormat; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; import org.apache.lucene.document.KnnFloatVectorField; import org.apache.lucene.document.StringField; +import org.apache.lucene.index.CodecReader; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.NoMergePolicy; import org.apache.lucene.index.VectorSimilarityFunction; import org.apache.lucene.search.IndexSearcher; @@ -41,23 +46,23 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.tests.analysis.MockAnalyzer; import org.apache.lucene.tests.util.TestUtil; import org.apache.lucene.util.Version; +import org.apache.lucene.util.quantization.QuantizedByteVectorValues; -public class TestInt8HnswBackwardsCompatibility extends BackwardsCompatibilityTestBase { +public class TestInt7HnswBackwardsCompatibility extends BackwardsCompatibilityTestBase { - static final String INDEX_NAME = "int8_hnsw"; + static final String INDEX_NAME = "int7_hnsw"; static final String SUFFIX = ""; - private static final Version FIRST_INT8_HNSW_VERSION = Version.LUCENE_9_10_0; + private static final Version FIRST_INT7_HNSW_VERSION = Version.LUCENE_9_10_0; private static final String KNN_VECTOR_FIELD = "knn_field"; private static final int DOC_COUNT = 30; private static final FieldType KNN_VECTOR_FIELD_TYPE = KnnFloatVectorField.createFieldType(3, VectorSimilarityFunction.COSINE); private static final float[] KNN_VECTOR = {0.2f, -0.1f, 0.1f}; - public TestInt8HnswBackwardsCompatibility(Version version, String pattern) { + public TestInt7HnswBackwardsCompatibility(Version version, String pattern) { super(version, pattern); } - /** Provides all sorted versions to the test-framework */ @ParametersFactory(argumentFormatting = "Lucene-Version:%1$s; Pattern: %2$s") public static Iterable testVersionsFactory() throws IllegalAccessException { return allVersion(INDEX_NAME, SUFFIX); @@ -76,7 +81,7 @@ public class TestInt8HnswBackwardsCompatibility extends BackwardsCompatibilityTe @Override protected boolean supportsVersion(Version version) { - return version.onOrAfter(FIRST_INT8_HNSW_VERSION); + return version.onOrAfter(FIRST_INT7_HNSW_VERSION); } @Override @@ -84,7 +89,7 @@ public class TestInt8HnswBackwardsCompatibility extends BackwardsCompatibilityTe // We don't use the default codec } - public void testInt8HnswIndexAndSearch() throws Exception { + public void testInt7HnswIndexAndSearch() throws Exception { IndexWriterConfig indexWriterConfig = newIndexWriterConfig(new MockAnalyzer(random())) .setOpenMode(IndexWriterConfig.OpenMode.APPEND) @@ -108,7 +113,6 @@ public class TestInt8HnswBackwardsCompatibility extends BackwardsCompatibilityTe assertKNNSearch(searcher, KNN_VECTOR, 10, 10, "0"); } } - // This will confirm the docs are really sorted TestUtil.checkIndex(directory); } @@ -117,7 +121,7 @@ public class TestInt8HnswBackwardsCompatibility extends BackwardsCompatibilityTe IndexWriterConfig conf = new IndexWriterConfig(new MockAnalyzer(random())) .setMaxBufferedDocs(10) - .setCodec(TestUtil.getDefaultCodec()) + .setCodec(getCodec()) .setMergePolicy(NoMergePolicy.INSTANCE); try (IndexWriter writer = new IndexWriter(dir, conf)) { for (int i = 0; i < DOC_COUNT; i++) { @@ -147,4 +151,29 @@ public class TestInt8HnswBackwardsCompatibility extends BackwardsCompatibilityTe assertKNNSearch(searcher, KNN_VECTOR, 10, 10, "0"); } } + + // #13880: make sure the BWC index really contains quantized HNSW not float32 + public void testIndexIsReallyQuantized() throws Exception { + try (DirectoryReader reader = DirectoryReader.open(directory)) { + for (LeafReaderContext leafContext : reader.leaves()) { + KnnVectorsReader knnVectorsReader = ((CodecReader) leafContext.reader()).getVectorReader(); + assertTrue( + "expected PerFieldKnnVectorsFormat.FieldsReader but got: " + knnVectorsReader, + knnVectorsReader instanceof PerFieldKnnVectorsFormat.FieldsReader); + + KnnVectorsReader forField = + ((PerFieldKnnVectorsFormat.FieldsReader) knnVectorsReader) + .getFieldReader(KNN_VECTOR_FIELD); + + assertTrue(forField instanceof Lucene99HnswVectorsReader); + + QuantizedByteVectorValues quantized = + ((Lucene99HnswVectorsReader) forField).getQuantizedVectorValues(KNN_VECTOR_FIELD); + + assertNotNull( + "KnnVectorsReader should have quantized interface for field " + KNN_VECTOR_FIELD, + quantized); + } + } + } } diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.10.0.zip b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.10.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..0425b451fa0c8998731c22f27728c936b5083b41 GIT binary patch literal 5861 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 literal 0 HcmV?d00001 diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.11.0.zip b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.11.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..9dd53d92a9937412947bb21b0982c8c142ded7d2 GIT binary patch literal 5299 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 S6ZdBUX92P}fgbK#0N_8^bD#hK literal 0 HcmV?d00001 diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.11.1.zip b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int7_hnsw.9.11.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..29aef1b909fd61043ca1a2f866ed5931876506ea GIT binary patch literal 5291 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 O2B1t9xRRd&0RIMq2ZU1q diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int8_hnsw.9.11.0.zip b/lucene/backward-codecs/src/test/org/apache/lucene/backward_index/int8_hnsw.9.11.0.zip deleted file mode 100644 index 5fd94783427b3b73e7c56a9d98feb9639c6e241d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4781 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 vO!kW5ub=}Rtm5zO?fs67ll?fXD one byte quantizedVectorBytes = ((dimension + 1) >> 1) + Float.BYTES; } else {