Skip to content

Commit 9c81e33

Browse files
committed
Relax unit vector check for bfloat16
1 parent 2e815fe commit 9c81e33

File tree

3 files changed

+6
-2
lines changed

3 files changed

+6
-2
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/BQVectorUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626

2727
/** Utility class for vector quantization calculations */
2828
public class BQVectorUtils {
29-
private static final float EPSILON = 1e-4f;
29+
// NOTE: this is currently > 1e-4f due to bfloat16
30+
private static final float EPSILON = 1e-2f;
3031

3132
public static double sqrtNewtonRaphson(double x, double curr, double prev) {
3233
return (curr == prev) ? curr : sqrtNewtonRaphson(x, 0.5 * (curr + x / curr), curr);

server/src/main/java/org/elasticsearch/index/codec/vectors/OptimizedScalarQuantizer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public QuantizationResult[] multiScalarQuantize(
109109
}
110110

111111
public QuantizationResult scalarQuantize(float[] vector, float[] residualDestination, int[] destination, byte bits, float[] centroid) {
112-
assert similarityFunction != COSINE || VectorUtil.isUnitVector(vector);
112+
assert similarityFunction != COSINE || BQVectorUtils.isUnitVector(vector);
113113
assert similarityFunction != COSINE || VectorUtil.isUnitVector(centroid);
114114
assert vector.length <= destination.length;
115115
assert bits > 0 && bits <= 8;

server/src/main/java/org/elasticsearch/index/codec/vectors/es818/ES818BinaryFlatVectorsScorer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@
2727
import org.apache.lucene.util.hnsw.RandomVectorScorerSupplier;
2828
import org.apache.lucene.util.hnsw.UpdateableRandomVectorScorer;
2929
import org.elasticsearch.index.codec.vectors.BQSpaceUtils;
30+
import org.elasticsearch.index.codec.vectors.BQVectorUtils;
3031
import org.elasticsearch.index.codec.vectors.OptimizedScalarQuantizer;
3132
import org.elasticsearch.simdvec.ESVectorUtil;
3233

3334
import java.io.IOException;
3435

36+
import static org.apache.lucene.index.VectorSimilarityFunction.COSINE;
3537
import static org.apache.lucene.index.VectorSimilarityFunction.EUCLIDEAN;
3638
import static org.apache.lucene.index.VectorSimilarityFunction.MAXIMUM_INNER_PRODUCT;
3739

@@ -69,6 +71,7 @@ public RandomVectorScorer getRandomVectorScorer(
6971
assert binarizedVectors.size() > 0 : "BinarizedByteVectorValues must have at least one vector for ES816BinaryFlatVectorsScorer";
7072
OptimizedScalarQuantizer quantizer = binarizedVectors.getQuantizer();
7173
float[] centroid = binarizedVectors.getCentroid();
74+
assert similarityFunction != COSINE || BQVectorUtils.isUnitVector(target);
7275
float[] scratch = new float[vectorValues.dimension()];
7376
int[] initial = new int[target.length];
7477
byte[] quantized = new byte[BQSpaceUtils.B_QUERY * binarizedVectors.discretizedDimensions() / 8];

0 commit comments

Comments
 (0)