Files

sevensense-benches

Crate Docs License

Comprehensive performance benchmarks for the 7sense bioacoustic platform.

sevensense-benches contains Criterion.rs benchmark suites that validate performance targets across all 7sense crates. From HNSW search speedup to embedding throughput, these benchmarks ensure the platform meets its ambitious performance goals.

Features

  • HNSW Benchmarks: Search, insert, and recall measurements
  • Embedding Benchmarks: Inference throughput and latency
  • Clustering Benchmarks: HDBSCAN performance at scale
  • API Benchmarks: Request throughput and latency
  • Memory Profiling: Memory usage analysis
  • Regression Detection: Automatic performance regression alerts

Benchmark Suites

Suite Description Target Metrics
hnsw_benchmark Vector search performance 150x speedup, <50ms p99
embedding_benchmark Neural inference >100 segments/sec
clustering_benchmark HDBSCAN clustering O(n log n) scaling
api_benchmark HTTP endpoint latency <200ms identify, <50ms search

Installation

The benchmark crate is part of the workspace:

cd vibecast
cargo bench -p sevensense-benches

Running Benchmarks

All Benchmarks

# Run all benchmark suites
cargo bench -p sevensense-benches

# Generate HTML report
cargo bench -p sevensense-benches -- --save-baseline main

Specific Suite

# HNSW benchmarks only
cargo bench -p sevensense-benches --bench hnsw_benchmark

# Embedding benchmarks only
cargo bench -p sevensense-benches --bench embedding_benchmark

# Clustering benchmarks only
cargo bench -p sevensense-benches --bench clustering_benchmark

# API benchmarks only
cargo bench -p sevensense-benches --bench api_benchmark

Specific Benchmark

# Run only HNSW search benchmarks
cargo bench -p sevensense-benches --bench hnsw_benchmark -- "hnsw_search"

# Run benchmarks matching a pattern
cargo bench -p sevensense-benches -- "search"

Tutorial: HNSW Benchmarks

Benchmark Configuration

The HNSW benchmark suite tests various configurations:

// Index sizes tested
const SMALL_INDEX: usize = 10_000;
const MEDIUM_INDEX: usize = 100_000;
const LARGE_INDEX: usize = 500_000;

// K values for search
const K_VALUES: &[usize] = &[10, 50, 100];

Running Search Benchmarks

# Search performance at different scales
cargo bench -p sevensense-benches --bench hnsw_benchmark -- "hnsw_search"

# Sample output:
# hnsw_search/small/k10    time:   [0.45 ms 0.47 ms 0.49 ms]
# hnsw_search/medium/k10   time:   [1.89 ms 1.94 ms 1.99 ms]
# hnsw_search/large/k10    time:   [5.23 ms 5.41 ms 5.58 ms]

Measuring Speedup

# Compare HNSW vs brute force
cargo bench -p sevensense-benches --bench hnsw_benchmark -- "speedup"

# Expected output:
# HNSW (100K):  2.1 ms
# Brute force:  315 ms
# Speedup:      150x ✓

Recall Measurement

# Measure recall@k accuracy
cargo bench -p sevensense-benches --bench hnsw_benchmark -- "recall"

# Expected:
# recall@10:  0.97 (target: ≥0.95) ✓
# recall@50:  0.98 (target: ≥0.95) ✓
# recall@100: 0.99 (target: ≥0.98) ✓
Tutorial: Embedding Benchmarks

Inference Throughput

# Measure embedding generation speed
cargo bench -p sevensense-benches --bench embedding_benchmark -- "inference"

# Sample output:
# single_inference      time:   [14.2 ms 14.8 ms 15.4 ms]
# batch_inference/32    time:   [112 ms 118 ms 124 ms]
#                       thrpt:  [258/s 271/s 285/s]

Mel Spectrogram Performance

# Mel computation benchmarks
cargo bench -p sevensense-benches --bench embedding_benchmark -- "mel"

