[ 
https://issues.apache.org/jira/browse/LUCENE-9322?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17138707#comment-17138707
 ] 

Varun Thacker commented on LUCENE-9322:
---------------------------------------

JDK 

 
{code:java}
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.242-b08, mixed mode)
{code}
 

 

This is my first time trying out JMH. I took the encoding approach we used in 
VectorField vs the encoding approach taken by DenseVectorField ( in SOLR-14397 
) and compared them

 

The VectorField approach to encode is much faster than using Base64 encoding  

 

 
{code:java}
@Benchmark
public void testVectorFieldEncoding() {
    float[] vector = new float[512];
    for (int i=0; i<512; i++) {
        vector[i] = i + i/1000f;
    }

    for (int i=0; i<10_000; i++) {
        ByteBuffer buffer = ByteBuffer.allocate(Float.BYTES * vector.length);
        buffer.asFloatBuffer().put(vector);
        buffer.array();
    }
}
{code}
 

JMH output

 
{code:java}
Result: 123.116 ±(99.9%) 2.671 ops/s [Average]
  Statistics: (min, avg, max) = (95.557, 123.116, 143.097), stdev = 11.310
  Confidence interval (99.9%): [120.445, 125.787]




# Run complete. Total time: 00:08:07


Benchmark                      Mode  Samples    Score  Score error  Units
o.e.MyBenchmark.testVectorFieldEncoding    thrpt      200  123.116        2.671 
 ops/s
{code}
 

 

 
{code:java}
@Benchmark
public void testBase64Encoding() {
    float[] vector = new float[512];
    for (int i=0; i<512; i++) {
        vector[i] = i + i/1000f;
    }

    for (int i=0; i<10_000; i++) {
        ByteBuffer buffer = ByteBuffer.allocate(Float.BYTES * vector.length);
        for (float value : vector) {
            buffer.putFloat(value);
        }
        buffer.rewind();

        java.util.Base64.getEncoder().encode(buffer).array();
    }
}
{code}
 

JMH output
{code:java}
Result: 35.069 ±(99.9%) 0.745 ops/s [Average]
  Statistics: (min, avg, max) = (25.792, 35.069, 41.335), stdev = 3.154
  Confidence interval (99.9%): [34.324, 35.814]




# Run complete. Total time: 00:08:06


Benchmark                      Mode  Samples   Score  Score error  Units
o.e.MyBenchmark.testBase64Encoding    thrpt      200  35.069        0.745  ops/s
{code}
 

> Discussing a unified vectors format API
> ---------------------------------------
>
>                 Key: LUCENE-9322
>                 URL: https://issues.apache.org/jira/browse/LUCENE-9322
>             Project: Lucene - Core
>          Issue Type: New Feature
>            Reporter: Julie Tibshirani
>            Priority: Major
>
> Two different approximate nearest neighbor approaches are currently being 
> developed, one based on HNSW ([#LUCENE-9004]) and another based on coarse 
> quantization ([#LUCENE-9136]). Each prototype proposes to add a new format to 
> handle vectors. In LUCENE-9136 we discussed the possibility of a unified API 
> that could support both approaches. The two ANN strategies give different 
> trade-offs in terms of speed, memory, and complexity, and it’s likely that 
> we’ll want to support both. Vector search is also an active research area, 
> and it would be great to be able to prototype and incorporate new approaches 
> without introducing more formats.
> To me it seems like a good time to begin discussing a unified API. The 
> prototype for coarse quantization 
> ([https://github.com/apache/lucene-solr/pull/1314]) could be ready to commit 
> soon (this depends on everyone's feedback of course). The approach is simple 
> and shows solid search performance, as seen 
> [here|https://github.com/apache/lucene-solr/pull/1314#issuecomment-608645326].
>  I think this API discussion is an important step in moving that 
> implementation forward.
> The goals of the API would be
> # Support for storing and retrieving individual float vectors.
> # Support for approximate nearest neighbor search -- given a query vector, 
> return the indexed vectors that are closest to it.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to