A modular framework for evaluating disk-based vector search, enabling controlled ablations and end-to-end comparisons across diverse storage environments, concurrency regimes, and query distributions.
C++
13
3 commits
updated Jul 3, 2026
DiskVecLab is a modular evaluation framework for disk-based vector search that decouples core components and enables controlled ablations and end-to-end comparisons across diverse storage environments, concurrency regimes, and query distributions.
All datasets are publicly available and the links are provided as follows:
| Dataset | Dimensionality | Download Link | Note |
|---|---|---|---|
| LAION-T2I/I2I | 512/768 | Official Site (512 dim.)/Official Site (768 dim.) | Both 512 and 768-dimensional versions provides text based vectors and image based vectors. In experiments we use 512 dimensional version for text to image search (out-of-distribution) and 768 dimensional version for image to image search (in-distribution). |
| DEEP | 96 | Link from Yandex/Base Set/Query Set | |
| Text2Image | 200 | Link from Yandex/Base Set/Query Set | A text to image search (out-of-distribution) dataset where base sets are image vectors and query sets are text vectors. |
| SIFT | 128 | Official Site | |
| SpaceV | 100 | Official Repo |
We evaluated six state-of-the-art methods, including DiskANN, Starling, MARGO, PipeANN, Gorgeous, and SPANN. For details of the methods, please refer to the corresponding papers below:
Our experiments were conducted on Ubuntu 24.04 with the following environment:
The segmentation, in-segment optimization, and quantization can be configured independently.
An example usage can refer to ./test/search_segments.py.
CMakeLists.txt).config_local.sh), in which the corresponding parameters are set in the config file and passed to the index building step for all segments.def run_natural_segmentation_example():
NAME = "example_natural_segmentation"
# Instaniate global configuration and dataset specification, then run the partition experiment
P = NaturalParams(
split_name=NAME,
out_dir=f"{DATA_PATH}/data_split/{NAME}/", # Path to save the segments
num_shards=40, # Number of segments to split into
input_fmt="fvecs", # Input format of the dataset (e.g., fvecs)
)
B = BuildParams(
generate_config_dataset=DS_NAME,
config_local_path="config_local.sh", # Path to the index configuration file (e.g., config_local.sh)
)
create_and_build_experiment(
name=f"exp_{NAME}",
global_cfg=G,
dataset=DS,
partition=P,
build=B,
)
# Instaniate search parameters for segmented search, then run the search experiment
S = SearchParams(
build_type="release",
mode="search_split", # Search mode for segmented search
algo="knn", # Search mode for segmented search
shard_id=0,
config_local_overrides={ # Search-time overrides for the index configuration file
...
},
)
search_experiment(
name=f"exp_{NAME}",
global_cfg=G,
dataset=DS,
search=S,
)
2 commits
1 commits
C++
92.1%
C
2.0%
Python
1.2%
CMake
1.1%
A modular framework for evaluating disk-based vector search, enabling controlled ablations and end-to-end comparisons across diverse storage environments, concurrency regimes, and query distributions.
C++
13
3 commits
updated Jul 3, 2026
DiskVecLab is a modular evaluation framework for disk-based vector search that decouples core components and enables controlled ablations and end-to-end comparisons across diverse storage environments, concurrency regimes, and query distributions.
All datasets are publicly available and the links are provided as follows:
| Dataset | Dimensionality | Download Link | Note |
|---|---|---|---|
| LAION-T2I/I2I | 512/768 | Official Site (512 dim.)/Official Site (768 dim.) | Both 512 and 768-dimensional versions provides text based vectors and image based vectors. In experiments we use 512 dimensional version for text to image search (out-of-distribution) and 768 dimensional version for image to image search (in-distribution). |
| DEEP | 96 | Link from Yandex/Base Set/Query Set | |
| Text2Image | 200 | Link from Yandex/Base Set/Query Set | A text to image search (out-of-distribution) dataset where base sets are image vectors and query sets are text vectors. |
| SIFT | 128 | Official Site | |
| SpaceV | 100 | Official Repo |
We evaluated six state-of-the-art methods, including DiskANN, Starling, MARGO, PipeANN, Gorgeous, and SPANN. For details of the methods, please refer to the corresponding papers below:
Our experiments were conducted on Ubuntu 24.04 with the following environment:
The segmentation, in-segment optimization, and quantization can be configured independently.
An example usage can refer to ./test/search_segments.py.
CMakeLists.txt).config_local.sh), in which the corresponding parameters are set in the config file and passed to the index building step for all segments.def run_natural_segmentation_example():
NAME = "example_natural_segmentation"
# Instaniate global configuration and dataset specification, then run the partition experiment
P = NaturalParams(
split_name=NAME,
out_dir=f"{DATA_PATH}/data_split/{NAME}/", # Path to save the segments
num_shards=40, # Number of segments to split into
input_fmt="fvecs", # Input format of the dataset (e.g., fvecs)
)
B = BuildParams(
generate_config_dataset=DS_NAME,
config_local_path="config_local.sh", # Path to the index configuration file (e.g., config_local.sh)
)
create_and_build_experiment(
name=f"exp_{NAME}",
global_cfg=G,
dataset=DS,
partition=P,
build=B,
)
# Instaniate search parameters for segmented search, then run the search experiment
S = SearchParams(
build_type="release",
mode="search_split", # Search mode for segmented search
algo="knn", # Search mode for segmented search
shard_id=0,
config_local_overrides={ # Search-time overrides for the index configuration file
...
},
)
search_experiment(
name=f"exp_{NAME}",
global_cfg=G,
dataset=DS,
search=S,
)
2 commits
1 commits
C++
92.1%
C
2.0%
Python
1.2%
CMake
1.1%