# Expected:
# mel_compute/5s_segment  time:   [12.3 ms 12.8 ms 13.4 ms]
#                         target: <20ms ✓

Memory Usage

# Profile memory during embedding
cargo bench -p sevensense-benches --bench embedding_benchmark -- "memory"

# Output includes peak memory usage per batch size
Tutorial: Clustering Benchmarks

HDBSCAN Performance

# HDBSCAN at different scales
cargo bench -p sevensense-benches --bench clustering_benchmark -- "hdbscan"

# Sample output:
# hdbscan/fit/500     time:   [45.2 ms 47.1 ms 49.3 ms]
# hdbscan/fit/1000    time:   [123 ms 128 ms 134 ms]
# hdbscan/fit/2000    time:   [412 ms 431 ms 452 ms]

Cluster Assignment

# Assigning new points to existing clusters
cargo bench -p sevensense-benches --bench clustering_benchmark -- "assignment"

# Output:
# cluster_assignment/single  time:   [1.23 µs 1.28 µs 1.34 µs]
# cluster_assignment/batch   thrpt:  [780K/s 812K/s 845K/s]

Silhouette Score

# Cluster quality metric computation
cargo bench -p sevensense-benches --bench clustering_benchmark -- "silhouette"
Tutorial: API Benchmarks

Endpoint Latency

# API endpoint benchmarks
cargo bench -p sevensense-benches --bench api_benchmark -- "endpoint"

# Sample output:
# identify_endpoint     time:   [142 ms 148 ms 155 ms]
#                       target: <200ms ✓
# search_endpoint       time:   [32 ms 35 ms 38 ms]
#                       target: <50ms ✓

Concurrent Requests

# Throughput under load
cargo bench -p sevensense-benches --bench api_benchmark -- "concurrent"

# Output shows requests/second at various concurrency levels
Tutorial: Regression Testing

Setting Baseline

# Save current performance as baseline
cargo bench -p sevensense-benches -- --save-baseline main

Comparing Against Baseline

# Compare current performance vs baseline
cargo bench -p sevensense-benches -- --baseline main

# Output shows regressions:
# hnsw_search/medium  time:   [+5.2% +7.1% +9.3%] (regression)

CI Integration

# .github/workflows/bench.yml
name: Benchmark
on: [push, pull_request]

jobs:
  benchmark:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run benchmarks
        run: cargo bench -p sevensense-benches -- --noplot
      - name: Check for regressions
        run: |
          cargo bench -p sevensense-benches -- --baseline main
          # Fail if >10% regression

Performance Targets

Metric Target How to Verify
HNSW Speedup 150x vs brute force cargo bench -- "speedup"
Search p99 <50ms cargo bench -- "hnsw_search"
Recall@10 ≥0.95 cargo bench -- "recall"
Embedding Throughput >100/s cargo bench -- "inference"
Identify Latency <200ms cargo bench -- "identify"
Search Latency <50ms cargo bench -- "search_endpoint"

Benchmark Utilities

The crate provides utilities for benchmark setup:

use sevensense_benches::{
    generate_random_vectors,
    generate_clustered_vectors,
    SimpleHnswIndex,
    PERCH_EMBEDDING_DIM,
};

// Generate test data
let vectors = generate_random_vectors(10000, PERCH_EMBEDDING_DIM);

// Generate clustered data
let clustered = generate_clustered_vectors(10000, PERCH_EMBEDDING_DIM, 50, 0.1);

// Simple HNSW for benchmarking
let mut index = SimpleHnswIndex::new(16, 200);
index.build(&vectors);

Output Formats

# Default output (console)
cargo bench -p sevensense-benches

# JSON output
cargo bench -p sevensense-benches -- --format json > results.json

# Generate HTML report
cargo bench -p sevensense-benches -- --save-baseline results
open target/criterion/report/index.html

License

MIT License - see LICENSE for details.