Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Vector Index Benchmark for Embeddings (VIBE) is an extensible benchmark for approximate nearest neighbor search methods, or vector indexes, using modern embedding datasets.

License

NotificationsYou must be signed in to change notification settings

vector-index-bench/vibe

Repository files navigation

Radar chart

Vector Index Benchmark for Embeddings (VIBE) is an extensible benchmark for approximate nearest neighbor search methods, or vector indexes, using modern embedding datasets.

WebsitePaperLicenseGitHub stars

Overview

  • 📊 Modern vector index benchmark with embedding datasets
  • 🎯 Includes datasets for both in-distribution and out-out-distribution settings
  • 🏆 Includes the most comprehensive collection of state-of-the-art vector search algorithms
  • 💎 Support for quantized datasets in both 8-bit integer and binary precision
  • 🖥️ Support for HPC environments with Slurm and NUMA
  • 🚀 Support for GPU algorithms

Results

The current VIBE results can be viewed on our website:

https://vector-index-bench.github.io

The website also features several other tools and visualizations to explore the results.

Publication

E. Jääsaari, V. Hyvönen, M. Ceccarello, T. Roos, M. Aumüller.VIBE: Vector Index Benchmark for Embeddings.arXiv preprint arXiv:2505.17810, 2025.

Authors

VIBE is maintained byElias Jääsaari,Matteo Ceccarello, andMartin Aumüller.

Credits

The evaluation code and some algorithm implementations in VIBE are based on theann-benchmarks project.

License

VIBE is available under the MIT License (seeLICENSE). Thepyyaml library is also distributed in thevibe folder under the MIT License.

Getting started

Requirements

For example, to install Apptainer on Ubuntu:

sudo add-apt-repository -y ppa:apptainer/ppasudo apt updatesudo apt install -y apptainer

Some algorithms may require that the CPU supports AVX-512 instructions and some algorithms may require an Intel CPU due to a dependency on Intel MKL. The GPU algorithms assume that an NVIDIA GPU is available.

Important

For accurate benchmarking, it is recommended to disable SMT/hyperthreading:

echo off | sudo tee /sys/devices/system/cpu/smt/control

On hybrid architectures (e.g., Intel Raptor Lake), it is recommended to disable efficiency (E) cores.

If not running in an HPC or cloud environment, it is also recommended to set the performance governor

sudo cpupower frequency-set -g performance

and to check that transparent huge pages are set tomadvise ornever:

cat /sys/kernel/mm/transparent_hugepage/enabled

Building library images

Building all library images can be done using

./install.sh

The script can be used to either build images for all available libraries (./install.sh) or an image for a single library (e.g../install.sh --algorithm faiss).

Tip

install.sh takes an argument--build-dir that specifies the temporary build directory. For example, to speed up the build in a cluster environment, you can set the build directory to a location on an SSD while the project files are on a slower storage medium.

Tip

See anexample Slurm job for building the libraries using Slurm.

Running benchmarks

The benchmarks for a single dataset can be run usingrun.py. For example:

python3 run.py --dataset agnews-mxbai-1024-euclidean

The run.py script does not depend on any external libraries and can therefore be used without a container or a virtual environment.

Common options for run.py:

  • --parallelism n: Usen processes for benchmarking.
  • --module mod: Run the benchmark only for algorithms in module (library)mod.
  • --algorithm algo: Run the benchmark for only algorithmalgo.
  • --count k: Run the benchmarks usingk nearest neighbors (default 100).
  • --gpu: Run the benchmark in GPU mode.

For all options, see

python3 run.py --help

The benchmark should take less than 24 hours to run for a given dataset using parallelism > 12. We recommend having at least 16 GB of memory per used core.

Tip

See anexample Slurm job for running the benchmark using Slurm.

Plotting results

You should first build theplot.sif image:

singularity build plot.sif plot.def

Before plotting, the current results must first be exported:

./export_results.sh --parallelism 8

The results for a dataset can then plotted with e.g.:

./plot.sh --dataset agnews-mxbai-1024-euclidean

To plot the radar chart above, use:

./plot.sh --plot-type radar

For all available options, see:

./plot.sh --help

Tip

You can also useuv to directly runexport_results.py andplot.py without building the container image if preferable. The arguments for these scripts are the same as above.

Creating datasets from scratch

The benchmark code downloads precomputed embedding datasets. However, the datasets can also be recreated from scratch, and it is also possible to create new datasets by modifying thedatasets.py file.

Creating the datasets can be done usingcreate_dataset.sh. It first requires thatdataset.sif is built:

singularity build dataset.sif dataset.def

TheVIBE_CACHE environment variable should be set to a cache directory with at least 200 GB of free space when creating image embeddings using the Landmark or ImageNet datasets. Datasets can then be created using the--dataset argument (the--nv argument specifies that an available GPU can be used):

export VIBE_CACHE=$LOCAL_SCRATCH./create_dataset.sh --singularity-args"--bind$LOCAL_SCRATCH:$LOCAL_SCRATCH --nv" --dataset agnews-mxbai-1024-euclidean

Tip

See anexample Slurm job for creating datasets using Slurm.

Adding a new method to the benchmark

Add your algorithm in the foldervibe/algorithms/{METHOD}/ by providing

  • Python wrapper in module.py
  • Singularity container defination in image.def
  • Hyperparameter grid in config.yml

Evaluation

In-distribution datasets

NameTypendDistance
agnews-mxbai-1024-euclideanText769,3821024euclidean
arxiv-nomic-768-normalizedText1,344,643768any
ccnews-nomic-768-normalizedText495,328768any
celeba-resnet-2048-cosineImage201,5992048cosine
codesearchnet-jina-768-cosineCode1,374,067768cosine
glove-200-cosineWord1,192,514200cosine
gooaq-distilroberta-768-normalizedText1,475,024768any
imagenet-clip-512-normalizedImage1,281,167512any
landmark-dino-768-cosineImage760,757768cosine
landmark-nomic-768-normalizedImage760,757768any
simplewiki-openai-3072-normalizedText260,3723072any
yahoo-minilm-384-normalizedText677,305384any

Out-of-distribution datasets

NameTypendDistance
coco-nomic-768-normalizedText-to-Image282,360768any
imagenet-align-640-normalizedText-to-Image1,281,167640any
laion-clip-512-normalizedText-to-Image1,000,448512any
yandex-200-cosineText-to-Image1,000,000200cosine
yi-128-ipAttention187,843128IP
llama-128-ipAttention256,921128IP

Algorithms

MethodVersion
ANNOY1.17.3
FALCONN++git+5fd3f17
FlatNav0.1.2
CAGRA25.08.00
GGNN0.9
GLASSgit+8c69018
HNSW0.8.0
IVF (Faiss)1.12.0
IVF-PQ (Faiss)1.12.0
LVQ (SVS)0.0.9
LeanVec (SVS)0.0.9
LoRANN0.4
MLANNgit+f5d966b
MRPT2.0.2
NGT-ONNG2.4.5
NGT-QG2.4.5
NSG1.12.0
PUFFINNgit+fd86b0d
PyNNDescent0.5.13
RoarGraphgit+f2b49b6
ScaNN1.4.2
SymphonyQGgit+32a0019
Vamana (DiskANN)0.7.0

About

Vector Index Benchmark for Embeddings (VIBE) is an extensible benchmark for approximate nearest neighbor search methods, or vector indexes, using modern embedding datasets.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp