mlcommons / mlcommons/storage

DISKANN 10M×1536-dim recall requires search_list=4000 to reach 95%, causing unacceptable latency and throughput

Open
#425 6 comments 0 reactions 1 assignee View on GitHub

@idevasena is already working on this.

Since Jun 10, 2026.

VectorDB TF
Dominant language
Python
Stars
203
Forks
67
Avg merge
20m
Merged PRs (30d)
8

Description

DISKANN 10M×1536-dim recall requires search_list=4000 to reach 95%, causing extreme latency and low throughput

Environment
Item Value
Repo / branch mlcommons/mlperf_storage, main (June 2026)
Milvus v2.6.x, standalone Docker
Storage Solidigm D7-PS1010 TLC 7.68TB NVMe (XFS)
Host 377 GB RAM, Xeon
Dataset 10,000,000 vectors × 1536-dim, uniform random
Metric COSINE
Index DISKANN, max_degree=64, search_list_size=200
Shards 10
Benchmark vdbbench --runtime 300, 8 workers, batch_size=10
Problem

With a correctly-constructed DISKANN index (max_degree=64, the standard value; not the erroneous --max-degree default of 16), reaching 95% recall@10 on 10M × 1536-dim uniform vectors still requires search_list=4000. At this search depth, QPS collapses to 18 and per-query latency exceeds 400 ms — unacceptable for any practical workload.

Results
search_list QPS Recall@10 Mean (ms) P99 (ms)
200 588 59.4% 13.3 14.6
400 356 70.7% 22.3 23.1
800 144 80.5% 55.3 58.4
1200 84 85.7% 94.6 102.6
2000 43 90.6% 183.5 207.5
4000 18 95.2% 435.2 511.2
Root Cause Hypothesis

1536-dimensional uniform vectors are nearly equidistant (nearest-neighbor distance / 100th-neighbor distance ≈ 0.96, vs ≈ 0.7 for SIFT 128-dim). Without clustering structure, DISKANN's graph traversal must explore a large fraction of the graph to find true neighbors — there are no shortcuts. This may be a fundamental limitation of graph-based ANN on high-dimensional uniform data, not a parameter-tuning issue.

Questions
  1. Has anyone achieved 95% recall at search_list ≤ 200 on 10M×1536-dim uniform DISKANN? If so, what configuration?
  2. Is this expected for uniform high-dimensional data? Should the benchmark use a more structured dataset?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.