Usage
This page shows how to configure algorithms, run cuVS Bench from the command line, use Docker containers, and read the build and search results. The command-line runner uses the cuVS Bench orchestrator and the default cpp_gbench backend, so the end-to-end workflow can stay fully CLI-based. For dataset formats, built-in datasets, custom dataset descriptors, and ground-truth generation, see Benchmark Datasets.
Creating and customizing algorithm configurations
Algorithm YAML files define the build and search parameter sweeps for each algorithm. Dataset YAML files are covered in Benchmark Datasets.
Algorithm configs live in ${CUVS_HOME}/python/cuvs_bench/cuvs_bench/config/algos. A cuvs_cagra config looks like this:
Each config has three main fields:
Create a custom YAML file with a base group to override the default benchmark parameters. For parameter guidance, see the ANN Algorithm Parameter Tuning Guide.
Multi-GPU algorithms
cuVS Bench includes single-node multi-GPU versions of IVF-Flat, IVF-PQ, and CAGRA.
Smaller-scale benchmarks (<1M to 10M vectors)
Use cuvs_bench.get_dataset to prepare a built-in dataset. By default, datasets are stored under RAPIDS_DATASET_ROOT_DIR when that environment variable is set, or under a local datasets directory otherwise.
For available built-in datasets and ground-truth details, see Benchmark Datasets.
Large-scale benchmarks (>10M vectors)
cuvs_bench.get_dataset does not download billion-scale datasets. Prepare large datasets first using Benchmark Datasets, then run the same build, search, export, and plot workflow. Datasets at this scale are best suited to large-memory GPUs such as A100 or H100.
The following example prepares ground truth for the Yandex Deep-1B dataset and then runs benchmarks on a 100M-vector subset:
Use python -m cuvs_bench.split_groundtruth --help to see the full CLI help for the ground-truth split command.
Running with Docker containers
Docker images can run the full workflow or open a shell for manual commands. See Installation for image and tag guidance.
End-to-end run on GPU
Set DATA_FOLDER to a local directory. Datasets are stored in $DATA_FOLDER/datasets and results in $DATA_FOLDER/result.
The -u $(id -u) flag lets the container user match the host user, so files written to the mounted volume keep usable permissions.
End-to-end run on CPU
Use the CPU image and omit --gpus all on systems without a GPU.
Manual container workflow
All cuvs-bench images include the Conda packages. Start a shell when you want to run individual commands yourself:
Inside the container, run the same Python modules directly:
Containers can also run in detached mode.
Evaluating results
Build benchmarks report:
Search benchmarks report:
Time and end_to_end are measured differently, so end_to_end = Time * Iterations is only approximate. Output tables may also include the hyper-parameters for each benchmarked configuration. Recall can fluctuate when fewer queries are processed than the benchmark contains, because processed query count depends on iteration count.
Summary
cuVS Bench usage has three main steps: configure datasets and algorithm sweeps, run build and search through Python or Docker, and compare the reported build and search measurements. Start with built-in datasets for smaller tests, prepare large datasets separately for scale testing, and use the result tables to compare quality, latency, throughput, build time, and resource behavior across parameter settings.