vigyasharma commented on PR #14173: URL: https://github.com/apache/lucene/pull/14173#issuecomment-2620016142
Ran some early benchmarks to compare this flat storage based multi-vector approach with the existing parent-join approach. I would appreciate any feedback on the approach, benchmark setup, or any mistakes you spot along the way. **Observations:** 1. Latency and recall are better with multiVectors, when both parentJoin and multiVector benchmarks are run on my branch. However, the parentJoin benchmark has significantly better latency and recall when run on `main` branch. Some key differences between my branch and `main` branch runs are: 1. My branch always creates and loads the metadata needed for multiVector, even in the single vector (parentJoin) case. I went with a simplistic approach here so my guess is that this is the source of latency. 2. I compared by disabling merging for both benchmarks, because I haven't implemented merging changes yet. 3. I've added run results below, but I wouldn't put too much faith in them until we narrowed down the latency cause. 2. For parentJoin benchmark run on `main`, there is a visible drop in recall when I disable merges (as compared to a `main` branch run with merges enabled). Is this expected? ... _Note that `nDoc` on parentJoin is `numVectors + nDoc` on multiVector runs. This is from the parent documents created in addition to child vector documents._ #### ParentJoin v/s MultiVector (on multi-vector branch) ```ruby # multivector recall latency (ms) nVectors nDoc topK fanout maxConn beamWidth quantized index s index docs/s num segments index size (MB) vec disk (MB) vec RAM (MB) 0.673 3.548 10000 103 100 50 32 100 no 1.62 63.58 1 29.40 29.297 29.297 0.431 4.857 100000 1323 100 50 32 100 no 11.42 115.84 3 294.08 292.969 292.969 0.461 8.034 200000 2939 100 50 32 100 no 22.62 129.92 6 588.27 585.938 585.938 0.496 16.040 500000 8773 100 50 32 100 no 53.50 163.98 14 1470.72 1464.844 1464.844 # parentJoin on multi-vector branch # (merges disabled, creates and loads multivector config) recall latency (ms) nVectors nDoc topK fanout maxConn beamWidth quantized index s index docs/s num segments index size (MB) vec disk (MB) vec RAM (MB) 0.610 4.644 10000 10103 100 50 32 100 no 1.70 5946.44 1 29.51 29.297 29.297 0.242 5.189 100000 101323 100 50 32 100 no 11.34 8935.80 3 295.17 292.969 292.969 0.275 8.988 200000 202939 100 50 32 100 no 22.54 9005.50 6 590.51 585.938 585.938 0.290 16.605 500000 508773 100 50 32 100 no 52.70 9654.32 14 1476.26 1464.844 1464.844 ``` ... #### ParentJoin (on main) v/s MultiVector (on multivector branch) ```ruby # parentJoin (on main) recall latency (ms) nDoc topK fanout maxConn beamWidth quantized index s index docs/s force merge s num segments index size (MB) vec disk (MB) vec RAM (MB) 0.958 1.160 10000 100 50 32 100 no 1.49 6706.91 1.85 1 29.67 29.297 29.297 0.925 2.392 100000 100 50 32 100 no 34.98 2858.86 7.86 1 297.91 292.969 292.969 0.914 2.972 200000 100 50 32 100 no 63.80 3134.94 43.48 1 596.14 585.938 585.938 0.904 4.292 500000 100 50 32 100 no 151.49 3300.57 147.08 1 1491.81 1464.844 1464.844 # multivector recall latency (ms) nVectors nDoc topK fanout maxConn beamWidth quantized index s index docs/s num segments index size (MB) vec disk (MB) vec RAM (MB) 0.673 3.793 10000 103 100 50 32 100 no 1.59 64.78 1 29.40 29.297 29.297 0.431 4.572 100000 1323 100 50 32 100 no 11.22 117.87 3 294.08 292.969 292.969 0.461 7.681 200000 2939 100 50 32 100 no 22.38 131.32 6 588.27 585.938 585.938 0.496 16.292 500000 8773 100 50 32 100 no 54.10 162.17 14 1470.72 1464.844 1464.844 ``` ... #### ParentJoin with merges v/s ParentJoin with merges disabled (both on main) ```ruby # parentJoin (on main) recall latency (ms) nDoc topK fanout maxConn beamWidth quantized index s index docs/s force merge s num segments index size (MB) vec disk (MB) vec RAM (MB) 0.958 1.160 10000 100 50 32 100 no 1.49 6706.91 1.85 1 29.67 29.297 29.297 0.925 2.392 100000 100 50 32 100 no 34.98 2858.86 7.86 1 297.91 292.969 292.969 0.914 2.972 200000 100 50 32 100 no 63.80 3134.94 43.48 1 596.14 585.938 585.938 0.904 4.292 500000 100 50 32 100 no 151.49 3300.57 147.08 1 1491.81 1464.844 1464.844 ## parentJoin on main (merge disabled): recall latency (ms) nDoc topK fanout maxConn beamWidth quantized index s index docs/s force merge s num segments index size (MB) vec disk (MB) vec RAM (MB) 0.440 1.297 10000 100 50 32 100 no 1.76 5694.76 2.03 1 29.67 29.297 29.297 0.692 2.596 100000 100 50 32 100 no 11.35 8807.47 29.76 1 297.86 292.969 292.969 0.530 3.173 200000 100 50 32 100 no 22.03 9077.71 67.91 1 596.24 585.938 585.938 0.598 4.368 500000 100 50 32 100 no 53.20 9398.50 204.29 1 1493.26 1464.844 1464.844 ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org