@@ -6,7 +6,10 @@ use chroma_benchmark::{
6
6
datasets:: sift:: Sift1MData ,
7
7
} ;
8
8
use chroma_config:: { registry:: Registry , Configurable } ;
9
- use chroma_segment:: test:: TestDistributedSegment ;
9
+ use chroma_segment:: {
10
+ distributed_hnsw:: { DistributedHNSWSegmentFromSegmentError , DistributedHNSWSegmentReader } ,
11
+ test:: TestDistributedSegment ,
12
+ } ;
10
13
use chroma_system:: { ComponentHandle , Dispatcher , Orchestrator , System } ;
11
14
use chroma_types:: operator:: { Knn , KnnProjection } ;
12
15
use criterion:: { criterion_group, criterion_main, Criterion } ;
@@ -29,12 +32,10 @@ fn trivial_knn_filter(
29
32
dispatcher_handle : ComponentHandle < Dispatcher > ,
30
33
) -> KnnFilterOrchestrator {
31
34
let blockfile_provider = test_segments. blockfile_provider . clone ( ) ;
32
- let hnsw_provider = test_segments. hnsw_provider . clone ( ) ;
33
35
let collection_uuid = test_segments. collection . collection_id ;
34
36
KnnFilterOrchestrator :: new (
35
37
blockfile_provider,
36
38
dispatcher_handle,
37
- hnsw_provider,
38
39
1000 ,
39
40
test_segments. into ( ) ,
40
41
empty_fetch_log ( collection_uuid) ,
@@ -47,12 +48,10 @@ fn always_true_knn_filter(
47
48
dispatcher_handle : ComponentHandle < Dispatcher > ,
48
49
) -> KnnFilterOrchestrator {
49
50
let blockfile_provider = test_segments. blockfile_provider . clone ( ) ;
50
- let hnsw_provider = test_segments. hnsw_provider . clone ( ) ;
51
51
let collection_uuid = test_segments. collection . collection_id ;
52
52
KnnFilterOrchestrator :: new (
53
53
blockfile_provider,
54
54
dispatcher_handle,
55
- hnsw_provider,
56
55
1000 ,
57
56
test_segments. into ( ) ,
58
57
empty_fetch_log ( collection_uuid) ,
@@ -65,12 +64,10 @@ fn always_false_knn_filter(
65
64
dispatcher_handle : ComponentHandle < Dispatcher > ,
66
65
) -> KnnFilterOrchestrator {
67
66
let blockfile_provider = test_segments. blockfile_provider . clone ( ) ;
68
- let hnsw_provider = test_segments. hnsw_provider . clone ( ) ;
69
67
let collection_uuid = test_segments. collection . collection_id ;
70
68
KnnFilterOrchestrator :: new (
71
69
blockfile_provider,
72
70
dispatcher_handle,
73
- hnsw_provider,
74
71
1000 ,
75
72
test_segments. into ( ) ,
76
73
empty_fetch_log ( collection_uuid) ,
@@ -81,13 +78,15 @@ fn always_false_knn_filter(
81
78
fn knn (
82
79
test_segments : & TestDistributedSegment ,
83
80
dispatcher_handle : ComponentHandle < Dispatcher > ,
81
+ hnsw_reader : Option < DistributedHNSWSegmentReader > ,
84
82
knn_filter_output : KnnFilterOutput ,
85
83
query : Vec < f32 > ,
86
84
) -> KnnOrchestrator {
87
85
KnnOrchestrator :: new (
88
86
test_segments. blockfile_provider . clone ( ) ,
89
87
dispatcher_handle. clone ( ) ,
90
88
1000 ,
89
+ hnsw_reader,
91
90
knn_filter_output. clone ( ) ,
92
91
Knn {
93
92
embedding : query,
@@ -126,6 +125,21 @@ fn bench_query(criterion: &mut Criterion) {
126
125
let runtime = tokio_multi_thread ( ) ;
127
126
let test_segments = runtime. block_on ( sift1m_segments ( ) ) ;
128
127
128
+ let hnsw_reader = match runtime. block_on ( DistributedHNSWSegmentReader :: from_segment (
129
+ & test_segments. collection . clone ( ) ,
130
+ & test_segments. vector_segment ,
131
+ test_segments
132
+ . collection
133
+ . dimension
134
+ . expect ( "Collection dimension should be non-zero" ) as usize ,
135
+ test_segments. hnsw_provider . clone ( ) ,
136
+ ) ) {
137
+ Ok ( hnsw_reader) => Some ( * hnsw_reader) ,
138
+ Err ( err) if matches ! ( * err, DistributedHNSWSegmentFromSegmentError :: Uninitialized ) => None ,
139
+
140
+ Err ( err) => panic ! ( "{err}" ) ,
141
+ } ;
142
+
129
143
let config = RootConfig :: default ( ) ;
130
144
let system = System :: default ( ) ;
131
145
let registry = Registry :: new ( ) ;
@@ -159,6 +173,7 @@ fn bench_query(criterion: &mut Criterion) {
159
173
knn (
160
174
& test_segments,
161
175
dispatcher_handle. clone ( ) ,
176
+ hnsw_reader. clone ( ) ,
162
177
knn_filter_output. clone ( ) ,
163
178
query. clone ( ) ,
164
179
) ,
@@ -183,6 +198,7 @@ fn bench_query(criterion: &mut Criterion) {
183
198
knn (
184
199
& test_segments,
185
200
dispatcher_handle. clone ( ) ,
201
+ hnsw_reader. clone ( ) ,
186
202
knn_filter_output. clone ( ) ,
187
203
query. clone ( ) ,
188
204
) ,
@@ -207,6 +223,7 @@ fn bench_query(criterion: &mut Criterion) {
207
223
knn (
208
224
& test_segments,
209
225
dispatcher_handle. clone ( ) ,
226
+ hnsw_reader. clone ( ) ,
210
227
knn_filter_output. clone ( ) ,
211
228
query. clone ( ) ,
212
229
) ,
0 commit comments