From 44815ee7fde02a7d46a4a3cc629f39dc917bdb05 Mon Sep 17 00:00:00 2001 From: yichuan520030910320 Date: Wed, 2 Jul 2025 05:18:00 +0000 Subject: [PATCH] add configuable funcname --- demo.ipynb | 979 +---- examples/data/FairTree__OSDI_25_ (1).pdf | Bin 0 -> 677798 bytes examples/main_cli_example.py | 4 +- .../leann_backend_hnsw/hnsw_backend.py | 3 + test_pdf_index/pdf_documents.leann.meta.json | 3188 ++++++++++++++++- 5 files changed, 3208 insertions(+), 966 deletions(-) create mode 100644 examples/data/FairTree__OSDI_25_ (1).pdf diff --git a/demo.ipynb b/demo.ipynb index 2346957..0aacafe 100644 --- a/demo.ipynb +++ b/demo.ipynb @@ -34,7 +34,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Batches: 100%|██████████| 1/1 [00:00<00:00, 2.82it/s]\n" + "Batches: 100%|██████████| 1/1 [00:00<00:00, 2.91it/s]\n" ] }, { @@ -48,7 +48,7 @@ "Writing bin: knowledge_disk.index_max_base_norm.bin\n", "bin: #pts = 1, #dims = 1, size = 12B\n", "Finished writing bin.\n", - "Time for preprocessing data for inner product: 0.000163 seconds\n", + "Time for preprocessing data for inner product: 0.000172 seconds\n", "Reading max_norm_of_base from knowledge_disk.index_max_base_norm.bin\n", "Reading bin file knowledge_disk.index_max_base_norm.bin ...\n", "Opening bin file knowledge_disk.index_max_base_norm.bin... \n", @@ -58,7 +58,7 @@ "! Using prepped_base file at knowledge_prepped_base.bin\n", "Starting index build: R=32 L=64 Query RAM budget: 4.02653e+09 Indexing ram budget: 8 T: 8\n", "getting bin metadata\n", - "Time for getting bin metadata: 0.000020 seconds\n", + "Time for getting bin metadata: 0.000019 seconds\n", "Compressing 769-dimensional data into 512 bytes per vector.\n", "Opened: knowledge_prepped_base.bin, size: 18464, cache_size: 18464\n", "Training data with 6 samples loaded.\n", @@ -86,17 +86,17 @@ "done.\n", "Loaded PQ pivot information\n", "Processing points [0, 6)...done.\n", - "Time for generating quantized data: 0.051329 seconds\n", + "Time for generating quantized data: 0.055587 seconds\n", "Full index fits in RAM budget, should consume at most 2.03973e-05GiBs, so building in one shot\n", "L2: Using AVX2 distance computation DistanceL2Float\n", "Passed, empty search_params while creating index config\n", "Using only first 6 from file.. \n", "Starting index build with 6 points... \n", - "0% of index build completed.Starting final cleanup..done. Link time: 0.00016s\n", + "0% of index build completed.Starting final cleanup..done. Link time: 0.00011s\n", "Index built with degree: max:5 avg:5 min:5 count(deg<2):0\n", "Not saving tags as they are not enabled.\n", - "Time taken for save: 0.00015s.\n", - "Time for building merged vamana index: 0.000982 seconds\n", + "Time taken for save: 0.000148s.\n", + "Time for building merged vamana index: 0.000836 seconds\n", "Opened: knowledge_prepped_base.bin, size: 18464, cache_size: 18464\n", "Vamana index file size=168\n", "Opened: knowledge_disk.index, cache_size: 67108864\n", @@ -111,11 +111,11 @@ "Finished writing bin.\n", "Output disk index file written to knowledge_disk.index\n", "Finished writing 28672B\n", - "Time for generating disk layout: 0.044798 seconds\n", + "Time for generating disk layout: 0.040268 seconds\n", "Opened: knowledge_prepped_base.bin, size: 18464, cache_size: 18464\n", "Loading base knowledge_prepped_base.bin. #points: 6. #dim: 769.\n", "Wrote 1 points to sample file: knowledge_sample_data.bin\n", - "Indexing time: 0.0974831\n", + "Indexing time: 0.0970594\n", "INFO: Leann metadata saved to knowledge.leann.meta.json\n" ] }, @@ -163,14 +163,14 @@ "Disk-Index File Meta-data: # nodes per sector: 1, max node len (bytes): 3100, max node degree: 5\n", "Disk-Index Meta: nodes per sector: 1, max node len: 3100, max node degree: 5\n", "Setting up thread-specific contexts for nthreads: 8\n", - "allocating ctx: 0x77203100b000 to thread-id:130971745651648\n", - "allocating ctx: 0x77202fc8c000 to thread-id:130971756137280\n", - "allocating ctx: 0x77202fc7b000 to thread-id:130971735166016\n", - "allocating ctx: 0x77202fc6a000 to thread-id:130983600146240\n", - "allocating ctx: 0x77202fc59000 to thread-id:130971766622912\n", - "allocating ctx: 0x77202fc48000 to thread-id:130971703709120\n", - "allocating ctx: 0x77202fc37000 to thread-id:130971714194752\n", - "allocating ctx: 0x77202fc26000 to thread-id:130971724680384\n", + "allocating ctx: 0x7a33f7204000 to thread-id:134367072315200\n", + "allocating ctx: 0x7a33f6805000 to thread-id:134355206802368\n", + "allocating ctx: 0x7a33f5e72000 to thread-id:134355217288000\n", + "allocating ctx: 0x7a33f5e61000 to thread-id:134355227773632\n", + "allocating ctx: 0x7a33f5e50000 to thread-id:134355196316736\n", + "allocating ctx: 0x7a33f5e3f000 to thread-id:134355164859840\n", + "allocating ctx: 0x7a33f5e2e000 to thread-id:134355175345472\n", + "allocating ctx: 0x7a33f5e1d000 to thread-id:134355185831104\n", "Loading centroid data from medoids vector data of 1 medoid(s)\n", "Reading bin file knowledge_disk.index_max_base_norm.bin ...\n", "Opening bin file knowledge_disk.index_max_base_norm.bin... \n", @@ -190,7 +190,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Batches: 100%|██████████| 1/1 [00:00<00:00, 56.33it/s]" + "Batches: 100%|██████████| 1/1 [00:00<00:00, 60.54it/s]" ] }, { @@ -200,7 +200,7 @@ "INFO: DiskANN ZMQ mode enabled - ensuring embedding server is running\n", "INFO: Starting session-level embedding server as a background process...\n", "INFO: Running command from project root: /home/ubuntu/LEANN_clean/leann\n", - "INFO: Server process started with PID: 313817\n" + "INFO: Server process started with PID: 424761\n" ] }, { @@ -224,100 +224,100 @@ "[EmbeddingServer LOG]: INFO: Loaded 6 demo documents\n", "[EmbeddingServer LOG]: INFO: ZMQ ROUTER server listening on port 5555\n", "[EmbeddingServer LOG]: INFO: Embedding server ready to serve requests\n", - "reserve ratio: [EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 3 bytes\n", - "1\n", - "Graph traversal completed, hops: 3\n", + "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 3 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 1 node embeddings: [0]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 0\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000025 seconds\n", + "[EmbeddingServer LOG]: Time taken for text lookup: 0.000028 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 1, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 1\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.019455 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.019294 seconds\n", "[EmbeddingServer LOG]: Batch size: 1, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000176 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 3.062818 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.052912 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000228 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 3.136761 seconds\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000210 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 3.065444 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.041810 seconds\n", + "[EmbeddingServer LOG]: INFO: Serialize time: 0.000194 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 3.128073 seconds\n", "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 7 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 5 node embeddings: [1, 2, 3, 4, 5]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 5\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000045 seconds\n", + "[EmbeddingServer LOG]: Time taken for text lookup: 0.000042 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 5, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 5\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001596 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001791 seconds\n", "[EmbeddingServer LOG]: Batch size: 5, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000094 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 3.517292 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000360 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000155 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 3.520236 seconds\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000112 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 3.674183 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000372 seconds\n", + "[EmbeddingServer LOG]: INFO: Serialize time: 0.000177 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 3.677425 seconds\n", "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 7 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 5 node embeddings: [3, 4, 2, 1, 0]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 4\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000031 seconds\n", + "[EmbeddingServer LOG]: Time taken for text lookup: 0.000030 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 5, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 5\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001254 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001550 seconds\n", "[EmbeddingServer LOG]: Batch size: 5, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000076 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.009231 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000189 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000087 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.011405 seconds\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000097 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.009335 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000154 seconds\n", + "[EmbeddingServer LOG]: INFO: Serialize time: 0.000073 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.011773 seconds\n", "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 7 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 5 node embeddings: [0, 1, 2, 4, 5]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 5\n", "[EmbeddingServer LOG]: Time taken for text lookup: 0.000020 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 5, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 5\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.000968 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001041 seconds\n", "[EmbeddingServer LOG]: Batch size: 5, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000071 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008908 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000148 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000055 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010627 seconds\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000125 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008972 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000151 seconds\n", + "[EmbeddingServer LOG]: INFO: Serialize time: 0.000048 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010853 seconds\n", "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 7 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 5 node embeddings: [3, 1, 0, 2, 5]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 5\n", "[EmbeddingServer LOG]: Time taken for text lookup: 0.000020 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 5, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 5\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.000959 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001350 seconds\n", "[EmbeddingServer LOG]: Batch size: 5, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000071 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008822 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000151 seconds\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008869 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000146 seconds\n", "[EmbeddingServer LOG]: INFO: Serialize time: 0.000063 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010516 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.011054 seconds\n", "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 7 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 5 node embeddings: [0, 2, 3, 4, 5]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 5\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000019 seconds\n", + "[EmbeddingServer LOG]: Time taken for text lookup: 0.000022 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 5, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 5\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001046 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001195 seconds\n", "[EmbeddingServer LOG]: Batch size: 5, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000074 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008821 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000146 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000059 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010625 seconds\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008903 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000145 seconds\n", + "[EmbeddingServer LOG]: INFO: Serialize time: 0.000060 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010921 seconds\n", "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 7 bytes\n", "[EmbeddingServer LOG]: INFO: Request for 5 node embeddings: [1, 0, 3, 4, 5]\n", "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 5\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000019 seconds\n", + "[EmbeddingServer LOG]: Time taken for text lookup: 0.000020 seconds\n", "[EmbeddingServer LOG]: INFO: Total batch size: 5, max_batch_size: 128\n", "[EmbeddingServer LOG]: INFO: Processing batch of size 5\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.000947 seconds\n", + "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.001188 seconds\n", "[EmbeddingServer LOG]: Batch size: 5, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000071 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008823 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000143 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000047 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010491 seconds\n", - "Score: -0.481 - C++ is a powerful programming language\n", + "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", + "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.008858 seconds\n", + "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000153 seconds\n", + "[EmbeddingServer LOG]: INFO: Serialize time: 0.000052 seconds\n", + "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.010886 seconds\n", + "reserve ratio: Score: -0.481 - C++ is a powerful programming language1\n", + "Graph traversal completed, hops: 3\n", + "\n", "Score: -1.049 - Java is a powerful programming language\n" ] }, @@ -325,847 +325,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 3 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 1 node embeddings: [1]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 1\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000020 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 1, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 1\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.000475 seconds\n", - "[EmbeddingServer LOG]: Batch size: 1, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000245 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.005035 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000223 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000076 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.006687 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [41, 3, 40, 35, 27, 11, 2, 34, 7, 17, 53, 36, 10, 5, 6, 23, 39, 38, 15, 29, 25, 20, 4, 13, 26, 37, 33, 28, 21, 32, 12, 50]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 2 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.006198 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000091 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043852 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000362 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000303 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.051755 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [35, 40, 25, 12, 1, 2, 20, 24, 53, 9, 3, 6, 36, 11, 27, 41, 34, 26, 29, 33, 28, 5, 21, 17, 13, 7, 32, 30, 15, 31, 39, 4]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000036 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.006460 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000094 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043777 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000364 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000125 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.051677 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [41, 14, 30, 27, 11, 7, 31, 15, 53, 0, 4, 5, 1, 36, 13, 37, 39, 40, 38, 3, 22, 29, 34, 32, 19, 33, 25, 26, 35, 28, 8, 50]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005619 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000119 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043553 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000359 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000145 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050564 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [39, 4, 37, 34, 26, 41, 13, 15, 35, 32, 29, 50, 30, 1, 5, 27, 14, 3, 36, 23, 40, 12, 28, 7, 11, 22, 31, 2, 19, 33, 8, 17]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 50\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.006054 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043605 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000074 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.051038 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [37, 7, 41, 22, 50, 0, 36, 23, 39, 8, 11, 35, 53, 16, 30, 14, 1, 4, 15, 40, 38, 27, 13, 6, 19, 10, 3, 25, 34, 45, 29, 48]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000040 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005921 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043591 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000359 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000081 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050846 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [55, 54, 44, 45, 49, 46, 51, 8, 42, 52, 43, 50, 53, 47, 0, 2, 24, 5, 15, 36, 37, 41, 1, 6, 19, 9, 35, 16, 7, 17, 22, 26]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005599 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000090 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043636 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000369 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000118 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050578 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [27, 34, 20, 32, 3, 26, 2, 24, 22, 51, 31, 35, 1, 25, 12, 21, 41, 38, 33, 29, 40, 13, 10, 15, 4, 30, 14, 6, 17, 11, 37, 39]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 51\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000036 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005486 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000090 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043729 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000371 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000092 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050599 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [31, 3, 8, 32, 34, 12, 41, 21, 27, 2, 10, 24, 45, 13, 40, 1, 35, 29, 20, 28, 15, 4, 17, 14, 26, 25, 36, 38, 23, 37, 11, 30]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 45\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005491 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000090 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043680 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000072 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050465 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [26, 6, 30, 32, 40, 27, 3, 7, 10, 20, 15, 24, 55, 1, 28, 35, 8, 21, 29, 31, 11, 17, 33, 9, 5, 34, 23, 19, 2, 36, 22, 37]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000032 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005579 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043559 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000372 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000078 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050408 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [42, 53, 50, 49, 19, 55, 45, 47, 44, 54, 46, 51, 0, 41, 24, 17, 48, 52, 16, 1, 15, 5, 40, 2, 36, 35, 3, 6, 9, 37, 14, 34]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005751 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043583 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000072 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050691 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [48, 24, 52, 45, 44, 42, 51, 46, 43, 53, 47, 2, 55, 49, 50, 1, 6, 36, 19, 26, 35, 41, 9, 16, 25, 5, 40, 0, 3, 37, 8, 17]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005239 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043486 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000374 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000132 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050063 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [50, 46, 52, 0, 43, 55, 45, 44, 37, 26, 48, 42, 53, 54, 49, 5, 51, 19, 16, 1, 22, 36, 8, 41, 7, 14, 15, 11, 38, 4, 40, 25]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005200 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043580 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000364 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000136 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050169 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [48, 5, 17, 55, 49, 50, 43, 53, 46, 42, 47, 52, 24, 54, 44, 51, 15, 16, 0, 19, 37, 35, 8, 1, 22, 41, 6, 2, 9, 7, 36, 27]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005379 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043595 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000364 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000079 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050286 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 10, 6, 26, 55, 18, 2, 7, 34, 38, 28, 21, 17, 53, 24, 19, 3, 41, 36, 11, 13, 40, 33, 5, 25, 27, 20, 32, 4, 31, 12, 15]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005289 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043688 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000358 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000075 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050273 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [15, 9, 5, 22, 13, 25, 29, 48, 18, 19, 7, 37, 16, 6, 21, 17, 41, 39, 14, 26, 27, 1, 32, 20, 38, 4, 34, 33, 36, 35, 11, 31]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 48\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000032 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005197 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000107 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043549 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000364 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000073 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050126 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [48, 53, 42, 47, 25, 43, 45, 50, 54, 52, 44, 49, 46, 35, 0, 19, 51, 1, 5, 6, 41, 37, 26, 7, 8, 11, 36, 2, 3, 22, 9, 16]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 54\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004973 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000098 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043565 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000362 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000070 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050157 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [55, 44, 43, 24, 48, 50, 49, 45, 52, 46, 19, 2, 54, 47, 51, 53, 6, 1, 41, 5, 16, 37, 0, 9, 35, 17, 15, 7, 26, 25, 27, 8]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005029 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000096 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043512 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000359 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000127 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050025 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 29, 37, 33, 49, 36, 34, 15, 23, 13, 25, 53, 41, 3, 5, 4, 10, 27, 14, 11, 35, 2, 7, 39, 38, 31, 28, 22, 6, 32, 12, 30]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000042 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005203 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000095 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043577 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000069 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050252 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [39, 41, 34, 32, 20, 8, 38, 12, 23, 15, 3, 27, 21, 0, 44, 4, 1, 22, 36, 33, 35, 31, 40, 5, 14, 19, 11, 7, 28, 37, 26, 29]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 44\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000057 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005057 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000095 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043559 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000358 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000071 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050047 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [3, 42, 26, 17, 16, 25, 27, 28, 33, 32, 35, 1, 10, 31, 30, 6, 34, 2, 21, 29, 12, 20, 13, 38, 43, 15, 52, 4, 11, 54, 49, 44]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 54\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004832 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000093 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043604 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000365 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000072 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049907 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [21, 12, 28, 6, 18, 3, 15, 13, 34, 32, 2, 10, 29, 52, 17, 1, 33, 31, 25, 35, 27, 26, 9, 4, 40, 8, 19, 38, 39, 22, 36, 23]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 52\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004736 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000095 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043551 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000075 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049720 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [55, 50, 1, 0, 43, 45, 49, 54, 5, 44, 19, 48, 47, 52, 35, 41, 36, 42, 46, 40, 37, 11, 51, 16, 14, 7, 3, 10, 6, 27, 23, 39]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000052 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005280 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000097 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043612 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000069 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050364 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [20, 34, 2, 12, 21, 31, 17, 33, 15, 3, 35, 28, 13, 29, 26, 10, 27, 1, 8, 9, 32, 6, 4, 25, 19, 24, 30, 14, 22, 23, 7, 11]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 35\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004933 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000093 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043592 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000362 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000087 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049905 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [31, 12, 13, 1, 28, 16, 33, 38, 14, 29, 15, 26, 19, 18, 30, 24, 49, 3, 27, 41, 32, 35, 40, 4, 2, 20, 39, 21, 37, 10, 23, 11]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 49\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005100 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043713 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000358 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000132 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050184 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [8, 22, 17, 21, 41, 25, 45, 27, 14, 19, 7, 32, 6, 34, 2, 18, 0, 13, 1, 5, 20, 39, 38, 37, 40, 4, 9, 23, 31, 3, 29, 36]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 45\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005211 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043583 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000369 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000082 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050108 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [47, 43, 45, 36, 53, 55, 42, 49, 46, 37, 51, 19, 26, 48, 5, 44, 41, 54, 1, 7, 40, 52, 11, 35, 4, 0, 14, 22, 38, 23, 8, 6]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005326 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043689 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000359 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000077 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050398 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [51, 44, 54, 6, 0, 48, 49, 53, 47, 24, 55, 42, 45, 46, 43, 50, 2, 35, 1, 25, 16, 26, 9, 17, 36, 10, 15, 20, 19, 34, 3, 41]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005019 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043549 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000076 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049855 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 33, 12, 26, 28, 24, 30, 35, 27, 4, 32, 21, 13, 34, 2, 29, 7, 19, 53, 41, 40, 20, 31, 10, 25, 36, 38, 6, 23, 15, 11, 39]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004843 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043592 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000077 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049748 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [41, 31, 23, 38, 3, 13, 27, 15, 7, 50, 0, 1, 39, 36, 5, 40, 34, 37, 14, 29, 32, 11, 22, 12, 35, 33, 26, 2, 28, 20, 19, 30]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 50\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000046 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004848 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043578 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000355 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000079 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049762 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [48, 35, 43, 45, 50, 42, 53, 52, 19, 55, 44, 54, 51, 46, 47, 40, 6, 1, 3, 36, 34, 26, 7, 2, 5, 41, 38, 27, 15, 25, 9, 10]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005006 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043567 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000356 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000067 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049898 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [27, 37, 25, 11, 31, 7, 17, 24, 46, 3, 23, 1, 14, 32, 5, 15, 28, 26, 40, 22, 33, 4, 34, 21, 8, 13, 10, 38, 6, 29, 20, 19]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 46\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004698 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043511 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000079 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049511 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [19, 0, 45, 9, 15, 5, 53, 24, 8, 22, 37, 6, 7, 14, 43, 50, 39, 25, 47, 34, 1, 23, 48, 13, 36, 26, 27, 32, 42, 55, 21, 11]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005009 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043560 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000356 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000067 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049864 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [5, 35, 27, 9, 23, 1, 11, 8, 39, 31, 50, 37, 14, 41, 15, 22, 6, 36, 25, 4, 40, 3, 26, 38, 30, 13, 32, 29, 10, 19, 2, 34]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 50\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004949 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000099 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043564 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000087 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049865 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [32, 34, 33, 14, 4, 30, 27, 3, 12, 28, 13, 15, 18, 49, 21, 23, 29, 7, 41, 20, 40, 25, 26, 1, 35, 38, 2, 37, 17, 22, 11, 8]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 49\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000036 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004950 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043601 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000355 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000073 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049895 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [41, 40, 50, 0, 5, 23, 35, 11, 29, 34, 19, 1, 4, 39, 37, 13, 10, 3, 7, 38, 27, 2, 22, 15, 14, 53, 6, 33, 26, 8, 25, 31]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005066 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000090 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043597 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000358 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000077 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.050019 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [48, 42, 52, 46, 43, 49, 50, 6, 24, 55, 54, 45, 51, 53, 47, 35, 5, 1, 19, 41, 8, 16, 37, 36, 3, 9, 26, 0, 15, 2, 34, 40]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.005022 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000114 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043570 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000364 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000069 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049988 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 23, 30, 0, 5, 39, 25, 32, 53, 41, 7, 35, 37, 14, 36, 27, 40, 10, 13, 4, 38, 3, 22, 15, 6, 34, 29, 26, 33, 28, 17, 50]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000036 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004957 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000085 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043560 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000078 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049927 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [5, 15, 19, 14, 13, 21, 0, 30, 28, 29, 45, 37, 8, 41, 7, 39, 23, 36, 4, 1, 11, 32, 40, 16, 38, 27, 34, 31, 9, 3, 35, 25]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 45\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004693 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000095 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043676 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000356 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000077 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049752 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [25, 27, 35, 9, 24, 47, 6, 3, 28, 38, 7, 17, 50, 18, 1, 32, 29, 34, 10, 41, 21, 31, 13, 8, 15, 20, 33, 4, 19, 30, 36, 12]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 50\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004860 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000106 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043520 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000085 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049804 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [37, 23, 31, 15, 22, 7, 11, 40, 38, 19, 30, 0, 53, 5, 41, 34, 4, 13, 27, 1, 39, 36, 8, 33, 32, 28, 29, 35, 3, 16, 50, 25]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004716 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043595 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000356 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000070 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049714 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [52, 50, 48, 6, 24, 54, 44, 55, 49, 42, 45, 43, 46, 53, 47, 26, 9, 25, 35, 16, 2, 36, 1, 10, 3, 19, 5, 41, 40, 27, 7, 8]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004821 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000091 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043538 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000073 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049735 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [48, 44, 45, 47, 5, 24, 9, 54, 42, 55, 50, 49, 52, 43, 53, 51, 37, 1, 16, 19, 15, 6, 8, 41, 7, 36, 0, 40, 22, 35, 17, 11]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004873 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043572 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000353 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000075 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049889 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [20, 15, 32, 2, 12, 3, 17, 13, 6, 28, 26, 18, 49, 33, 22, 31, 34, 35, 1, 8, 25, 9, 41, 10, 27, 19, 40, 29, 30, 38, 7, 4]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 49\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004954 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043505 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000355 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000120 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049897 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 4, 36, 5, 13, 23, 38, 15, 33, 43, 39, 40, 27, 11, 34, 53, 19, 37, 3, 35, 14, 22, 7, 32, 29, 2, 10, 31, 12, 28, 8, 26]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000041 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004878 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043611 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000364 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000075 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049876 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [35, 25, 9, 20, 52, 2, 7, 15, 40, 53, 24, 1, 26, 10, 21, 17, 3, 8, 5, 41, 19, 11, 36, 13, 12, 28, 34, 27, 16, 32, 29, 38]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000032 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004828 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000089 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043607 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000077 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049797 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [31, 27, 21, 13, 33, 3, 28, 15, 19, 42, 34, 41, 12, 20, 25, 26, 17, 1, 38, 4, 35, 22, 29, 30, 23, 11, 8, 7, 37, 40, 14, 39]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 42\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004633 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043628 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000068 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049742 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [5, 14, 38, 47, 41, 22, 11, 34, 0, 50, 30, 16, 7, 23, 39, 36, 40, 1, 4, 15, 8, 19, 13, 27, 35, 32, 31, 33, 53, 3, 28, 29]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004749 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000089 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043532 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000355 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000076 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049615 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [20, 34, 3, 13, 33, 2, 18, 28, 10, 17, 21, 31, 32, 41, 1, 38, 15, 4, 27, 35, 40, 6, 39, 26, 29, 8, 25, 24, 23, 36, 14, 9]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 41\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000035 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004750 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043570 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000353 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000073 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049821 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [19, 8, 6, 17, 16, 21, 26, 48, 15, 20, 25, 7, 22, 35, 1, 2, 10, 32, 3, 5, 13, 12, 27, 29, 33, 43, 28, 31, 55, 45, 42, 18]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004903 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043492 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000357 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000080 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049751 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 30, 26, 28, 23, 29, 32, 4, 15, 34, 13, 7, 20, 24, 53, 41, 3, 25, 31, 11, 33, 40, 38, 5, 10, 35, 39, 14, 36, 12, 8, 50]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000043 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004987 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000089 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043620 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000353 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000070 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049956 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [13, 38, 5, 41, 15, 34, 43, 1, 4, 36, 37, 23, 7, 11, 22, 40, 27, 14, 8, 3, 35, 12, 29, 32, 19, 28, 20, 31, 33, 6, 53, 26]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004892 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000089 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043572 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000355 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000077 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049816 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [15, 2, 24, 21, 9, 1, 32, 25, 18, 45, 20, 6, 35, 8, 3, 33, 12, 34, 26, 27, 10, 40, 28, 19, 31, 30, 11, 38, 13, 22, 4, 29]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 45\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000034 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004802 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043615 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000071 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049759 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [27, 40, 18, 3, 34, 15, 10, 11, 1, 36, 41, 33, 31, 23, 26, 4, 28, 25, 32, 20, 13, 38, 7, 35, 39, 2, 14, 6, 12, 37, 22, 19]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 41\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000032 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004797 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000086 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043515 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000362 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000073 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049675 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [16, 9, 22, 34, 43, 8, 13, 26, 0, 30, 15, 14, 37, 5, 6, 41, 32, 21, 38, 23, 1, 4, 20, 39, 7, 17, 25, 53, 3, 36, 27, 29]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 0 to 53\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004681 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043572 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000356 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000072 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049589 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [16, 5, 43, 53, 37, 22, 19, 14, 47, 36, 50, 7, 11, 8, 15, 55, 45, 48, 39, 23, 27, 42, 13, 1, 4, 9, 52, 30, 46, 44, 25, 32]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 55\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004735 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000088 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043556 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000356 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000068 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049612 seconds\n", - "[EmbeddingServer LOG]: INFO: Received ZMQ request from client 006b8b45, size 34 bytes\n", - "[EmbeddingServer LOG]: INFO: Request for 32 node embeddings: [1, 12, 52, 6, 34, 17, 18, 24, 43, 35, 10, 3, 21, 20, 40, 41, 36, 15, 33, 28, 31, 38, 4, 29, 7, 27, 32, 13, 25, 9, 26, 11]\n", - "[EmbeddingServer LOG]: DEBUG: Node ID range: 1 to 52\n", - "[EmbeddingServer LOG]: Time taken for text lookup: 0.000033 seconds\n", - "[EmbeddingServer LOG]: INFO: Total batch size: 32, max_batch_size: 128\n", - "[EmbeddingServer LOG]: INFO: Processing batch of size 32\n", - "[EmbeddingServer LOG]: Time taken for tokenization (batch): 0.004743 seconds\n", - "[EmbeddingServer LOG]: Batch size: 32, Sequence length: 256\n", - "[EmbeddingServer LOG]: Time taken for transfer to device (batch): 0.000087 seconds\n", - "[EmbeddingServer LOG]: Time taken for embedding (batch): 0.043615 seconds\n", - "[EmbeddingServer LOG]: Time taken for mean pooling (batch): 0.000354 seconds\n", - "[EmbeddingServer LOG]: INFO: Serialize time: 0.000074 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ E2E time: 0.049773 seconds\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", - "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", "[EmbeddingServer LOG]: INFO: ZMQ socket timeout, continuing to listen\n", diff --git a/examples/data/FairTree__OSDI_25_ (1).pdf b/examples/data/FairTree__OSDI_25_ (1).pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc10f4e1a70fa18edf0ddceed2d71f8935b5ec46 GIT binary patch literal 677798 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

J`y*hQhP*0H@624wj;tkseG}?`P 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

7a{CgwI@*VOmA1{_RZBbewjWL?TADDrHEDb?=Om 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

s&sC`qs>qC%! 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�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≈2X(qx#ws;UuHsq#P#yJilaRd5 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

qkO*){&~t6sOe=uMqJE`Q6#@N%3Gnxe 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®Mz3(I;Hp@FSTV7{ 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

@zywf9dFgArH+l|sr$!q>gaK< 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

??V||!%jeIoEB|7 zD3VHa6F$xC`X?=1XPg!-pOgf7w6;OUXq*U)7)Jtxq1^7pVlbbKKhm8$gCm>@IWcFD zX$KQP<>424f-rv^D+Di2OhPeb7etaaTBT_@>P7Su>Sw=QJ^Zm9oZ1Q*J0v>Xb3RK)-@0fI~WUZPoi6oTg$yy46dnz~3GW?egt4UwV>HI={Q;QK}Sm zF0R-Y4euf!&bK*~HU|01IVVEWTF^jsWfjbR6`-M!8uEhwD7ImBMqd!7BTX(8pz*nO zQXTmvGIP#YJ8c%ykH7mhKVuyw2zRT3EFs+|x1aqh&_PhtfH({+{-|}$P5+~+jxRpa zxz&|qDZPm7?6>_!chrvPVqJD)x_*uV)Jp4vn{lH1cLwv#9Etc6Ni&o)3AsHc{f$jR z-X|5LMJ^+6lHt$0Ef6UF#Gjor~vj#qirt%%3ZR(*9nQ zeUAW&Qc&N2(N$rej0THo71b7eLqe~jzoozshdrbkwn5|#4immXJLF}YTo85mQ*%p> zh9s~n3*m%hO(laPH+xIT5*z-z`HCNI7{wb5yxpr#bn-QkOuC-w{0IgDQpVCZN6KH) ze}n+F?1;8K)-T#ZR%AR8j#|!+KohFVyY4r#mwak7;v%G!v#&H21A9a`V$Nj>2MLp&upH|vC>{3fv1^eUJ*GhJ0=sg&? zFojE$SbOTxNl^0(SR{%uL|BCEk`j8d{nm%QRCr4D({H84WaW8TFLntZZ$$#6=`fw{NVHqJq(G{<k3=-EV;ESRy*g;%Vkj9D+_EXO|}uB5Y&widy3 zq5dqp0dklO-~4c+wDVYb0iTjAWSwvZIhG&*Mdc15ORsvbp@@1Reb5+D*L>$Yv0^Q} zBURBk+h$$mwM@M`WFUrKB-MgqL5+UlP+=JUIG9qB74AuIOwb-AMKvtqKe!NfBChl7 zs=#{CXg6QXeOU`xEio5 zc)+Z$APY2APoN`M6AFs>a+Fo7W;1$;%KL)s2WVXXDtyK6iz~MaJEXcDk#*_)ftPiH z9>n6iojbVIO2b z)*`%@hsM#+H6m;%@{@RP!DmVDcK*I^G5UfOmas)4eWEc_e5%gbJ|?%A9^q$^4X$`p z)KWe4WwZ3A!W>UiMZ3 zhqVCuZPJ}iOvW+u!Z|Q(A|-2A&?({XTp=$;wY`{T82Ck*Ij~w-#F0?f+n-FyN*#px!I*Ukvw1dxsLWG-R3_I5 znU~7fP7u#+)1+Q(>+g}+fVZ_Q{HyN@vk5BOdB;-vlN5h9Y(e^*&cHhdyn5GJ%- zSfYDnfK&L*(X07%ryXW$s7}=_=bEcLSb)0JgNELZ%d)hEp0u=Eb&VQkvpt%`{!lUY zI?Ecv9Hmf89DW)j;sWc_KXXeHlGmE~X6dg`MF2-(zd57RnUkY#ZWFP;eyhzcU|3K=n; zRI+YzP+4Ya%|4tjp8eisXc?m8<)iEupvjE9!&8~7`~tBh938>%>lhBd^h=EE>>2ca z-<(DH2ZO^U@F#!ds{iO=BsJ}Mq7WY}zz5`rE8^J;m?l9-5i&JRv3Oj~@2|^$g2n(( zTK+q3=07_c{0BF~{5Rji#r$_2GZ*vU!Z(@{0Sy`SR=jd;AX`>pys` z|KPFygU9+0-j^HN-}C>*`>!0*KjOasoiy;vp7k%}|4thC7xw>EF#i8_8|C2qa@+XN z(!g`RRY#Jh(#bHRa9rsmlh5}Y(7ZMW z!MrvpMV4Js#D_4_3r@~Q={EN!a}2+?g6PkWgL{n64@lGgfZ9Q-0gT_9^hw&7i|kd5 zkpMts7hP9-v$4%;Z)n@7FKM$4_Z`oN8@rK+V#P{3FIVy<1xoMyhth zSksb&8v(y}L!0J$h=AYYLT=}v|I0#9QS+chwF6nD1y-Qm3b+>KjCmirW@fRA>-7tQ zskcx4#&g-C8)E^hFEk@zl#z!C?w~sf8{Xk%m8DVF$y-#}AhQ&YZ+*z|>ONv-g^PN( z-B;`O(-AVv)jz7ZmHx8TJ$2%}4RJ9OJ;*1PZmZ4huXb*$p%eEn{FQzU?^JKKo%*)V zyDujWUCTCoYWCUgr;LVHtk2?U#c9x~A=^ zl1$krra$ei>y=Hfj1o!A}oUC++0YuRYM+P-q=X=wvGrbKmoAYWC5SvcV z54KHxWK;UJLh3t*4IId^hv4zNx>~dZo*;Jt5A0bRcsfZb(J0)foV*hTitS7*@nW@Q zVpu?b*xQ2MVKQL8pW)MUc~oba+H^-r59J zpR2rmOn83&(Y2%cBL!fbIF=mJsfrt+Cyj#mg%JI*(Ks-df?u#QeKb`By*z{ z;45H0+ctf4_kuUltZmnL|M@iIkmlTmm=~R^x_WxX?@Z#)ALsv}$&bG}c=&tR$37Dm z(JqNKvQY6m%$!rd6Z^W43?GSDPP{%EP^ApTTkMMU!|<}Zffr}yXd}mcvw=@E@QGv$ zCnV}Qan&scdJmX@D5F0O-A`y?L94gbs-Iz2a8uY-)eo^1t6GI)suH~34I6JYofqAO z@comu`#7XTR*1^p&j%&MB(rle-z2TL0qZA2y;RKZmfzg~ilImq3sMY?K!mAM6)-`B zj?wk+MK$KDj0Xv9@;lCg#jW4&c;8f3P0~?FzA^svm5QBJ`kAg8<6`x!VnLLuZO=&& zWNzHQJDEEgrYbFlbl&>Y++UE24RMBe3=Qz0Vj&FfoHRQG&u9-}>@Q(__Gl93P$gaR zDQ01tN7oLSo}T&M*{o4?K9dO!q0)%;+TINIe>i)mC{cniO|Wd+wr$(CZ5#KNZQHhO z+qUhhTjo@6cb`48r*|IaF*D<2M8-qrpZ}+pexT!a6SOfVXj;LXc&OuaU_I{Bdv1${ z0!F|7BtX5{bO0><>K9RrD?F1;HXY~<^N7YwfonH9t5wVfQsQtiDP<3-=4oa)9qus= z6Y|x|Yr9*^@@tAJfBOBB*X0pqwdO9MN7OdQ%M^YchjyK9zL65Wv>`TLt!i8ok`a?< zS<~@q428yk%GEwC@TyLDCcuUa41A>@zk51-c796W=~%)YJVmH_cQkHTs`(TcG(9$*<_&p4fw7|`zk zOJa*=Lvo1H*34_Jp5_)oxjnpGo!5W9`|01)tt^k%VtbGLPeZXbs{IKr@Ds=)6ACQ} zRowYX_3M=si(-r~X2D9Q@M8=~``~`a9eNLFubiR^oBRI%7W~y;Io_CJvvq3iw76N$ z?b!ye$ERbmSh7fziOH`$fMs3|m@GrRjkg!}AmSARL4zBkK7Mj>7fQ&zDDiLHJqYjB zKGi=mKei7$Gs`m9^!WAi2M$w9#0$QnA1+Bc&N( z@y|~6BUVWTfrz?@ZqB<}q=x9xYV%b_h&0j`mSd98=^{`z`}tt?B4Jaa-( z1sgAmBC~gEU4`d_9^%-up9S_TcDQ!aT9YVUIDjsX%g;6{u2Ln3n@!pE`F)LASw-K~{5lcPt=7j%AMF zx%#-i@k!EW1SqPexq+nf^;^1|K^`xoosb_ux<6kvy`nLRQLZ=zcd|Wfo0_Fh4rZZR zz7~>#-Eux^pMfZ;+zj1@=+oloM9eOU8xMyWsVq8gtQCkTCnidR zE2>QjvEtB=TSLMf z9VLRBU;&f6z&Jo~00yTiD72X$=d9M-A$rdK6E(+hmwp~NVxK#g7bJvmu*L2;_3?B8 zRgH32d_hu}A}b}}SA}g0qI(f5TPG8jF--E?Oc=WrxB*V!$wRhW)BB(SavftvK*`AK=V! zC2gB}*>Ie0ZE)g6bMJd>h@66wlVHTK*7<8u8E-H3QiR2wSE?zs|3Sn)rPZF6r0eC_ z7$SSj!p7RLdnn#pX-=UAPXbi5A(^Xmq*8N&q`9JOu{jfkxg-GCQ)ZRz4Yo$w6(tE zU9gc5aid3id!7K<`3FAf%hs{As$R{^g0z(x-s1SLB@7FJ8*B~G%qD=l0;2`Mfc>eNJ~XC1jm5YV$o&y z(!mq|zk$BDtN1IG-K*Mz%`#!LXUzf6T1+QyMwl{Mdo_*0JXfpucmq&)tsk;FOM^Ex z`YSK7m!W@c8aiV23sZPKhFLiOg>cC`?}H8^^BUzbhe}vz-Ov%ez?@PVpX_xRAVneDP1^gDc62it6JQx{ zYci0VH~4XCGe&SGzorw(i6W9Wy7~*iH5JCmOUA?T#enIMo|JZgvgKPf_ab2sn zd2NU9^I-LiU%N8DeXCG}4)v9-a`90fz#lbg^z!4D|HxD@*|{8>**V&I2S{#uy+AFo zf4F=xcwyB@pK%4Y-eub~cJk>Z~7`q8cK) zo_pRoiHUY%#YZ#sYKw%J|L{F^^l#C4G??j{V;2aWUn1IBZ<}ndkUrRL|Hi`{J)a z?s0TqaC+gIV>HU>1;j+sdWKG-$~@wjfBSdGof3wZTI@L=0JRjG@LRvBZ-S_*Q-62b zz-?>j3SR&Gy=?aO2J;y{#5CZ%%3wuYSEjI9MqxWXB?5t=N%49XIA}p&ip!KQ=OP(} zYY6i-DY#tzNa(r$bOl#*CFW;){Ego{?ak8p_ZQx2fK+a69cM`eB#4}xaT&TAeYRKX z!yX-Z8YLun;1Rhe?T&4=?zfx!i&@|f28b+$L7`S2?A0d)(AR;yl6S*G8gY+yFHJvj z9ea0gJeKMDD?se52o3q+g{t4M7 z1^GKNS@jNj>_mFb%1;FYOns1y6k@KF^<#j55J<+0V5inUUeh|&9pNR3GvNvk54AI4 zK!^wPQV0YUVSFzyJ;=X%;|Y--xI;RV%HuVt-MKrr`o8yH=)yRemRhE0Tg-p099>_A zcYAEnSMP`$%z?%R6YaggfBZGTW^di@r_p_9LiT(h@>1<=KtKUvv@2u#{7d7=VF7ij zK{PnM@WJyJf-Gka6WaxF32H~k{}GX#+>hUdjSDmaC;8LF$LLo-UtTZEkAjeEpG+sb zeKH3m0u}*`NsbZ+B+jcMgE)13x}uq{7GSC`is_@}03hCs=GfMlrWt3|*atXY3Kx&P zKVa}36~aKY6wTj4ErJ(0`YfL>k+JZwWdka~?7lt|6d|ITh2bY)C?Cz<+_Lux&@wLR z-(iR$`UuX*I&^mJ@chxZuBA&G0&w^=vp8Z+zMH1{1Jkd*^C~2dG>Ga4PH5dWi$0FZ zXD+6lFEmnioC*&g>ppDT&nzOoXs6BiJ!x&Hb{;CLa&YDTu}rIpD}1kEE^Pa+Jq>_S zl5>L!q@AaW3i4Bzzm1f(Vcz!K4pr*@9|c3SZ_QoMVbeK;rn6ZavvZ$$n%)g}-$Rz8=c+g^tbc$vAl;rJQ_D<&|~jIhR?+iGZX#<9Up6JU-1l~^+$o9E;A z^Zp?AkJIwQh`7WBX@`RNX@`nQ(39Z;WZyLje~_+S;J*ZTOQOa_^q_AKKmRd|a7K?P zYubx_WoU*xt8Cg^%f{Y(=(sw79NImXb}4UTk%cqTEZlS@_f@+ng9}7|F2KSL0babIycd_HX2}g^k$cdl`v47@56m?1hPWitaC)~ts4uwIH z??@qSE_Cq_=$b%Gd5N#2N~nx;L|}uMkv{T=1%1$;qBz{Xqjf+V=q<8RUNvwGa8m8z zMl*qXW?m}ba@FRb2qT2a8%x|pE6-09V*g#Udnb#y+l{9Zx8jGn7dN#zZ`#*vZv6Wl z!4-dFipWPmc8~%*;5q{(7BL1aM1pS9N4}FqD9tRQTq0#M5iqi&6QXfhRn`mWJesI^ z$la73jSeZg0N%LA2b=gMTyo4$R$1$HcM6!|K9W3 zPq)9Qyk}asg5rWk*nhZ<7*t$ru(49v3X#k!4;lgvMew5^XkGDJ1gLCJuoZ%ka~9=Xy4_aKj%Esc%P0CzzMQQu+S{_Y9? z5m@WPPxXuU%l^J$I&JTCZ5}ap?XB7THBj(aTd0$B>ugimqN#Or$5(sVmjBRwb?d%I zIxY?}J-`uuSvegaylw5gChZ4u)C0#zd)o5ZUGBZMGsB<6`JqK*^YBeT|6GEjz*a=y z6aVLlQ7C!>CD&&;C(cL&!{N3wxL2Mb-*5!XkleN3n6=et4S4sAd#Cs9fbSH)eCMy) zx6izAO!3?16k3hGN_vqZBEB6-8PGyV5+sxK&Qe8nHKVKTaZNg%Bc;22F@#!44Dx!)+W|#BXtfKcOqiN8jHT${qpV$eJ0J>MLTTfq`Y=6N=9bDcp zV+lHMml%859FDAc#uhBwiCm=#fm zX-CKyV8GJbI55ol@&sDp4Sf4ZutYM8?D~t;C<@uG2HC|| zS>as>+8YGcR|q6Zi(ttOz&I9xUe8&IIrzI~o@RWnLAkCclwGm+g#(w(rJw>M&L~Cz zPBMQqe6PY{VfKNUO3ZKv*Gg=gTwStMEv-%50$a9hp7UbQs)!g~Y!R4*`PjBA4FjYC z*kCn4Q*bw*D==tz=Z0FcL&lCv0TRH>b=kTNc%nTkxmce}sfu# z%qR%Dkrbfm+6=!{Wc5T>V^}9j`Q=AGIJEvja*s~7<^RR0e#2~0le|npj;4D7v>Gl; zKOymXZ^Pz8U*V!o=3dI#jIH7=)k3V`K@VXCy9*5vhdukzoN)HnvW?MPR$Y`5Z9YXw zhT?FD)IMu_KXI^xS_KI$1}$M_DCJ0{9RBkSFB1~;{*0_M_)Zw~ELi&c@ih;+I;zK} zMBPKc5D)eYrUeL(mMGe1j7kVjOSvz?m}}P(A}P)m?sJpY#r|8z#lsdOLYqXp@E1>j z$)s4=XUods94^^_IomFbBfgi$|Q!vE2lUg zG6LE@A&^~uD$>Ch4Yra0woTUL!gEy43}{l${D8f1MP!Ak(APBD0ea=B(EFx2w2ioe z{>__k5Styq&H;cc#xpR?lMf1E_xCL<0ttCX{w8~(S;f74YZ2KJ_)ru9RS6gGCXdGJ zpy;k(&SSMSpe)H~KVEuPASm(C&y6%WFPb_Q?M7VMJx#Yv@v=>!}5W#h~hC3I91@bxoBzHWOpNtDA z?-Md#7Uvy+c?vN-3&uy@U}VcyqOa*CP~lSKDZ}{7ej=Y^8Zjc3T6PXHi*R!h9XF{e z?E|Q(l{pxw#IZ-oQQ=syEA9(uohMEuwC7x&)S3%@NeB%LZq1*%{F^0S57UQyKv+m7 z7RC@tpPW-g(=B-QaFLWk_ai>Abz7{pa`EHNb>+8svM2K4_oGkCZmL4j-V4MRVq`!R zLuf>Hh$;cH4lX>2(uz~yZrjVL9|?GoNS`WLZyB{~!C9nPo=Q7mi%cT7z{47Eu8@ifrkUe zfGCJBE;FT3xa>2h0@xJm=8V3S9nv@V5XK24kwsocMb3MR!Ma2Ff^*6Ya~EHiSgTU> zb)*ebX4hy`66qEgVPP>ZPzr?%Y-s{OgX>Wv_7$=6bx;gg0bop~?DE&Nc;{vhI~okt zb_57h`5`rVbT~``W{fO(Q~X#+mQvw)PqY|B*!3wFA&*!zRmo@g2gl?%d@r-rjAIY% zY2RKT|5CqkyR)NWcHGvH6U98aQtuhx?Al~#frqIj8`E5%wR*ojo})Ls}RjKYz5?w7`+lBGnT1 z3WhOm>xPSQWIhBMhSoJG!LVn1XKU}(q&lJ`;r1CHC0<{=eT6|>E_ByXUx^(OIYlOV zT8d^ePaS6#E&)Nr%AQ(VQpMLL3tBz`d!>GIPFL(aHCBoF@Yr7@O}s55^mE6Qo(xE? z&kLpguR{ zmXc`PkcXpRAC*<^FI`Z&h)Q!P<%W|@(A>87k&lM{`3(F(kZ*wbjh0;_x~FMYF9)TZ zZseNif~y*%`rNIMm)xYTLX01=;V=YyEA>Z~xeTcJEabU@sVrQk52Z9)NRX9Pb03rz z{PkPnv>b}m-*UA{Sx;#iM((4iC__%VVw}%Q=7n_GNEh%dHA!VsQ+jw_39eS=Q7fuI z9Sw|dc3dr&I-c(V`pDeF|NRaW&(_}Urwa6du3OxUB7Qj&oU9G`S2k6_jPnE2o=DV( zq3)L!l`U;m$y0cj)x7hbjGmKtJmCC=+AXr*ju7Y#LxM9~ngi)P1r(%g@dB;dh&>x| z=7&d(WK~U8vHq5{)pK83Wu{Juci6UP>|`%q5Rh6Em%6LMh)G%=clw9m;*&@M=(1R2 z4~0Rq`%1=#UWHU1$jC`;ZoR~VVtjwAy)av@HbI?xLAmmXk_87qlJ@$XwDKsKX$y5$ zo^pFl?c`Mab?9tjJo|~PEU|$ortbpL^x;IrfM|-V6(D3IbrWJdg&|DoA10_y&>{2X zDQpN}XnnLvPvc}6Ge-{IU=Hqdb_#2|3Zz(5LxSrv%f<{U1D`$Oj|LH-j_x{G#Jb;< z&Lr=XI-v$IMhH!?E21p{5C#%sR8jC>Mu?o@#@->^Bn?(}mDWm=IyTFV2<1pZq+Avj zE3-5Z4dC%=@m7|)j?oD+lAx$`eZ3g(G}W427d)ta~t^aTpz#Ki2twh@N3L z;4mX^4LW<=h%E5!O{k$|)7AN(rR@faTP14D91tjvA**%XhKWh~A(yx?M~_RY93 z!~M;81`8w5v>jwGA62gP^3(&S^VCnN*x%yii{w`p>owy%V+v9uZqM#F3TJ( z*X3T_gmTG?ZM9_7b7C}UHYK+}0JlI3vpaq%NY|5Y89g?owxJE#yCY*4bp6`$##%7C zX90*E3MWlfrK!gf&4g1Q=-4x~Ta^BpsVnp6Gj@RA;DXX@goAFz1cR#(z&@A@sYX+nj+a@Fjlx}tA$neZIqVpU(>z&T? z;7@7zWUoLw9@hSA4-R2;Uqxv&2Zx=mk}7R0v?^9UksYmnLTQtfIlg4V5S8tW|GNcd zwH=tQ4#l0ReW4#UVCAg5wNRSy#Gpk=`jYG+Y<$9z_TwB@S)F5|X>;N8O=AYE3^z-I zL&=<0TG78!>WBBlAw~B_qa~=i3S~sd;rcjI(iD(Ar?rrX1WREPcnZqNzZ+TQZPUaw zH-R!d6p<3H9-?5rY+=OZIPO_9Uo<1sKZws9GD$c3xJR4B5qkki5<%HQGYL+$CCs|m z_a-GaOVgzscAlo}YGFqzrR7qlWWpdT?>%m_dFYy<4bn_R&_!f-=Jn?@iU^ZeNds>> zbbK0Jna|N+t&6~GU*0nZUOeTme*sbnj^k7fG5ui4_%nHvNp6)znr3{Z(wC>t%?aKt z*Pao|u#oKBeG)bJs0QlPS1ks2Z|+w4a-cJM#4+S@py%FMIQz>7U^hv9=}4&^hx1u^ zwg^LU#PE4#pA2QAQRq+mpp;~NfbaZPp~cO9`%h)v?d5uWc{v6XW?BUk0xuH-Dg(=6 zkxUrfD&mb2Z^k@Iw6Z2%^wV>IIf*BWpy7QKPVDHF9~yj#WTEy_ct`NimNB9wvn&J* z&fX7j7bU*d|3n}754`=qaqs_^KJZ_b=A8d!PR_~pU-13^qXhYd_5aH@{eOq&{}ZzR zzm#~e{U;IN{|}!3k9+_3GXGETJSz*w|8Bm2tRtPe*_OQXp>8qGWz6V-EMa!&@=Kpy zjC9#__L|QItu|^;N-2vda&kRgo$dCB1Aw?tRDB+wqPZ%N;Gy&T_;dhlcx@tx?Cm04 z-{tr5_}6J~If!1u7EwMN+6h`79e)>3b0+kl#p*JzpoF|b!)JreuZn-ux&0k-QL(v0 zlYW$3bw0hz|B2pIxGuw;l%^F{m7g0<(sMuqnAFgLNK^gV6ZkFpx_$t|e1ed|GB2vZ^!LWE9;T0y%m?RUv0B zRIq*$LYp){$Lrj@i|g-_U)k~li!bA?IFfMWC zfHWi1n2MD~gN@i;8i#Qz|Df4FCIM^nd9}VY-fm+_Wg_Uo)f24D#%RHprg>$lV@ZVx zvd&J(JW=3;O!sS7(~z#fslm+X?8aP3!je~3785$S<+7*Ery(Usx5eio;feT>x;Bpq zoi_i|U0X;skxWa7OiH@VBunsxLqrQ3p{Z@Nij#)T38Y(7$*#gTNvy(3(3RrDIG<5j znoP*ww=Kmcb8-J7Lz(fJyERS+*7)mIh#-S#H1mWMKJJknK0NDt}RK3JJu7v3`;0M^)b%}-FQ?6Mu(4er_xwiwkN;GF&| z%cuDl;49uIpuM5J?o)h`E53wP9LXl85(t~VI0&U0^TjD)93aiXm|y;=$y^r9D_;U& z^U8Palci92Y;SghLKGl$pmG9&Qc8p(uvfl;ksL)@hZI>}K4!W_-yU1)SP&mAvd%>! zQ~q|vAJ+J=HUM1y{svT!%Qki+6iEX$-c!EqLLC-W^)#K%oWmouZC0DJhbKxFKr!VI zppnmQnp-Z*8G@#&{bP;144ztv^t220(8sJB_A?np1=S}tArpG`#(f%Y3;L3OX=pI_yr10`D zv|3fO>?&$Ky1P3)AE(CdcgOQ%Aekjf4@LbPgNp9>RitI#GwZn|DZww7J6}&Da)6QP z@q=*9zka?uaDbEef4H|R{_?zz+$tC`MWT((!>dG%<&Y+D){1*mrsNLh4$!e{_F zO!SdEh$!=Of!z%3x9R(eFu!@Y2!q%*IpcpJNRo;6@Y=T;?mur|zjLr>feAU)rd1y) z6=oj=3>YE56_q$LgMoDpvVJ|`nO$3~=2|@(=Ecwa-F1i0tkK86SzUP;#4Z)v?~ivG zYYrrZ08*4P6+x^3VprkBw4wvvXmL!2P_XQS@SiLJ!!frP_pdDK9yl}@0S^x4?;1E1 z@eUTZcq-jK9F=|Prmm9{2j9VdeP=o^zlxw3MlYu?c+8?-h^vg&MKfl-Kz$?$aW4Ih zV@v^GVn0KwHQXloXam;YG=AaRVa8t&n7(&MJA56E2dpJzFyA_G!F?ztp}| zMZED>s%+_({AkwZ#arcWN=As*l1~YOfHy;8Sw}DyBP_8H;04vbQo&Vj;;NcM+H%*n zMw}Z6@P3VUMmNHh0DXO%(_5I*-GN7q9_C3<8vQ`y1uf5h@|Vk>g*peX1d_k}c6{+z z+e1K2A8I9wpf*+B<||Qj;SnOe5POAmag%QFqm}kTY?<=d_G2KI?MBf~NhOGVfUzl_ zbwv|sKoOuS+bNqP?SmL`H&{r->=?6OuI6{QJ7M46-^&5Jj6C+k zeP6inM_}D(l!2}`qG>;>Taj~{F9`HDPVeXE9yyo-gu&Tp8QP0nuHldQGaP(KZBZ4L z=^#gA47iJm3GJcpjK+vI)%ilZw?Ak1m3YV+Bj>iqYGq7s^v9-3$A*U~%d)TRp(!%b z@1Hz5`s)w#6;;1bO58u5PvSsl#ViM1Y?!aY?;9wQ{xuD`rK_ae>>%jU&xYxUNY#;a z&RNb17*}?(2QhuX3$-6?|9}&sygbg%duIPP^Fj#5{R3*kMvka4VkS^2@U^ji{Rinj z{l#%MV+dDuBceSPuKrgg*I4@nTc?A(VCn!xh^IDA@G+TrEk>Z8T&X4YW(y6uZuWe2 z*um8`m+OB1oA(-)25d_5ODRGmNWkn2Ol?5>J*_3B1&lNiiX-kYLW^eGSwBi0wE<8} z&Mct)(0_WKK{8Byzs3m2_zC7)ydVk)84$wCK<12QUcr5RIMX+g{>OATk<;MyRU$}n zHE))v!=>EjlH>*zBiW7Va#46AU#3ZGHY&p`7KRMP;}?IfQkcuo5LBcO4O8kW#Vm-R zRH#Ga6=C^KH{K#t5~~nI#GiSmjR%0-hEan`2b50-hmrGuLlqP)pOEJKr4^o%xfo94G>vygFwgx@G;;Ex_53@bNi))L@W-K@hK0`p}iTW=s0+q z#37VKU2k`yf)S4T*?-^AK$5MXiBlv)b7kqsSkIil!cvaKCY5N%%Bme)xY*5wx->+B zStE>;SW|zhxuJXbM+Jr)zMEgmgYZ7oIyNe6DX<;U?EytYcxa~Uyx7}FfOMJ2@zzzkA?CJwm!801pDWKgd3AsxT zBi3Q$^nq&EoRy5d@G5`&fRbXGHQ?%kO&tRjSmC^!N@9ljBS|V*iCD{wiymH%fRF5t z%f2eZNcoR$Nn8gtnuoO)IMbyxIA<4uifw6CwAHTLcOaE%EFfhXqAx#7&b?0H>|VTW zG_xh|Ux7+-;AmV^J-w&%%x)xLf9C?z2m?!*RdW0bNRDa<5HKJO@!s1V`H%(=AjwZ7 zj-NI2kPJPOUAu1D3?}vTI>_C=DFQ1tHfHy8x??$FUmM&?w){r^(0kH4Q^&N~(Z5;3 zd9I=`z*>KPH;=WaP$eP^k8}dP{;W41TSTUIpWJ$Ki-3?4S3Q$4XM2;B@mi6yi8g3j zvMn=fF^nInuGb7<=3@@+ly=``LB{4BM7{g(UXNiLXk*XK*?}fSZ$hm%PC62+E^>;8ai7y z?NZIJt3fWN5o9gbZ4=bdT(^SMWRd{bxycjC+j8hKmjJ;HBLqMlt6d9sYT^4*=UJH4 zAAuM_J{KL?hP65@p3Y-A-Ib?DR1#;^5`c(;^ETnN=JQVXRaGCYK4HWnL>A)&!kxZH@PZ8XrFf#u&WkZ?4V!fj~I{a?m z4m^czFxjFjs>orG0{&r{zB;Vv=iSC8t1R8IHF)ncY(@oM>Y?tC|G z@cvcXIP^}}9*3DghIo8{;39pxMOPsobtdF8`+yo z9h_op;|WeDXMQu9`b>wkM~*eiJA1>ME(%||@mpqZ)DrI>l5&%~MDX5VkQ^vNf~mul zU%U~fD~CxhOb{J4WKcC88!_JjDZJ~Dt@Ihg_Gj?AZA#+5xkyxz*QAdIER>SWXx1ZA zMhRG@xdIA$G;)Ce!(!llTa2#KGT*?;eBjf4x^Jognm4cY~kJfVDpBMgR@U z)Z=DA1}H9Vpj~WLecn8p#%s?>fI&-erVayqbL+4)g~u5jKvqmb|tdRd0~_u@BF zfkEg+=^9+on9S_R_ArWrq z>blOs3R=3W>tDk2_ZS$#+<3&-_ZUX8qfzaqR7MDO^5enm-w4qtd;qYPVRsBhQc7yK z>g+12FWc9LBly(u&s$MWr)F2T&GzT#KG$pk+p_~RtwCXNkykA_*6Q5i%YzJpU{-_; zj%GcsX%Vj#kxye~-xvrULbv#%`EmP2a~#kle7r}ozUG+KDYXL2XnoFig0LS%lEdT2 z5^1KZ5*Rf~&j8AEFg`ELTqBz>*u@+00JWQUZBN3jy_ag@nW@mV?42vSt@riYOr|Uc1`2;Br0$rI^p?K4U&>)k7caqqenNi z0cXRlBxreMceC`Jc|umxiqss(6KhaBdNkGFq9Q9mBeCS00M_|BLPvK(*Kf80%Ubxp z(eBp;8A>~^No@aMl!Aaqy-tGTZTziBFdv298259NvdUGq)UkvHAWPPooqxuPHl$yP zQl|t7X!-U5s`F@#{r;wKrv=&R-)psIT~o8RZnSwaY!X_Yc=_|_giK~@q`A}4+Pb|D zNZYjw2p@p{E)$c90)$K%&TCG-$M3ojPGsm01HzX-|zfod7genY;(^xtDFT>(0 z+DtvxI7~1L&5RAhbtVbKR2&%;(+q;ToOOK3#K5=xS#5@R-%A$PVNN+X$OM^>M^y-oGI2ac=>jg}~ZKcyZ#! zd;bgygH%&DZajq=Z+br(!ye=H2~P_@3BVBz!pd)V^c%x#qne;lVgH8cAiH3t{=3f@9|u(@=4-#@{T%e_6x$l2B*RDhgb^Ga2SC|s8*jft z{^mFLKsWh^^pm?eNcKqz2%yw|KAs)y4A{2}EXhv1z=D48N8MlcJ;`8$q!B9djsI0v zZRLMzFaL+=>c9K8|Cw+pZ)BzHVoN|TV`^vaVnM*l{3{Wo{~ueras-_0|8dF5*@b|U z@&BW`(mhwl7H|3a{*HJb@N_^*wW_^I_v8#6UXvj(1j6JF|LcTR?jIxCTC&{G@B8(! ztv3f|h8Q_ChSBld;o91v`nT2uXb^}hAYr~EJ+|zfx%P}PpU*{ zg4!%WvV)`A5ILot*Pi7;^m!z|cf;V>38VZ2Y{S201@ zp_QL5go_kHNm@3k3Kk*1;&3`zm7K)Tn01&m}@HR{(SK~4!M!y&DzVbYER z+U2R0*C0?pryQds5T}}hP)Vvp8X;T(Dwfq;wk#0toEIz#eO_FI5_iBV3rC>3$562x zqSWL8+Xa#XAP8N=vkb&6m{*>nfV|L^;ZTSx2H5ORnlWeqtE9wTNO9~3LX@l$VFgn2Q`{#Qgk5MWz{?Q&tkLY6CJYV|Ifx@hV2@j0T+pKt$+)2i<&04f zqjs)4PPGK*yymxtc{~Cs*-Us3PtZW(CMW&I|MLoNZClTu7Nqe#pmpo}flFb! zAc0q)&voXuF8(|Suim`4;4F~|?k(54Xnbf%?Fj()X4dJ&V|x$KT(W7T*_!zo5n|wa zbF50;QBbcE6KaMOjY0FDA(>UCh!s1ujn`*scFqF$zQ)>n64+k zSk;DABd_0p5_kUk%3(?Fs5J$YSYKVWKtSG0^RZBJMK1UnOH)0M%1ePw zMp7E{m%Jl8T>}d@om^x8_&E*Aikx#KtrYb%=v{I5aR!K*wV$s%lsIaZ=T>g`ThYnH zg!Eh#5Ltci48VrwQg}hrkl_|@4rq(QKY$NsU~C#tIV}&cH9qufO@N0OXd7iIsv5(D zzLJBcWeR|@JdGPbg_X!f3PQ!{LL)LoKN~D2v8cT!OvA%dHotOzS^t)&Qt=dKok6gK z0fz=72+xo!LQBq;(GSO!H_Ze*aY;U8baS{BKb&0jRV@^SEj+fH)|Tyc3j7JBVhre*qDDXl z>$9T$zVL&ZthLcJ$rLANYCn@iOkfGa&}NR^KCq(<8Qa75XOl8w`fD=@7z-&<98i$Gp!oHw}LUK5H`PqLQQ3mo2 z9D~|&=01m{6cNn4OZ2#tx8U*FphTcLdmy&J!>HLs^~#W3uY$;nfOkF!=a>Wqz{qkX zQxN_6e&aI8E}%rDF93Jv;U&P)-3y19cfUfk&^2mDkp)5+2X}q8jA#pvqJEIU6WDro z64MYn)v>#F>JYqvGCwl-vmA&p$caQg_3XZVUMiBnx4({p2&7-ZPY#?1oo+2ow_~2 z(Wm>COi!G6tu-R78oRG(I4h-ag}pS>X?LMd`tRE1>xQiA8&my6J9evmgE79U9_axJ2x*?nSUbIGuyr> zg$G+5m(EANzE3Q3vWIC8qy_n}2)JS%if&*So*QPC;kh+;Igela#vk%p`k02Ve z(L`&1TGcK|DCNM#yRx&Jcg%jNN>9}th$TOD9qH!XdRvC#=rF@cn~@KRB-cN8zH8%e zq0P-oB2qh=y7QUlr=ybWdWr`um*~`9)}rNQtB2VnT;qj}eDa4tqGhpi2TgVg#&)8% z!0u)5cl(1EdP{N(M3=cWXRs*OMWS27$iuH6{{X+cMr%=gr9MiZFX5%gRHk z9Xkuy;z>Ub6b;)hGz`)I7Nwy2C~6pbm=FZKJ7>N0qo8iNfcLSgo~=?F;VwVw+pk25 zl0`Gvth?b~{w1vxOpsH3zOcpms^I%^!|3u%9J)mJwX^Td!Kudlcl9ZY_arBHf&`!a z&nisd(rRi(RQ1>M4NC6842zS7L!xKpPC_viENx|4Mh8eXCI>bt#|v>XTqg9W=+ZcX&HCfy~bf)n*~Cqd0-Q=vNt5+ zyHmt;!&aff9cWfi!{R}ewz{xc=P{ew^YZ4VcD^&kExPA3C0;q=aqnbCh)F}zf|fwU z>*t2(q&=cp#G$c-X}mtcZj^;p)$&%2PWBJeQT8NTDe<4hJ7tx|%kks6)?&boC6hMh z=EvzJpqU8A1d;8dphp?(wn+ak*Z~`$e$86ynFP7e4t>c@#|!!R`E-Nrt{k#IXRSdm z%15g5B6_4`W7Z|(l{I-aUUC;1q^`G;+tfksH)YnTOWowIfuMOcncNo}bDeik7w@Z= zH&2fvA2v&>&;q*r?n~XFS8fI0=f{3Y<+G2bka7a@rk?GNU~z7M7z7@WFb-M8!)`7q zE|CB14{uJ>^2(_%fU|9|*o55<4lU+rPttrpf$rozn168mQIEwOPA6sL_<~$+rHUFfKvCJQ6RU;ITo+=xc)6gBR*J6|{nPk!nNXGr zguTXCV8tn`!tE~7J-mJB`?jqZoj(s;;>mI1nFM^Yl&`>M-%hq0$-=A(UE{rd+Qjh} zF8NT|ijmPYc+OkqEy;ZPc=;D)zlQAy(%ph5Rk*2$J-pR57QBToyJDqg+P|bu~R=VqH5uV)}fau{xq*npG|W z79Flza5P(9+DrYrR8@34-(`|kdPU=sfwF^9``QFp;g-KEQCvSE>V*p>gzM(yLwbw8 zfoCToBCPuRK6LNETkSg@McGF96WO0pk291B+lf-qr1+8P?)h-Ec_i1%IJVhm;-Rr@ zQtLWwymEqlRdHuy+XTq>NAvryIH`B%RNYEH7xjbSpV1qumYd}(C7o6Ni_v0jU+eDA zmu;^ck?n5bm5qpxxIDQeG?m?2A$jTDf3a0hT(;&%R?}MCxC|~zI$d7eNLB)ZU}^UZ zAFQ%-3}(%@zNmi`X50@yGr6_F(Z7iJHYH;l7pi~EBO>!8)iWhmDG&}w{5ACImY?L@ zRK!-`#-iV0Xc;I$5ey(B0+no`TL4MLeVnGc^?8xXRj&zyLDjSm9c^J zqO0?tYG9^b13k5ettf6i^OEx*P=jgy0)-TEu*uf*nLef+EW9yP1#0d3UM{YVRH_U`Wf@(n

%E68y)%LK;o66 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, .\nThe first insight is that in graph-based indexes like HNSW, a single query typically explores only a small subset of the embedding vectors to identify its nearest neighbors. As such, instead of storing these embeddings on disk, we can recompute them on the fly at search time. However, naive recomputation can still incur a high latency overhead. To address this challenge, LEANN introduces a two-level traversal algorithm that interleaves an approximate and an exact distance queue, while prioritizing the most promising candidates in the search process, thus reducing the number of recomputations. Additionally, LEANN also incorporates a dynamic batching mechanism that aggregates embedding computations across search hops, improving GPU utilization and thus minimizing recomputation latency.", + "text": "Davis", "metadata": {} }, { - "text": "In this paper, we tackle the challenge of reducing ANN storage overhead and present LEANN, a novel graph-based vector index designed for storage-constrained environments. Built on top of Hierarchical Navigable Small World (HNSW) [38], a widely adopted, state-of-the-art graph-based ANN index, LEANN introduces system and algorithm optimizations that reduce total index storage to under 5% of the original data size, while preserving low query latency and high retrieval accuracy. At its core, LEANN is driven by two key insights.\nHowever, even without storing embeddings, the index metadata (e.g., graph structure) itself can lead to non-trivial storage overhead relative to the original data size. For example, a typical HNSW index uses a node degree of 64, meaning each node stores 64 neighbor links. With 4 bytes per link, this results in 256 bytes of metadata per node, which normally accounts for more than 25% storage overhead of a common 256-token document chunk [57].\nThe second insight is that much of the graph index metadata is redundant: not all nodes and edges contribute equally\nto search accuracy. Based on this observation, LEANN introduces a high-degree preserving graph pruning strategy that removes low-utility edges while preserving high-degree 'hub' nodes that are essential for maintaining effective search paths. By retaining only structurally important components of the graph, LEANN significantly reduces the size of the index without sacrificing the quality of the retrieval.\n- \u00b7 We conduct the first study on enabling low-latency, highaccuracy search over personal data with minimal storage overhead on edge devices.\nWe implement LEANN on top of FAISS [17] and evaluate it on four popular information retrieval (IR) benchmarks: NQ [31], HotpotQA [68], TriviaQA [28], and GPQA [48]. These benchmarks have been widely used in evaluations of information retrieval systems. Our experiments span both an NVIDIA A10 workstation [43] and an M1-based Mac [3]. The results show that LEANN reduces storage consumption by more than 50 \u00d7 compared to state-of-the-art indexes while achieving competitive latency to achieve high accuracy. In summary, we make the following contributions:", + "text": "Embedding-based search is widely used in applications such as recommendation and retrieval-augmented generation (RAG). Recently, there is a growing demand to support these capabilities over personal data stored locally on devices. However, maintaining the necessary data structure associated with the embedding-based search is often infeasible due to its", "metadata": {} }, { - "text": "- \u00b7 We present LEANN, a compact graph-based ANN index that prunes redundant graph metadata by prioritizing preserving high degree nodes, and avoids storing embeddings by recomputing them on the fly. To minimize recomputation latency, LEANN also introduces a two-level search strategy with dynamic batching.\n- \u00b7 We show that LEANN can deliver 90% top-3 recall using less than 5% storage overhead relative to the raw data size, while the end-to-end search time is still less than 2 seconds on four benchmarks and various hardware platforms.", + "text": "high storage overhead. For example, indexing 100 GB of raw data requires 150 to 700 GB of storage, making local deployment impractical. Reducing this overhead while maintaining search quality and latency becomes a critical challenge.", + "metadata": {} + }, + { + "text": "search viable in these settings, we seek to reduce storage overhead to under 5% of the original data size. At the same time, any such reduction must preserve high search accuracy while maintaining reasonable search latency to ensure responsive, real-time search experiences.", + "metadata": {} + }, + { + "text": "In this paper, we present LEANN, a storage-efficient approximate nearest neighbor (ANN) search index optimized for resource-constrained personal devices. LEANN combines a compact graph-based structure with an efficient on-the-fly recomputation strategy to enable fast and accurate retrieval with minimal storage overhead. Our evaluation shows that LEANN", + "metadata": {} + }, + { + "text": "reduces index size to under 5% of the original raw data, achieving up to 50 times smaller storage than standard indexes, while maintaining 90% top-3 recall in under 2 seconds on real-world question answering benchmarks.", + "metadata": {} + }, + { + "text": "Existing solutions, however, fall short of this goal. Most ANN indices store full embeddings and index metadata on disk [65], requiring terabytes of storage to index hundreds of gigabytes of documents, far exceeding the capacity of edge devices. While compression techniques such as product quantization (PQ)", + "metadata": {} + }, + { + "text": "[29] can reduce storage, they often come at the cost of degraded search accuracy or require increased search latency to achieve comparable results.", + "metadata": {} + }, + { + "text": "With the recent advances in AI [27, 37], embedding-based search now significantly outperforms traditional keywordbased search methods [30, 71] across many domains such as question answering, recommendation, and large-scale web applications such as search engines [14,", + "metadata": {} + }, + { + "text": "74]. These systems rely on dense vector representations to capture semantic similarity and use approximate nearest neighbor (ANN) search to retrieve relevant results efficiently. Recently, there has been growing interest in enabling such capabilities on edge devices like laptops or phones, enabling applications like personalized search, on-device assistants, and", + "metadata": {} + }, + { + "text": "privacypreserving retrieval over local data [24, 32, 66, 69].", + "metadata": {} + }, + { + "text": "However, ANN data structures introduce substantial storage overheads, often 1.5 to 7 \u00d7 the size of the original raw data [57]. While such overheads are acceptable in large-scale web application deployments, they pose a significant bottleneck when deploying ANN search on personal devices or when using large", + "metadata": {} + }, + { + "text": "datasets. For example, a 2 \u00d7 storage overhead on a personal laptop is impractical. To make ANN", + "metadata": {} + }, + { + "text": "*This work does not relate to the position at Amazon. \u2020Corresponding authors. Email: , .", + "metadata": {} + }, + { + "text": "The first insight is that in graph-based indexes like HNSW, a single query typically explores only a small subset of the embedding vectors to identify its nearest neighbors. As such, instead of storing these embeddings on disk, we can recompute them on the fly at search time. However, naive recomputation", + "metadata": {} + }, + { + "text": "can still incur a high latency overhead. To address this challenge, LEANN introduces a two-level traversal algorithm that interleaves an approximate and an exact distance queue, while prioritizing the most promising candidates in the search process, thus reducing the number of recomputations. Additionally, LEANN also incorporates a dynamic", + "metadata": {} + }, + { + "text": "batching mechanism that aggregates embedding computations across search hops, improving GPU utilization and thus minimizing recomputation latency.", + "metadata": {} + }, + { + "text": "In this paper, we tackle the challenge of reducing ANN storage overhead and present LEANN, a novel graph-based vector index designed for storage-constrained environments. Built on top of Hierarchical Navigable Small World (HNSW) [38], a widely adopted, state-of-the-art graph-based", + "metadata": {} + }, + { + "text": "ANN index, LEANN introduces system and algorithm optimizations that reduce total index storage to under 5% of the original data size, while preserving low query latency and high retrieval accuracy. At its core, LEANN is driven by two key insights.", + "metadata": {} + }, + { + "text": "However, even without storing embeddings, the index metadata (e.g., graph structure) itself can lead to non-trivial storage overhead relative to the original data size. For example, a typical HNSW index uses a node degree of 64, meaning each node stores 64 neighbor links.", + "metadata": {} + }, + { + "text": "With 4 bytes per link, this results in 256 bytes of metadata per node, which normally accounts for more than 25% storage overhead of a common 256-token document chunk [57].", + "metadata": {} + }, + { + "text": "The second insight is that much of the graph index metadata is redundant: not all nodes and edges contribute equally", + "metadata": {} + }, + { + "text": "to search accuracy. Based on this observation, LEANN introduces a high-degree preserving graph pruning strategy that removes low-utility edges while preserving high-degree 'hub' nodes that are essential for maintaining effective search paths. By retaining only structurally important components of the graph, LEANN significantly reduces the size of the", + "metadata": {} + }, + { + "text": "index without sacrificing the quality of the retrieval.\n- \u00b7 We conduct the first study on enabling low-latency, highaccuracy search over personal data with minimal storage overhead on edge devices.", + "metadata": {} + }, + { + "text": "We implement LEANN on top of FAISS [17] and evaluate it on four popular information retrieval (IR) benchmarks: NQ [31], HotpotQA [68], TriviaQA [28], and GPQA [48]. These benchmarks have been widely used in evaluations", + "metadata": {} + }, + { + "text": "of information retrieval systems. Our experiments span both an NVIDIA A10 workstation [43] and an M1-based Mac [3]. The results show that LEANN reduces storage consumption by more than 50 \u00d7 compared to state-of-the-art indexes while achieving competitive latency to achieve high accuracy. In", + "metadata": {} + }, + { + "text": "summary, we make the following contributions:", + "metadata": {} + }, + { + "text": "- \u00b7 We present LEANN, a compact graph-based ANN index that prunes redundant graph metadata by prioritizing preserving high degree nodes, and avoids storing embeddings by recomputing them on the fly. To minimize recomputation latency, LEANN also introduces a two-level search strategy with dynamic batching.", + "metadata": {} + }, + { + "text": "- \u00b7 We show that LEANN can deliver 90% top-3 recall using less than 5% storage overhead relative to the raw data size, while the end-to-end search time is still less than 2 seconds on four benchmarks and various hardware platforms.", "metadata": {} }, { @@ -29,35 +133,239 @@ "metadata": {} }, { - "text": "Vector search systems rely on high-dimensional embeddings to enable semantic search across unstructured data. A core operation in such systems is the top\ud835\udc58 nearest neighbor search, where the goal is to find the \ud835\udc58 most similar vectors in a dataset to a given query vector. Formally, given a set of vectors \ud835\udc4b = { \ud835\udc65 1 , \ud835\udc65 2 , . . . , \ud835\udc65 \ud835\udc5b } \u2282 R \ud835\udc5a and a query vector \ud835\udc5e \u2208 R \ud835\udc5a , a top\ud835\udc58 nearest neighbor search aims to retrieve a set S \u2282 \ud835\udc4b of \ud835\udc58 vectors such that:\n\nwhere Dist (\u00b7 , \u00b7) denotes a distance or similarity metric (e.g., Euclidean distance or cosine similarity).\nWhile exact search guarantees retrieval of the true nearest neighbors, it becomes computationally prohibitive at scale. Approximate nearest neighbor (ANN) methods [33, 38] offer a trade-off by allowing minor inaccuracies in exchange for substantially lower query latency. The effectiveness of an ANN algorithm is typically measured by Recall@k, defined as:\n\nwhere S is the set of true top\ud835\udc58 neighbors returned by exact search, and S \u2032 is the set returned by the ANN method. This metric quantifies the fraction of relevant neighbors successfully retrieved. Applications such as retrieval-augmented generation (RAG) typically require high recall (e.g., \u2265 0 . 9) to preserve downstream task quality [58].\nTo accelerate ANN search, vector indexes organize embeddings using data structures that reduce the number of comparisons required. Generally, a vector index consists of two primary components: (1) the stored embedding vectors themselves, representing the data, and (2) the index structure (such as graph connections or cluster assignments) built upon these vectors to expedite the search. Both components contribute to the overall storage footprint. Two widely used classes of ANN indices are described below:\nCluster-based Index. Methods such as IVF [33] partition the dataset into clusters (or 'cells') using algorithms like K-means [9], grouping semantically similar vectors together. At query time, only the most relevant clusters are searched, reducing the overall number of comparisons.", + "text": "Vector search systems rely on high-dimensional embeddings to enable semantic search across unstructured data. A core operation in such systems is the top\ud835\udc58 nearest neighbor search, where the goal is to find the \ud835\udc58 most similar vectors in a dataset to a given query vector. Formally, given a", "metadata": {} }, { - "text": "Graph-based Index. Methods such as HNSW [38] and other proximity-graph-based approaches [21, 26, 59] construct a graph by linking each vector to its nearest neighbors. These indices are among the most effective for ANN search, typically requiring fewer distance computations to reach a target recall compared to cluster-based alternatives like IVF. Despite differences in graph construction, most methods rely on a best-first search (BFS) strategy to process ANN queries. We describe this algorithm in \u00a72.2.", + "text": "set of vectors \ud835\udc4b = { \ud835\udc65 1 , \ud835\udc65 2 , . . . , \ud835\udc65 \ud835\udc5b } \u2282 R \ud835\udc5a and a query vector \ud835\udc5e \u2208 R \ud835\udc5a , a top\ud835\udc58 nearest neighbor search aims to", "metadata": {} }, { - "text": "In Algorithm 1, we illustrate how BFS operates on a graphbased index. The search begins by placing the entry node \ud835\udc5d into a min-priority queue \ud835\udc36 , referred to as the candidate queue , which prioritizes nodes closer to the query vector \ud835\udc65 \ud835\udc5e . In each iteration (lines 4-9), the algorithm selects the closest node \ud835\udc50 from \ud835\udc36 and explores its neighbors. For each unvisited neighbor \ud835\udc5b , we extract its embedding, compute its distance to the query \ud835\udc65 \ud835\udc5e , and insert \ud835\udc5b into the visited set \ud835\udc49 , the candidate queue \ud835\udc36 , and the result set \ud835\udc45 .\nThe search terminates when the candidate queue \ud835\udc36 becomes empty or when the closest node in \ud835\udc36 is farther from the query than the farthest node in the result set \ud835\udc45 , indicating that further exploration is unlikely to improve the result. The parameter \ud835\udc52\ud835\udc53 controls how many candidates the algorithm considers during the search. It acts as a quality", + "text": "retrieve a set S \u2282 \ud835\udc4b of \ud835\udc58 vectors such that:\n\nwhere Dist (\u00b7 , \u00b7) denotes a distance or similarity metric (e.g., Euclidean distance or cosine similarity).", "metadata": {} }, { - "text": "- 1: Input: Graph \ud835\udc3a with entry node \ud835\udc5d , query \ud835\udc65 \ud835\udc5e , result size \ud835\udc58 , queue size \ud835\udc52\ud835\udc53 ( \ud835\udc58 \u2264 \ud835\udc52\ud835\udc53 )\n- 2: Output: Top- \ud835\udc58 approximate neighbors \ud835\udc45\n- 3: Initialize \ud835\udc36 \u2190{ \ud835\udc5d } , \ud835\udc45 \u2190{ \ud835\udc5d } , \ud835\udc49 \u2190{ \ud835\udc5d }\n- 4: while \ud835\udc36 \u2260 \u2205 and min ( \ud835\udc36. dist ) \u2264 max ( \ud835\udc45. dist ) do\n- 5: \ud835\udc50 \u2190 node in \ud835\udc36 with smallest distance to \ud835\udc65 \ud835\udc5e\n- 6: Remove \ud835\udc50 from \ud835\udc36\n- 7: for each neighbor \ud835\udc5b of \ud835\udc50 do\n8:\nif \ud835\udc5b \u2209 \ud835\udc49 then\n9:\nExtract Embedding \ud835\udc65 \ud835\udc5b\n10:\nCompute \ud835\udc51 = \ud835\udc37\ud835\udc56\ud835\udc60\ud835\udc61 ( \ud835\udc65 \ud835\udc5e , \ud835\udc65 \ud835\udc5b )\n11:\nAdd \ud835\udc5b to \ud835\udc49 , add \ud835\udc5b to \ud835\udc36 and \ud835\udc45 with distance \ud835\udc51\n12:\nif | \ud835\udc45 | > \ud835\udc52\ud835\udc53 then\n13:\nKeep only the \ud835\udc52\ud835\udc53 closest nodes in \ud835\udc45\n- 14: return top \ud835\udc58 closest nodes in \ud835\udc45\nknob : increasing \ud835\udc52\ud835\udc53 allows the algorithm to examine more candidates, improving recall at the expense of higher latency.\nGraph-based indexes converge quickly to the nearest neighbors for two main reasons: (1) During index construction, each vector is connected to a set of approximate neighbors, typically selected to be semantically similar. If a vector is close to the query, its neighbors are also likely to be close, allowing the search to rapidly move toward high-quality results. (2) The graph implicitly yields a much finer-grained partitioning of the vector space compared to IVF, enabling the search to examine significantly fewer candidates from the entire database [22, 26, 35, 38]. An illustrative example of this traversal process is shown in Fig. 1.", + "text": "While exact search guarantees retrieval of the true nearest neighbors, it becomes computationally prohibitive at scale. Approximate nearest neighbor (ANN) methods [33, 38] offer a trade-off by allowing minor inaccuracies in exchange for substantially lower query latency. The effectiveness of an ANN", "metadata": {} }, { - "text": "Local Vector Index System Requirement. Consumer devices, such as smart home appliances and personal workstations [32, 55, 66, 70], are heavily constrained in storage capacity [45, 62, 67]. At the same time, many downstream generative AI tasks rely heavily on similarity search over dense embeddings. However, embeddings are often significantly larger than the original raw data, typically causing up to a 7 \u00d7 storage blowup [40, 57, 77]. Unlike datacenter servers, which can dedicate hundreds of gigabytes or even terabytes to store uncompressed vector indexes [7, 16], consumer devices typically share a limited storage capacity with many colocating applications and media content [63]. This tight storage constraint makes it infeasible to store large-scale, uncompressed indexes and embeddings.\nAt the same time, these devices often support user-facing tasks such as large-scale document retrieval [32, 66] or offline semantic recall [6], where second-level latency (i.e., under 10 seconds) is generally acceptable. Usability typically degrades only when response times exceed this threshold.\nFigure 1. Best-First Search in graph-based index\nThis combination of stringent storage constraints (e.g., using less than 5% of the original data size) and moderately relaxed latency requirements opens up a distinct design space for on-device vector search: a highly storage-efficient index that exploits on-device compute resources (e.g., GPU) to achieve high recall within seconds.\nExisting System Limitations on Consumer Devices. Most vector search indexes, such as HNSW and IVF, are designed to optimize retrieval accuracy and latency under the assumption that the entire index, including full-precision embeddings, fits in DRAM. As a result, they are not suitable for DRAM-constrained environments such as consumer devices. Some recent methods [59, 64] reduce memory usage by storing compressed embeddings in DRAM for initial traversal. However, they still require accessing full-precision embeddings from disk for reranking, which incurs substantial storage overhead at query time.\nTo our knowledge, there is no prior system for vector index that has explicitly targeted consumer devices where storage footprint is a first-class objective. Our goal in this work is to design a vector search system that significantly reduces storage overhead, both for embeddings and index structures, while meeting the latency and recall requirements.", + "text": "algorithm is typically measured by Recall@k, defined as:\n", "metadata": {} }, { - "text": "Quantization-based methods, such as PQ [29], are the main approach for reducing storage by approximating embeddings using compact codebooks. While these techniques can shrink the embedding size dramatically, the inherent information loss from this lossy compression often degrades retrieval accuracy. This degradation means that critical vector distinctions can be permanently lost during quantization, making it impossible to achieve high target recall using only the compressed data, a limitation we experimentally demonstrate in \u00a76 and which is documented in the literature [59]. As a result, they struggle to balance storage efficiency with the high accuracy needed for quality retrieval.", + "text": "where S is the set of true top\ud835\udc58 neighbors returned by exact search, and S \u2032 is the set returned by the ANN method. This metric quantifies the fraction of relevant neighbors successfully retrieved. Applications such as retrieval-augmented generation (RAG) typically require high recall", "metadata": {} }, { - "text": "In this section, we provide an overview of the core techniques and show how LEANN incorporates them into its architecture.\nGraph-based Recomputation. In the HNSW structure that LEANN builds upon, each query requires embeddings for\nFigure 2. LEANN System Diagram. The system combines high-degree preserving graph pruning for minimal storage footprint with graph-based recomputation and two-level search with dynamic batching for efficient query processing (Steps 1-4).\nonly a small subset of nodes, specifically those in the candidate set \ud835\udc36 defined in Algorithm 1. This observation motivates LEANN to compute these embeddings at query time rather than storing all of them beforehand. Concretely, instead of loading precomputed embeddings as in line 9, we modify the system to recompute them during query execution without changing any algorithm.\nthe embedding server (an on-device component utilizing the original embedding model for recomputation, as illustrated in Fig. 2) to obtain their corresponding embeddings. To further improve GPU utilization and reduce latency, LEANN employs a dynamic batching strategy to schedule embedding computation tasks on the GPU (\u00a74.2).\nMain Techniques. This paradigm introduces two key challenges. First, naive on-demand recomputation of embeddings at query time can lead to high search latency. Second, although LEANN removes the need to store dense embeddings, the remaining graph metadata, particularly node connectivity information, can still account for a significant portion of total storage (for example, over 10 percent).\nLEANN offers two main techniques to address the challenges mentioned before. First, LEANN uses a two-level graph traversal algorithm and a dynamic batching mechanism to reduce recomputation latency (\u00a74). Second, LEANN deploys a high degree of preserving graph pruning technique to greatly reduce the storage needed for graph metadata (\u00a75).\nSystem Workflow. The end-to-end workflow incorporating the optimizations discussed above is shown in Fig. 2. Given a dataset of items, LEANN first computes the embeddings of all items to build a vector index for the dataset using an off-shelf graph-based index. While LEANN design is agnostic to any particular graph index, we focus on the commonly used HNSW. We discuss how LEANN can be applied to other graph indices in \u00a78.1.", + "text": "(e.g., \u2265 0 . 9) to preserve downstream task quality [58].", "metadata": {} }, { - "text": "After the index is built, LEANN discards the embeddings (dense vectors) of the items, while pruning the graph for offline storage with our high degree preserving graph pruning algorithm (\u00a75). The pruning algorithm aims to preserve important high-degree nodes, as we observe that node access patterns are highly skewed in practice: a small subset of nodes, often 'hub' nodes of high degree, are frequently visited, while many others contribute little to search quality. To serve a user query at runtime, LEANN applies a two-level search algorithm (described in \u00a74.1) to traverse the pruned graph, identifying and prioritizing promising nodes for efficient exploration. These selected nodes are then sent to\nFurthermore, when additional disk space is available, LEANN uses it to cache 'hub' nodes by prioritizing the embeddings of high-degree nodes. At runtime, LEANN recomputes embeddings only for nodes not in the cache and loads cached embeddings directly from disk.", + "text": "To accelerate ANN search, vector indexes organize embeddings using data structures that reduce the number of comparisons required. Generally, a vector index consists of two primary components: (1) the stored embedding vectors themselves, representing the data, and (2) the index structure (such as graph connections or cluster", + "metadata": {} + }, + { + "text": "assignments) built upon these vectors to expedite the search. Both components contribute to the overall storage footprint. Two widely used classes of ANN indices are described below:", + "metadata": {} + }, + { + "text": "Cluster-based Index. Methods such as IVF [33] partition the dataset into clusters (or 'cells') using algorithms like K-means [9], grouping semantically similar vectors together. At query time, only the most relevant clusters are searched, reducing the overall number of comparisons.", + "metadata": {} + }, + { + "text": "Graph-based Index. Methods such as HNSW [38] and other proximity-graph-based approaches [21, 26, 59] construct a graph by linking each vector to its nearest neighbors. These indices are among the most effective for ANN search, typically requiring fewer", + "metadata": {} + }, + { + "text": "distance computations to reach a target recall compared to cluster-based alternatives like IVF. Despite differences in graph construction, most methods rely on a best-first search (BFS) strategy to process ANN queries. We describe this algorithm in \u00a72.2.", + "metadata": {} + }, + { + "text": "In Algorithm 1, we illustrate how BFS operates on a graphbased index. The search begins by placing the entry node \ud835\udc5d into a min-priority queue \ud835\udc36 , referred to as the candidate queue , which prioritizes nodes closer", + "metadata": {} + }, + { + "text": "to the query vector \ud835\udc65 \ud835\udc5e . In each iteration (lines 4-9), the algorithm selects the closest node \ud835\udc50 from \ud835\udc36 and explores its neighbors. For each unvisited neighbor \ud835\udc5b , we extract", + "metadata": {} + }, + { + "text": "its embedding, compute its distance to the query \ud835\udc65 \ud835\udc5e , and insert \ud835\udc5b into the visited set \ud835\udc49 , the candidate queue \ud835\udc36 , and the result set \ud835\udc45 .", + "metadata": {} + }, + { + "text": "The search terminates when the candidate queue \ud835\udc36 becomes empty or when the closest node in \ud835\udc36 is farther from the query than the farthest node in the result set \ud835\udc45 , indicating that further exploration is unlikely to improve the", + "metadata": {} + }, + { + "text": "result. The parameter \ud835\udc52\ud835\udc53 controls how many candidates the algorithm considers during the search. It acts as a quality", + "metadata": {} + }, + { + "text": "- 1: Input: Graph \ud835\udc3a with entry node \ud835\udc5d , query \ud835\udc65 \ud835\udc5e , result size \ud835\udc58 , queue size \ud835\udc52\ud835\udc53 ( \ud835\udc58 \u2264 \ud835\udc52\ud835\udc53 )", + "metadata": {} + }, + { + "text": "- 2: Output: Top- \ud835\udc58 approximate neighbors \ud835\udc45\n- 3: Initialize \ud835\udc36 \u2190{ \ud835\udc5d } , \ud835\udc45 \u2190{ \ud835\udc5d } , \ud835\udc49 \u2190{ \ud835\udc5d }", + "metadata": {} + }, + { + "text": "- 4: while \ud835\udc36 \u2260 \u2205 and min ( \ud835\udc36. dist ) \u2264 max ( \ud835\udc45. dist ) do", + "metadata": {} + }, + { + "text": "- 5: \ud835\udc50 \u2190 node in \ud835\udc36 with smallest distance to \ud835\udc65 \ud835\udc5e\n- 6: Remove \ud835\udc50 from \ud835\udc36\n- 7: for each neighbor \ud835\udc5b of \ud835\udc50 do\n8:", + "metadata": {} + }, + { + "text": "if \ud835\udc5b \u2209 \ud835\udc49 then\n9:\nExtract Embedding \ud835\udc65 \ud835\udc5b\n10:\nCompute \ud835\udc51 = \ud835\udc37\ud835\udc56\ud835\udc60\ud835\udc61 ( \ud835\udc65 \ud835\udc5e , \ud835\udc65 \ud835\udc5b )", + "metadata": {} + }, + { + "text": "11:\nAdd \ud835\udc5b to \ud835\udc49 , add \ud835\udc5b to \ud835\udc36 and \ud835\udc45 with distance \ud835\udc51\n12:\nif | \ud835\udc45 | > \ud835\udc52\ud835\udc53 then\n13:", + "metadata": {} + }, + { + "text": "Keep only the \ud835\udc52\ud835\udc53 closest nodes in \ud835\udc45\n- 14: return top \ud835\udc58 closest nodes in \ud835\udc45", + "metadata": {} + }, + { + "text": "knob : increasing \ud835\udc52\ud835\udc53 allows the algorithm to examine more candidates, improving recall at the expense of higher latency.", + "metadata": {} + }, + { + "text": "Graph-based indexes converge quickly to the nearest neighbors for two main reasons: (1) During index construction, each vector is connected to a set of approximate neighbors, typically selected to be semantically similar. If a vector is close to the query, its neighbors are", + "metadata": {} + }, + { + "text": "also likely to be close, allowing the search to rapidly move toward high-quality results. (2) The graph implicitly yields a much finer-grained partitioning of the vector space compared to IVF, enabling the search to examine significantly fewer candidates from the entire database", + "metadata": {} + }, + { + "text": "[22, 26, 35, 38]. An illustrative example of this traversal process is shown in Fig. 1.", + "metadata": {} + }, + { + "text": "Local Vector Index System Requirement. Consumer devices, such as smart home appliances and personal workstations [32, 55, 66, 70], are heavily constrained in storage capacity [45, 62, 67]. At", + "metadata": {} + }, + { + "text": "the same time, many downstream generative AI tasks rely heavily on similarity search over dense embeddings. However, embeddings are often significantly larger than the original raw data, typically causing up to a 7 \u00d7 storage blowup [40, 57,", + "metadata": {} + }, + { + "text": "77]. Unlike datacenter servers, which can dedicate hundreds of gigabytes or even terabytes to store uncompressed vector indexes [7, 16], consumer devices typically share a limited storage capacity with many colocating applications and media content [63]. This tight", + "metadata": {} + }, + { + "text": "storage constraint makes it infeasible to store large-scale, uncompressed indexes and embeddings.", + "metadata": {} + }, + { + "text": "At the same time, these devices often support user-facing tasks such as large-scale document retrieval [32, 66] or offline semantic recall [6], where second-level latency (i.e., under 10 seconds) is generally acceptable. Usability", + "metadata": {} + }, + { + "text": "typically degrades only when response times exceed this threshold.\nFigure 1. Best-First Search in graph-based index", + "metadata": {} + }, + { + "text": "This combination of stringent storage constraints (e.g., using less than 5% of the original data size) and moderately relaxed latency requirements opens up a distinct design space for on-device vector search: a highly storage-efficient index that exploits on-device compute resources", + "metadata": {} + }, + { + "text": "(e.g., GPU) to achieve high recall within seconds.", + "metadata": {} + }, + { + "text": "Existing System Limitations on Consumer Devices. Most vector search indexes, such as HNSW and IVF, are designed to optimize retrieval accuracy and latency under the assumption that the entire index, including full-precision embeddings, fits in DRAM. As a result,", + "metadata": {} + }, + { + "text": "they are not suitable for DRAM-constrained environments such as consumer devices. Some recent methods [59, 64] reduce memory usage by storing compressed embeddings in DRAM for initial traversal. However, they still require accessing full-precision embeddings from disk for", + "metadata": {} + }, + { + "text": "reranking, which incurs substantial storage overhead at query time.", + "metadata": {} + }, + { + "text": "To our knowledge, there is no prior system for vector index that has explicitly targeted consumer devices where storage footprint is a first-class objective. Our goal in this work is to design a vector search system that significantly reduces storage overhead, both for embeddings and index structures, while", + "metadata": {} + }, + { + "text": "meeting the latency and recall requirements.", + "metadata": {} + }, + { + "text": "Quantization-based methods, such as PQ [29], are the main approach for reducing storage by approximating embeddings using compact codebooks. While these techniques can shrink the embedding size dramatically, the inherent information loss from this lossy compression often degrades retrieval accuracy.", + "metadata": {} + }, + { + "text": "This degradation means that critical vector distinctions can be permanently lost during quantization, making it impossible to achieve high target recall using only the compressed data, a limitation we experimentally demonstrate in \u00a76 and which is documented in the literature [59]. As a result,", + "metadata": {} + }, + { + "text": "they struggle to balance storage efficiency with the high accuracy needed for quality retrieval.", + "metadata": {} + }, + { + "text": "In this section, we provide an overview of the core techniques and show how LEANN incorporates them into its architecture.\nGraph-based Recomputation. In the HNSW structure that LEANN builds upon, each query requires embeddings for", + "metadata": {} + }, + { + "text": "Figure 2. LEANN System Diagram. The system combines high-degree preserving graph pruning for minimal storage footprint with graph-based recomputation and two-level search with dynamic batching for efficient query processing (Steps 1-4).", + "metadata": {} + }, + { + "text": "only a small subset of nodes, specifically those in the candidate set \ud835\udc36 defined in Algorithm 1. This observation motivates LEANN to compute these embeddings at query time rather than storing all of them beforehand. Concretely, instead of loading precomputed embeddings as in line 9, we modify", + "metadata": {} + }, + { + "text": "the system to recompute them during query execution without changing any algorithm.", + "metadata": {} + }, + { + "text": "the embedding server (an on-device component utilizing the original embedding model for recomputation, as illustrated in Fig. 2) to obtain their corresponding embeddings. To further improve GPU utilization and reduce latency, LEANN employs a dynamic batching strategy to schedule embedding computation tasks on the GPU (\u00a74.2).", + "metadata": {} + }, + { + "text": "Main Techniques. This paradigm introduces two key challenges. First, naive on-demand recomputation of embeddings at query time can lead to high search latency. Second, although LEANN removes the need to store dense embeddings, the remaining graph metadata, particularly node connectivity information, can still account for a significant portion of total", + "metadata": {} + }, + { + "text": "storage (for example, over 10 percent).", + "metadata": {} + }, + { + "text": "LEANN offers two main techniques to address the challenges mentioned before. First, LEANN uses a two-level graph traversal algorithm and a dynamic batching mechanism to reduce recomputation latency (\u00a74). Second, LEANN deploys a high degree of preserving graph pruning technique to greatly reduce the storage needed for graph metadata", + "metadata": {} + }, + { + "text": "(\u00a75).", + "metadata": {} + }, + { + "text": "System Workflow. The end-to-end workflow incorporating the optimizations discussed above is shown in Fig. 2. Given a dataset of items, LEANN first computes the embeddings of all items to build a vector index for the dataset using an off-shelf graph-based index. While LEANN design is agnostic to", + "metadata": {} + }, + { + "text": "any particular graph index, we focus on the commonly used HNSW. We discuss how LEANN can be applied to other graph indices in \u00a78.1.", + "metadata": {} + }, + { + "text": "After the index is built, LEANN discards the embeddings (dense vectors) of the items, while pruning the graph for offline storage with our high degree preserving graph pruning algorithm (\u00a75). The pruning algorithm aims to preserve important high-degree nodes, as we observe that node access patterns are highly skewed in", + "metadata": {} + }, + { + "text": "practice: a small subset of nodes, often 'hub' nodes of high degree, are frequently visited, while many others contribute little to search quality. To serve a user query at runtime, LEANN applies a two-level search algorithm (described in \u00a74.1) to traverse the pruned", + "metadata": {} + }, + { + "text": "graph, identifying and prioritizing promising nodes for efficient exploration. These selected nodes are then sent to", + "metadata": {} + }, + { + "text": "Furthermore, when additional disk space is available, LEANN uses it to cache 'hub' nodes by prioritizing the embeddings of high-degree nodes. At runtime, LEANN recomputes embeddings only for nodes not in the cache and loads cached embeddings directly from disk.", "metadata": {} }, { @@ -65,91 +373,687 @@ "metadata": {} }, { - "text": "As shown in eq. (1), the overall latency of a single query in LEANN is largely determined by the number of nodes whose embeddings must be recomputed. To reduce this overhead, we introduce the Two-Level Search, a multi-fidelity distance computation framework that strategically varies computational intensity across different stages of the search. By using lightweight approximate computations to broadly evaluate candidates and applying exact computations only to the most promising ones, our approach reduces search latency while preserving search quality.\nAlgorithm 2 presents the complete algorithm. At each expansion step, we first compute approximate distances for all neighboring nodes using a lightweight method (line 12). We maintain an approximate queue ( \ud835\udc34\ud835\udc44 ), a priority queue that stores approximate distances for all nodes encountered throughout the search. Rather than computing exact distances for all neighbors of the current expansion node \ud835\udc63 , we define a re-ranking ratio \ud835\udc4e and extract the top \ud835\udc4e % of nodes from \ud835\udc34\ud835\udc44 . To avoid redundant computation, we exclude nodes that are already present in the exact queue ( \ud835\udc38\ud835\udc44 ). The resulting subset is denoted as \ud835\udc40 (line 14), for which we then compute exact distances.", + "text": "As shown in eq. (1), the overall latency of a single query in LEANN is largely determined by the number of nodes whose embeddings must be recomputed. To reduce this overhead, we introduce the Two-Level Search, a multi-fidelity distance computation framework that strategically", "metadata": {} }, { - "text": "1:, 1 = Input: query \ud835\udc5e , entry point \ud835\udc5d , re-ranking ratio \ud835\udc4e , result size \ud835\udc58 , search queue length \ud835\udc52\ud835\udc53. 2:, 1 = Output: \ud835\udc58 closest neighbors to \ud835\udc5e. 3:, 1 = \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 \u2190{ \ud835\udc5d } ; \ud835\udc34\ud835\udc44 \u2190\u2205 ; \ud835\udc38\ud835\udc44 \u2190{ \ud835\udc5d } ; \ud835\udc45 \u2190{ \ud835\udc5d }. 4:, 1 = while \ud835\udc38\ud835\udc44 \u2260 \u2205 do. 5:, 1 = \ud835\udc63 \u2190 extract closest element from \ud835\udc38\ud835\udc44 to \ud835\udc5e. 6:, 1 = \ud835\udc53 \u2190 get furthest element from \ud835\udc45 to \ud835\udc5e. 7:, 1 = if \ud835\udc51\ud835\udc56\ud835\udc60\ud835\udc61\ud835\udc4e\ud835\udc5b\ud835\udc50\ud835\udc52 ( \ud835\udc63,\ud835\udc5e ) > \ud835\udc51\ud835\udc56\ud835\udc60\ud835\udc61\ud835\udc4e\ud835\udc5b\ud835\udc50\ud835\udc52 ( \ud835\udc53 ,\ud835\udc5e ) then. 8:, 1 = break. 9:, 1 = for each \ud835\udc5b \u2208 neighbors( \ud835\udc63 ) do. 10:, 1 = if \ud835\udc5b \u2209 \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 then. 11:, 1 = \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 \u2190 \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 \u222a { \ud835\udc5b }. 12:, 1 = Calculate approximate distance \ud835\udc51 \ud835\udc4e\ud835\udc5d\ud835\udc5d\ud835\udc5f\ud835\udc5c\ud835\udc65 ( \ud835\udc5b,\ud835\udc5e ). 13:, 1 = \ud835\udc34\ud835\udc44 \u2190 \ud835\udc34\ud835\udc44 \u222a { \ud835\udc5b }. 14:, 1 = \ud835\udc40 \u2190 extract top \ud835\udc4e % from \ud835\udc34\ud835\udc44 that are not in \ud835\udc38\ud835\udc44. 15:, 1 = for each \ud835\udc5a \u2208 \ud835\udc40 do. 16:, 1 = Compute exact distance \ud835\udc51 \ud835\udc52\ud835\udc65\ud835\udc4e\ud835\udc50\ud835\udc61 ( \ud835\udc5a,\ud835\udc5e ). 17:, 1 = \ud835\udc38\ud835\udc44 \u2190 \ud835\udc38\ud835\udc44 \u222a { \ud835\udc5a } ; \ud835\udc45 \u2190 \ud835\udc45 \u222a { \ud835\udc5a }. 18:, 1 = if | \ud835\udc45 | > \ud835\udc52\ud835\udc53 then. 19:, 1 = Remove furthest element from \ud835\udc45 to \ud835\udc5e.", + "text": "varies computational intensity across different stages of the search. By using lightweight approximate computations to broadly evaluate candidates and applying exact computations only to the most promising ones, our approach reduces search latency while preserving search quality.", "metadata": {} }, { - "text": "20:, 1 = return top \ud835\udc58 elements from \ud835\udc45\nBecause \ud835\udc34\ud835\udc44 globally tracks all previously encountered nodes, the algorithm can revisit earlier neighbors that become more promising as the search progresses. As a result, even when all immediate neighbors in the current iteration are far from the query, the algorithm can still select previously seen but unexplored nodes that are now ranked higher.\nThe core insight of this design is to combine the complementary strengths of approximate and exact distance computations. Approximate distances, though not fully accurate, are often sufficient to surface the most relevant candidates near the top, enabling early pruning of unpromising directions. We exploit this by using approximate distances to evaluate neighbors during traversal, and exact distances to re-rank only the most promising candidates. This approach achieves high recall while substantially reducing computational cost, thereby lowering overall latency.\nAt the end of each iteration, nodes in \ud835\udc40 with computed exact distances are inserted into \ud835\udc38\ud835\udc44 , which serves as the candidate pool for subsequent expansions. We repeat this process iteratively, and in each iteration, the number of nodes requiring recomputation is further reduced.\nFor efficient approximate distance calculation, we employ PQ, a widely used technique that compresses the embedding space by several orders of magnitude. In our setting, we use only 2GB of PQ-compressed embeddings to represent the original 200GB of full-precision data, resulting in minimal storage overhead. Although PQ introduces some accuracy loss, our framework compensates by applying exact computations to a small subset of high-ranking candidates, thereby preserving end-to-end search quality.\nFinally, our method is flexible and generalizable. It can incorporate alternative lightweight approximation techniques beyond quantization. For instance, distillation-based embeddings or link-and-code representations [18] can be used, provided they offer sufficient efficiency. This adaptability makes the Two-Level Search paradigm applicable across diverse computational budgets and deployment scenarios.", + "text": "Algorithm 2 presents the complete algorithm. At each expansion step, we first compute approximate distances for all neighboring nodes using a lightweight method (line 12). We maintain an approximate queue ( \ud835\udc34\ud835\udc44 ), a priority queue that stores approximate distances for all nodes encountered", "metadata": {} }, { - "text": "During the search process, GPU resources are often underutilized because each expansion step only triggers recomputation for a small number of nodes, typically equal to the degree of the current node \ud835\udc63 . This problem is further exacerbated when using the Two Level Search algorithm (see line 16), where the candidate set is even more selective, resulting in smaller batch sizes. As a result, LEANN frequently fails to meet the minimum batch size required to saturate GPU throughput, leading to inefficient use of hardware resources at runtime.\nTo address this, LEANN introduces a dynamic batching strategy that slightly relaxes the strict data dependency in best-first search in Algorithm 1. While this introduces minor staleness in the expansion order, it significantly increases the batch size for the embedding model, thereby reducing the end-to-end latency per query.\nThis leads to a key challenge: how can we design an algorithm that fully utilizes GPU compute capacity and takes advantage of batch processing [15, 76] without sacrificing search efficiency?\nSpecifically, LEANN breaks the strict data dependency in best-first search, where the current node to be expanded depends on the immediate results of the previous expansion, by dynamically collecting a group of the closest candidates from the priority queue. The algorithm accumulates neighbors, that is, nodes requiring recomputation, until a target batch size is reached (for example, 64 for the A10 GPU), which can be efficiently determined through lightweight offline profiling. This dynamic batching mechanism integrates naturally with the Two-Level Search described in \u00a74.1. We accumulate nodes in the set \ud835\udc40 across iterations until the predefined batch size threshold is reached, at which point we perform embedding recomputation for all nodes in \ud835\udc40 .\nThis idea shares a similar insight with the beam search strategy used in DiskANN [59], where a fixed number of round-trip node accesses are batched together to amortize disk access latency. However, unlike DiskANN's fixed beam width, LEANN uses dynamic batching based on the degrees of current candidates, reducing staleness and offering greater flexibility for our setting. Furthermore, while DiskANN aims to reduce I/O latency, our dynamic batching strategy focuses on maximizing GPU utilization. As a result, LEANN adopts a", + "text": "throughout the search. Rather than computing exact distances for all neighbors of the current expansion node \ud835\udc63 , we define a re-ranking ratio \ud835\udc4e and extract the top \ud835\udc4e % of nodes from \ud835\udc34\ud835\udc44 . To avoid redundant computation, we exclude", "metadata": {} }, { - "text": "- 1: Input: Original graph \ud835\udc3a with the set of vertices \ud835\udc49 , candidate list size \ud835\udc52\ud835\udc53 , connection number threshold \ud835\udc40 for high degree nodes and \ud835\udc5a for other nodes, where \ud835\udc5a < \ud835\udc40 , percentage of high degree nodes \ud835\udc4e\n- 3: \u2200 \ud835\udc63 \u2208 \ud835\udc49 : \ud835\udc37 [ \ud835\udc63 ] \u2190 degree of \ud835\udc63 of \ud835\udc3a , \ud835\udc3a 1 \u2190 empty graph\n- 2: Output: Pruned graph \ud835\udc3a 1\n- 4: \ud835\udc49 \u2217 \u2190 nodes with the top \ud835\udc4e % highest (out) degree in \ud835\udc37\n- 5: for \ud835\udc63 \u2208 \ud835\udc49 do\n- 6: \ud835\udc4a \u2190 search( \ud835\udc63 , \ud835\udc52\ud835\udc53 )\n- \u22b2 Refer to Algorithm 1\n- 7: if \ud835\udc63 \u2208 \ud835\udc49 \u2217 then\n- 8: \ud835\udc40 0 \u2190 \ud835\udc40\n- 9: else\n- 10: \ud835\udc40 0 \u2190 \ud835\udc5a\n- 11: Select \ud835\udc40 0 neighbors from \ud835\udc4a using original heuristic 12: Add bidirectional edges between \ud835\udc63 and neighbors to\n\ud835\udc3a\n- 13:\n1\nShrink edges if \u2203 \ud835\udc5e \u2208 neighbor and \ud835\udc37 \ud835\udc5c\ud835\udc62\ud835\udc61 ( \ud835\udc5e ) > \ud835\udc40\ndifferent optimization objective: rather than minimizing disk access, it prioritizes efficient GPU usage to reduce end-to-end latency.", + "text": "nodes that are already present in the exact queue ( \ud835\udc38\ud835\udc44 ). The resulting subset is denoted as \ud835\udc40 (line 14), for which we then compute exact distances.", "metadata": {} }, { - "text": "With the Two-Level Search and dynamic batching mechanisms in place to optimize recomputation latency, we now examine how LEANN reduces the storage costs associated with graph metadata through a high degree preserving graph pruning algorithm.\nIn datacenter environments, this overhead is typically acceptable: storage is relatively inexpensive, and the operational costs of index maintenance (e.g., updates, rebuilds, and monitoring) are manageable. In contrast, consumer devices are often storage-constrained, making even the metadata footprint of the index structure a significant concern.\nAs discussed in \u00a73, while LEANN avoids storing exact embeddings by recomputing them at query time, the graph metadata used to guide the search process can still introduce substantial overhead. For example, in the datastore described by [56], the index structure alone accounts for over 30% of the total storage footprint.\nTo address this, LEANN allows users to specify a disk usage constraint \ud835\udc36 . When the metadata size exceeds this threshold, LEANN invokes a graph pruning algorithm that reduces the number of edges while preserving high-degree nodes. This design maintains retrieval accuracy and avoids significant increases in query-time latency, while substantially reducing the metadata footprint.\nThe graph, stored in a compressed sparse row (CSR) format, for example, consumes space proportional to the total\nFigure 3. Node access probability per query\nnumber of edges, i.e., the number of nodes times their average degree 2 . Since each node corresponds to a fixed chunk of text, the number of nodes is fixed given the text. The key challenge, then, is to reduce the average node degree without significantly compromising search latency. We formalize this optimization problem as follows: given a storage budget, construct a graph that maximizes search efficiency.\n\nHere, \ud835\udc5b denotes the number of nodes in the graph, corresponding to the number of text or image chunks. \ud835\udc37 \ud835\udc56 represents the degree of node \ud835\udc56 , and ef is a parameter that controls the length of the search queue, as described in Algorithm 1. During Best-First Search, each time a node \ud835\udc56 is selected for expansion, all of its \ud835\udc37 \ud835\udc56 neighbors must be recomputed 3 .", + "text": "1:, 1 = Input: query \ud835\udc5e , entry point \ud835\udc5d , re-ranking ratio \ud835\udc4e , result size \ud835\udc58 , search queue length \ud835\udc52\ud835\udc53. 2:, 1 = Output: \ud835\udc58 closest neighbors to \ud835\udc5e.", "metadata": {} }, { - "text": "While indiscriminate edge reduction in graph-based indexes often degrades search quality, as shown in \u00a76.4, our key insight is that selectively retaining hub nodes is sufficient to preserve performance. This strategy is motivated by the skewed node access pattern observed in Fig. 3, where highdegree nodes are accessed more frequently during search. Accordingly, we aim to preserve these high-degree nodes, which serve as the backbone of the graph's connectivity, even as we reduce the overall number of edges. To implement this idea, we introduce Algorithm 3. At a high level, our hubpreservation strategy incorporates two key modifications to the original graph construction process.\nThroughput denotes the number of chunks the embedding server can process per second. Since LEANN's performance bottleneck lies in recomputation as shown in Fig. 11, this formulation serves as a reasonable approximation of the search time. Finally, Dtype indicates the size of the data type used to store node connections in the graph, which is typically int32 (4 bytes).\n2 Here we refer to average out-degree.\n3 In the actual search trajectory, there may be slight differences between ef and the exact number of hops made by the query. For simplicity, we use \u02dd ef \ud835\udc56 = 1 | \ud835\udc37 \ud835\udc56 | as an approximation for the number of nodes requiring recomputation along the search path.\nOn the one hand, we apply differentiated degree thresholds to nodes based on their estimated importance. Specifically, we reduce the number of connections for most nodes to a lower threshold \ud835\udc5a (line 10), while allowing a small fraction (i.e., \ud835\udc4e %) of important nodes to retain a higher degree up to a threshold \ud835\udc40 (line 8). Given a storage budget \ud835\udc36 , LEANN automatically tunes the values of \ud835\udc5a and \ud835\udc40 through offline profiling across multiple datasets. To identify important nodes, we follow prior work [42, 51] and use node degree as a proxy for influence, selecting the top \ud835\udc4e % of nodes by degree (line 4). Empirically, we find that preserving only the top 2% of highdegree nodes significantly reduces the total number of edges while maintaining high retrieval accuracy.\nNote that this algorithm does not require knowledge about the query distribution. Hence, it can scale efficiently to large datasets, providing a simple yet effective mechanism to balance graph size and search performance.", + "text": "3:, 1 = \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 \u2190{ \ud835\udc5d } ; \ud835\udc34\ud835\udc44 \u2190\u2205 ; \ud835\udc38\ud835\udc44 \u2190{ \ud835\udc5d } ; \ud835\udc45 \u2190{ \ud835\udc5d }. 4:, 1 = while", "metadata": {} }, { - "text": "On the other hand, while we restrict the number of outgoing connections during node insertion, as shown in line 10, weallow all nodes to establish bidirectional edges with newly inserted nodes, up to the maximum threshold \ud835\udc40 (as shown in line 13, not \ud835\udc5a ). This design choice ensures that each node retains the opportunity to connect with high-degree hub nodes, thereby preserving the navigability of the graph with minimal impact on search quality.", + "text": "\ud835\udc38\ud835\udc44 \u2260 \u2205 do. 5:, 1 = \ud835\udc63 \u2190 extract closest element from \ud835\udc38\ud835\udc44 to \ud835\udc5e. 6:, 1 = \ud835\udc53 \u2190 get furthest element from \ud835\udc45 to \ud835\udc5e. 7:,", "metadata": {} }, { - "text": "In our evaluation, we answer the following important questions:\n- 2. How does LEANN impact downstream task accuracy, particularly when compared to low-storage alternatives such as index compression techniques and keyword-based search? (\u00a76.3)\n- 1. How does LEANN perform compared to state-of-the-art baselines in terms of latency and storage, across different search accuracy (recall) levels? (\u00a76.2)\n- 3. Howdoes each individual technique of LEANN contribute to its overall efficiency and effectiveness? (\u00a76.4)", + "text": "1 = if \ud835\udc51\ud835\udc56\ud835\udc60\ud835\udc61\ud835\udc4e\ud835\udc5b\ud835\udc50\ud835\udc52 ( \ud835\udc63,\ud835\udc5e ) > \ud835\udc51\ud835\udc56\ud835\udc60\ud835\udc61\ud835\udc4e\ud835\udc5b\ud835\udc50\ud835\udc52 ( \ud835\udc53 ,\ud835\udc5e ) then. 8:, 1 = break. 9:, 1 = for each", "metadata": {} }, { - "text": "Table 1. Summary of our dataset and index setup.\n\nDataset, Value = rpj_wiki [10]. Raw text size, Value = 76G. Chunk size, Value = 256 token. # of chunks, Value = 60 million. Embed model, Value = Contriever [27]. Embed dimension, Value = 768. Embedding size, Value = 171G. Index type, Value = FLAT. Distance metric, Value = Inner Product\nWorkloads We construct a datastore for retrieval based on the RPJ-Wiki dataset [10], a widely used corpus containing 76 GB of raw Wikipedia text. The indexing configuration is summarized in Tab. 1. Following prior work [57], we segment the text into passages of 256 tokens and generate an embedding for each chunk using Contriever [27], an unsupervised contrastive learning based dense retriever. Each embedding has a dimensionality of 768.\nFor evaluation, we adopt four standard benchmarks widely used in RAG and open-domain retrieval: NQ [31], TriviaQA [28], GPQA [48], and HotpotQA [68].\nBesides retrieval itself, we also consider the predominant downstream task of RAG. We adopt the widely deployed LLaMA model family for generation and report downstream task accuracy with the Llama-3.2-1B-Instruct model [19].\nTestbed. We evaluate our system and baselines on two hardware platforms. The first is an NVIDIA A10 server hosted on an AWS g5.48xlarge instance [4], equipped with a 96-core CPU, 2 \u00d7 3.8TB AWS NVMe SSD, and an NVIDIA A10G GPU with 24 GB of memory. The second is a Mac environment, provided via an AWS EC2 M1 Mac instance [3], featuring an Apple M1 Ultra processor (Arm64), macOS, and utilizes a 512GB Amazon EBS volume for its main storage.\nMetrics. We compare LEANN against alternative baselines in three main dimensions: storage, latency, and accuracy. For accuracy, we evaluate both the search (retrieval) accuracy and downstream task accuracy.", + "text": "\ud835\udc5b \u2208 neighbors( \ud835\udc63 ) do. 10:, 1 = if \ud835\udc5b \u2209 \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 then. 11:, 1 = \ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 \u2190", "metadata": {} }, { - "text": "To evaluate downstream task (RAG) accuracy, we use the exact match (EM) and the F1 score as metrics. EM measures the proportion of predictions that match the ground-truth answers provided by the query dataset. The F1 score captures the harmonic mean of precision and recall, typically calculated at the token level. It assigns partial credit by considering the overlap in tokens between the predicted answer and the ground-truth answer, even if they are not an exact match.\nTo evaluate retrieval accuracy, we report Recall@k as defined in \u00a72. In open-domain settings, ground-truth labels for retrieved passages are typically unavailable. Following standard practice [29, 54, 75], we use the results from exact search as a proxy for ground truth. In our experiments, we set \ud835\udc58 = 3 following prior work standard setup [1, 57], and report Recall@3. The exact search is implemented with faiss.IndexFlatIP over our datastore for each query set.\nFor the retrieval latency evaluation, we measure the time required to reach different target recall levels. Specifically, we perform a binary search to identify the minimal search queue length \ud835\udc52\ud835\udc53 (as defined in Algorithm 1) that meets the\nFigure 4. [Main Result]: Latency-storage trade-offs in RAG applications across four datasets and two hardware configurations. The y-axis shows the storage overhead, defined as the size of the ANN index relative to the raw data size (as detailed in Tab. 1). We vary the target recall to evaluate latency under different retrieval accuracy levels. Since recall is not applicable to BM25, it appears as a single data point in each figure. Additionally, we omit the PQ-compressed method, as it fails to reach the target recall threshold despite being a vector-based approach. As shown in Fig. 5, both BM25 and PQ result in poor downstream accuracy.\n- \u00b7 IVF(in-memory) : The Inverted File (IVF) index is a widely used cluster-based vector index. We adopt the faiss.IndexIVFFlat implementation. Following best practices from Faiss [52] and prior work [25], we set the number of centroids to \u221a \ud835\udc41 , where \ud835\udc41 is the size of the datastore. In our setup, we use a 60 \ud835\udc40 datastore, which corresponds to \ud835\udc5b\ud835\udc59\ud835\udc56\ud835\udc60\ud835\udc61 = 8192.", + "text": "\ud835\udc63\ud835\udc56\ud835\udc60\ud835\udc56\ud835\udc61\ud835\udc52\ud835\udc51 \u222a { \ud835\udc5b }. 12:, 1 = Calculate approximate distance \ud835\udc51 \ud835\udc4e\ud835\udc5d\ud835\udc5d\ud835\udc5f\ud835\udc5c\ud835\udc65 ( \ud835\udc5b,\ud835\udc5e ). 13:, 1 = \ud835\udc34\ud835\udc44 \u2190", "metadata": {} }, { - "text": "Figure 5. [Main Result]: Comparison of Exact Match and F1 scores for downstream RAG tasks across three methods: keyword search (BM25), PQ-compressed vector search, and our proposed vector search system. Our method is configured to achieve a target recall of 90%, while the PQ baseline is given extended search time to reach its highest possible recall. Here we use Llama-3.2-1B as the generation model.\n- \u00b7 DiskANN [59]: DiskANN is a graph-based vector search system optimized for memory efficiency. It keeps only a PQ table in memory and loads full embeddings from disk on demand. We configure it with \ud835\udc40 = 60 and \ud835\udc52\ud835\udc53 \ud835\udc36\ud835\udc5c\ud835\udc5b\ud835\udc60\ud835\udc61\ud835\udc5f\ud835\udc62\ud835\udc50\ud835\udc61\ud835\udc56\ud835\udc5c\ud835\udc5b = 128, following recommended settings [59].\ntarget recall, and report the average latency of 20 queries using the resulting \ud835\udc52\ud835\udc53 value.\nBaselines We compare LEANN against the following baseline methods and systems:\n- \u00b7 IVF-based recomputation : We adopt the idea of IVFbased recomputation from Edge-RAG [55], where we use online recomputation to avoid storing the full set of embeddings, while using the same construction parameters as IVF (in-memory).\n- \u00b7 IVF-Disk : IVF-Disk reduces memory usage by employing memory-mapped files ( mmap ) instead of loading the entire index into memory. We implement it using Faiss's faiss.contrib.ondisk module and adopt the same configuration as in IVF (in-memory).\n- \u00b7 PQ Compression [29]: We apply PQ to compress embeddings to match our storage footprint while preserving the graph structure.\n- \u00b7 BM25 [13, 49]: A classical lexical ranking algorithm widely used in keyword-based search.\n- \u00b7 HNSW (in-memory) [38]: HNSW is a widely-used stateof-the-art vector index [2, 47]. We use the faiss.IndexHNSWFlat implementation with construction parameters recommended by Faiss: \ud835\udc40 = 30 and \ud835\udc52\ud835\udc53 \ud835\udc36\ud835\udc5c\ud835\udc5b\ud835\udc60\ud835\udc61\ud835\udc5f\ud835\udc62\ud835\udc50\ud835\udc61\ud835\udc56\ud835\udc5c\ud835\udc5b = 128, distinct from the search-time parameter \ud835\udc52\ud835\udc53 .", + "text": "\ud835\udc34\ud835\udc44 \u222a { \ud835\udc5b }. 14:, 1 = \ud835\udc40 \u2190 extract top \ud835\udc4e % from \ud835\udc34\ud835\udc44 that are not in \ud835\udc38\ud835\udc44. 15:, 1 = for each \ud835\udc5a \u2208 \ud835\udc40", "metadata": {} }, { - "text": "Fig. 4 presents the storage consumption and end-to-end RAG query latency across all baseline systems and LEANN. The results show that LEANN is the only system that reduces storage to less than 5% of the original raw text size while maintaining reasonable latency, which we discussed in \u00a72.3, such as achieving 90% recall on GPQA in under 2 seconds.\nFor latency evaluation, we measure per-query latency under different target recall levels across all combinations of query datasets and hardware platforms. For BM25, we report a single number for its latency value using the default keyword search configuration. Unlike embedding-based search methods, BM25 is a lexical search technique and does not operate over dense embeddings. As a result, recall is not applicable for evaluating its effectiveness because it is defined based on approximate nearest neighbor retrieval. We omit results for HNSW and IVF on the Mac platform, as both methods require loading the full dense embedding matrix into memory, which leads to out-of-memory (OOM) errors. Specifically, the Mac system has 128GB of RAM, while the index size exceeds 171GB, as shown in Tab. 1. We also exclude the PQ-compressed baseline, as it fails to achieve the target recall even with an arbitrarily long search time.", + "text": "do. 16:, 1 = Compute exact distance \ud835\udc51 \ud835\udc52\ud835\udc65\ud835\udc4e\ud835\udc50\ud835\udc61 ( \ud835\udc5a,\ud835\udc5e ). 17:, 1 = \ud835\udc38\ud835\udc44 \u2190 \ud835\udc38\ud835\udc44 \u222a { \ud835\udc5a } ; \ud835\udc45 \u2190", "metadata": {} }, { - "text": "We report storage consumption as a proportion of the raw text size (76 GB), referred to as proportional size in Fig. 4. Since all methods operate on the same fixed datastore based on the RPJ-Wiki dataset, their storage consumption remains constant across hardware platforms and query datasets. The figure shows that HNSW stores all dense embeddings along with the graph structure, leading to substantial storage overhead. DiskANN incurs even higher overhead due to its sectoraligned design. Each node's data, including its embedding (768 \u00d7 4 bytes) and edge list (60 neighbors, 60 \u00d7 4 bytes), is padded to a 4 KB SSD sector, resulting in the largest storage footprint among all methods. IVF and IVF-Disk exhibit similar storage overheads, both dominated by the embedding file. The additional metadata required by IVF (e.g., centroids) is relatively small, typically amounting to only about 1 / \u221a \ud835\udc41 of the total embedding size, and thus contributes little overhead. For BM25, storage is determined by the vocabulary size and the associated posting lists (i.e., the frequency of each token). In our setting, the size of the BM25 index is comparable to that of the original corpus. LEANN stores only a compact graph structure, resulting in less than 5% additional storage. Among the baselines, IVF-based recomputation achieves the lowest storage footprint, as it only stores the IVF centroids on disk, which adds little overhead.\nFig. 4 shows that LEANN consistently outperforms EdgeRAG, an IVF-based recomputation method, achieving significantly lower latency, ranging from 21 . 17 \u00d7 to 200 . 60 \u00d7 , across all the datasets and hardware platforms. This advantage is partly due to the asymptotic difference in recomputation complexity: the number of recomputed chunks in LEANN\n\u221a", + "text": "\ud835\udc45 \u222a { \ud835\udc5a }. 18:, 1 = if | \ud835\udc45 | > \ud835\udc52\ud835\udc53 then. 19:, 1 = Remove furthest element from \ud835\udc45 to \ud835\udc5e. 20:, 1 = return top", "metadata": {} }, { - "text": "grows polylogarithmically with \ud835\udc41 , while it grows as \ud835\udc41 in Edge-RAG[65]. Graph-based baselines such as HNSW and DiskANN represent upper bounds on latency performance, as they store all embeddings in RAM or on disk. While LEANN trades some latency for substantial storage savings, its performance remains well within an acceptable range. This latency degradation is acceptable for two main reasons as we discussed in \u00a72.3: (1) second-level latency is acceptable for large-scale local document or image retrieval tasks, and (2) many downstream tasks on local devices, such as image or text generation, typically take over tens of seconds to complete [11, 34], making the additional latency introduced by LEANN reasonable in practice. Comparing across hardware platforms, A10 achieves a 2 . 28 \u00d7 to 3 . 01 \u00d7 speedup over the Mac, which aligns with their theoretical TFLOPS specifications [12, 43].", + "text": "\ud835\udc58 elements from \ud835\udc45", "metadata": {} }, { - "text": "We evaluate downstream task accuracy across four query datasets, as shown in Fig. 5. For all methods, we retrieve the top-3 most relevant documents. Our method is configured to achieve a target recall of 90%, while BM25 operates with its default keyword matching configuration. Although the PQ-compressed method fails to meet the target recall defined in \u00a76.2, it still achieves approximately 20% recall across all datasets. We include its downstream performance using these lower-quality retrieved results.\nFinally, we note that when a target recall level (e.g., 90%) is enforced, the downstream accuracy of our method aligns with that of other lossless ANN approaches, confirming that our system does not sacrifice accuracy for storage efficiency.\nAs illustrated in Fig. 5, our method consistently achieves higher downstream accuracy across all datasets except GPQA. Our ANN method shows limited gains on GPQA due to a distributional mismatch: the RPJ-Wiki datastore is somewhat out-of-distribution for GPQA, which consists of graduatelevel questions that are poorly supported by the retrieved content from Wikipedia. The accuracy improvement on HotpotQA is also more modest compared to the first two datasets, as HotpotQA requires multi-hop reasoning, while our current setup performs only single-hop retrieval, limiting its effectiveness for this task.", + "text": "Because \ud835\udc34\ud835\udc44 globally tracks all previously encountered nodes, the algorithm can revisit earlier neighbors that become more promising as the search progresses. As a result, even when all immediate neighbors in the current iteration are far from the query, the algorithm can still select previously seen but unexplored", "metadata": {} }, { - "text": "We conduct comprehensive and detailed ablation studies to analyze the impacts of each methodology we use in LEANN.\nAblation study on latency optimization technique. To evaluate LEANN's latency optimization techniques, we incrementally enable the components introduced in \u00a74, using a fixed target recall across multiple datasets. We begin with a naive graph-based recomputation baseline. Incorporating\nFigure 6. [Ablation Study]: Speedup achieved by different optimization techniques described in \u00a74 when evaluated on four datasets to reach the same recall level on the A10 GPU. Two-level refers to the optimization in \u00a74.1, while Batch corresponds to \u00a74.2.\nFigure 7. [Ablation Study]: Comparison of pruned graph quality against two heuristic methods and the upper bound using the datastore in Tab. 1. We vary the target recall and measure the number of nodes each method needs to recompute. The dashed gray line represents the original HNSW graph, which serves as the upper bound, with twice the storage (i.e., average degree) of the others.\nthe two-level hybrid distance computation strategy from \u00a74.1 yields an average speedup of 1 . 40 \u00d7 , reaching up to 1 . 64 \u00d7 , by reducing the number of nodes requiring recomputation and enabling lightweight distance estimation without querying the embedding server. Adding the dynamic batching technique further improves GPU utilization during recomputation, increasing the overall speedup to 1 . 76 \u00d7 , with a maximum of 2 . 02 \u00d7 . Among all datasets, HotpotQA benefits the most from batching, as its longer search queue required to achieve the target recall allows more effective grouping of multi hop requests.", + "text": "nodes that are now ranked higher.", "metadata": {} }, { - "text": "Wecompare our graph pruning algorithm with two heuristic baselines and evaluate graph quality by measuring the number of embeddings that must be fetched to achieve a given recall target, as shown in Fig. 7. In LEANN, the end-to-end latency scales linearly with the number of embeddings that\nFigure 8. [Ablation Study]: Comparison of (out-)degree distributions between the original graph, our pruning method, and two heuristic baselines. Similar to Fig. 7, the gray curve represents the original HNSW graph, which has twice the size of the others. Only our pruning method successfully preserves the high degree nodes.\nrequire recomputation, making this metric a strong proxy for retrieval latency.\nThe original graph, constructed on the datastore described in Tab. 1, has an average degree of 18. All three pruning methods, ours and the two baselines, are applied to reduce the total number of edges by half, thereby halving the graph's storage overhead.\nThe two heuristic baselines are as follows: (1) Random Prune , which randomly removes 50% of the existing edges from the original graph; and (2) Small M , which directly constrains the maximum out-degree during graph construction, resulting in an average degree that is half that of the original graph.\nWe evaluate the performance of different graph structures on the NQ dataset by varying the search queue length \ud835\udc52\ud835\udc53 , aiming to determine the minimum number of embeddings that must be fetched to achieve various recall targets. As shown in Fig. 7, our pruning method introduced in \u00a75 achieves performance comparable to the original unpruned graph, despite using only half the edges. It outperforms the Random Prune baseline by up to 1 . 18 \u00d7 and the Small M baseline by up to 5 . 76 \u00d7 . We omit the Small M data points at 94% and 96% recall targets due to their poor performance.", + "text": "The core insight of this design is to combine the complementary strengths of approximate and exact distance computations. Approximate distances, though not fully accurate, are often sufficient to surface the most relevant candidates near the top, enabling early pruning of unpromising directions. We exploit this by using approximate distances", "metadata": {} }, { - "text": "Degree Distribution in Pruned Graphs. To better understand the effectiveness of our pruning strategy, we analyze the out-degree distributions of the original graph, our approach, Random Prune, and Small M. As discussed in \u00a75, our design explicitly aims to preserve high-degree 'hub' nodes. As shown in Fig. 8, it successfully retains a substantial number of such nodes, whereas the other two baselines fail to do so. This underscores the critical role of hub nodes in supporting efficient graph-based vector search, a finding that aligns with insights from prior work [39, 42, 51].\nFigure 9. [Ablation Study]: Latency on the A10 GPU and accuracy of a smaller embedding model evaluated on a 2Mchunk datastore, using a fixed search queue length of ef=50 . The smaller embedding model significantly reduces latency without causing a substantial drop in downstream accuracy.\nUsing different embedding model sizes. Since the primary bottleneck of our system lies in the recomputation process, as shown in Fig. 11 later, we further explore the potential for latency reduction by adopting a smaller embedding model. Specifically, we replace the original contriever model (110M parameters) used in \u00a76.2 with the lightweight GTE-small model [36], which has only 34M parameters. We evaluate performance on a smaller 2M document datastore using a fixed search queue length of ef=50 , as shown in Fig. 9. The results show that GTE-small achieves a 2 . 3 \u00d7 speedup while maintaining downstream task accuracy within 2% of the Contriever baseline. This demonstrates the potential of LEANN to further reduce search latency by leveraging a lightweight embedding model.", + "text": "to evaluate neighbors during traversal, and exact distances to re-rank only the most promising candidates. This approach achieves high recall while substantially reducing computational cost, thereby lowering overall latency.", "metadata": {} }, { - "text": "Relaxing disk constraint. As discussed in \u00a73, when disk storage constraints are relaxed, LEANN can materialize the embeddings of high-degree nodes to reduce recomputation overhead. This effectively builds an on-disk embedding cache, reducing the number of nodes that need to be recomputed at query time. For instance, storing just 10% of the original embeddings yields a 1 . 47 \u00d7 speedup, with a cache hit rate of up to 41.9%. This high cache hit rate arises from the skewed access pattern characteristic of graph-based traversal. However, the observed speedup does not fully align with the hit rate due to the non-negligible loading overhead introduced by SSDs with limited bandwidth.\nGraph-based recomputation breakdown. Fig. 11 breaks down the time cost of a single batch in graph-based recomputation into three stages, categorized by the primary system resource used. Each batch aggregates multiple hops of recomputation, as described in \u00a74.2. First, LEANN performs PQ lookups to select promising nodes, then retrieves and tokenizes the corresponding raw text. The tokenized inputs are sent to the embedding server. Finally, LEANN performs embedding recomputation and distance calculation.\nFigure 10. [Ablation Study]: Latency and cache hit rate comparison under varying storage constraints across four datasets. The x-axis indicates total storage size (graph size + cached embeddings on disk) and the corresponding percentage of cached embeddings.\nFigure 11. [Ablation Study]: Latency breakdown of a batch of requests in graph-based recomputation.\nAlthough embedding recomputation is the primary bottleneck in LEANN, accounting for 76% of total latency, the three stages-spanning I/O, CPU, and GPU resources-can potentially be overlapped to improve overall efficiency. We leave this optimization for future work.", + "text": "At the end of each iteration, nodes in \ud835\udc40 with computed exact distances are inserted into \ud835\udc38\ud835\udc44 , which serves as the candidate pool for subsequent expansions. We repeat this process iteratively, and in each iteration, the number of nodes requiring recomputation is further reduced.", "metadata": {} }, { - "text": "General Vector Search. Vector search primarily follows two paradigms: IVF [33] and proximity graphs [38]. IVF clusters vectors and probes relevant subsets during search, while graph-based methods such as HNSW [38], NSG [21], Vamana [59], and others [8, 20, 41] connect similar vectors to enable efficient traversal. Graph-based approaches are widely regarded as state of the art due to their favorable trade-offs between accuracy and efficiency [65]. Prior work has explored reducing graph size through learned neighbor selection [5, 73], but these methods are often impractical due to the high training cost and the need for labeled data.\nResource-Constrained Vector Search. Numerous efforts have aimed to reduce the memory footprint of vector search. Disk-based approaches such as DiskANN [59] store both vectors and graph structures on disk, leveraging in-memory compressed embeddings for navigation. Starling [64] improves I/O efficiency for disk-resident graphs, while FusionANNS [61] enables cost-effective search through coordinated use of SSD, CPU, and GPU resources. AiSAQ [60], LM-DiskANN [46] further minimizes DRAM usage by storing compressed embeddings directly on disk. EdgeRAG [55] alleviates memory pressure by generating embeddings online using an IVF-based index. However, it still incurs substantial storage overhead due to the need to maintain large clusters on disk as dictated by its design, and its performance degrades at scale owing to the high recomputation cost introduced by an inefficient index structure. An alternative approach is embedding compression, such as PQ [29], or more recent methods like RabitQ [23], which offers quantization with theoretical error bounds. Yet, these methods struggle to maintain high search accuracy under tight storage budgets. In contrast, LEANN integrates on-the-fly embedding recomputation with a graph-based index, incorporating highdegree preserving graph pruning and a specialized traversal algorithm optimized for edge devices.", + "text": "For efficient approximate distance calculation, we employ PQ, a widely used technique that compresses the embedding space by several orders of magnitude. In our setting, we use only 2GB of PQ-compressed embeddings to represent the original 200GB of full-precision data, resulting", "metadata": {} }, { - "text": "Vector Search Applications on Edge Devices. On-device vector search enables privacy-preserving, low-latency, and offline capabilities across diverse applications. On-device RAGsystems ground language models in personal document collections while maintaining data privacy [32, 53, 66, 72]. Personalized recommendation systems [69] match user profiles with item embeddings directly on the device, while content-based search over large collections of locally stored images and videos employs efficient vision embedding models [50] to generate vector representations for fast retrieval. These applications motivate the design of LEANN to enable efficient, low-overhead vector search on edge devices.", + "text": "in minimal storage overhead. Although PQ introduces some accuracy loss, our framework compensates by applying exact computations to a small subset of high-ranking candidates, thereby preserving end-to-end search quality.", + "metadata": {} + }, + { + "text": "Finally, our method is flexible and generalizable. It can incorporate alternative lightweight approximation techniques beyond quantization. For instance, distillation-based embeddings or link-and-code representations [18] can be used, provided they offer sufficient efficiency. This adaptability makes the Two-Level Search paradigm applicable", + "metadata": {} + }, + { + "text": "across diverse computational budgets and deployment scenarios.", + "metadata": {} + }, + { + "text": "During the search process, GPU resources are often underutilized because each expansion step only triggers recomputation for a small number of nodes, typically equal to the degree of the current node \ud835\udc63 . This problem is further exacerbated when using the Two Level Search algorithm", + "metadata": {} + }, + { + "text": "(see line 16), where the candidate set is even more selective, resulting in smaller batch sizes. As a result, LEANN frequently fails to meet the minimum batch size required to saturate GPU throughput, leading to inefficient use of hardware resources at", + "metadata": {} + }, + { + "text": "runtime.", + "metadata": {} + }, + { + "text": "To address this, LEANN introduces a dynamic batching strategy that slightly relaxes the strict data dependency in best-first search in Algorithm 1. While this introduces minor staleness in the expansion order, it significantly increases the batch size for the embedding model, thereby reducing", + "metadata": {} + }, + { + "text": "the end-to-end latency per query.\nThis leads to a key challenge: how can we design an algorithm that fully utilizes GPU compute capacity and takes advantage of batch processing [15, 76] without sacrificing search efficiency?", + "metadata": {} + }, + { + "text": "Specifically, LEANN breaks the strict data dependency in best-first search, where the current node to be expanded depends on the immediate results of the previous expansion, by dynamically collecting a group of the closest candidates from the priority queue. The algorithm accumulates neighbors,", + "metadata": {} + }, + { + "text": "that is, nodes requiring recomputation, until a target batch size is reached (for example, 64 for the A10 GPU), which can be efficiently determined through lightweight offline profiling. This dynamic batching mechanism integrates naturally with the Two-Level Search described in", + "metadata": {} + }, + { + "text": "\u00a74.1. We accumulate nodes in the set \ud835\udc40 across iterations until the predefined batch size threshold is reached, at which point we perform embedding recomputation for all nodes in \ud835\udc40 .", + "metadata": {} + }, + { + "text": "This idea shares a similar insight with the beam search strategy used in DiskANN [59], where a fixed number of round-trip node accesses are batched together to amortize disk access latency. However, unlike DiskANN's fixed beam width, LEANN", + "metadata": {} + }, + { + "text": "uses dynamic batching based on the degrees of current candidates, reducing staleness and offering greater flexibility for our setting. Furthermore, while DiskANN aims to reduce I/O latency, our dynamic batching strategy focuses on maximizing GPU utilization. As a result, LEANN adopts a", + "metadata": {} + }, + { + "text": "- 1: Input: Original graph \ud835\udc3a with the set of vertices \ud835\udc49 , candidate list size \ud835\udc52\ud835\udc53 , connection number threshold \ud835\udc40 for high degree nodes and \ud835\udc5a for other nodes, where \ud835\udc5a <", + "metadata": {} + }, + { + "text": "\ud835\udc40 , percentage of high degree nodes \ud835\udc4e\n- 3: \u2200 \ud835\udc63 \u2208 \ud835\udc49 : \ud835\udc37 [ \ud835\udc63 ] \u2190 degree of \ud835\udc63 of \ud835\udc3a , \ud835\udc3a 1 \u2190 empty graph", + "metadata": {} + }, + { + "text": "- 2: Output: Pruned graph \ud835\udc3a 1\n- 4: \ud835\udc49 \u2217 \u2190 nodes with the top \ud835\udc4e % highest (out) degree in \ud835\udc37", + "metadata": {} + }, + { + "text": "- 5: for \ud835\udc63 \u2208 \ud835\udc49 do\n- 6: \ud835\udc4a \u2190 search( \ud835\udc63 , \ud835\udc52\ud835\udc53 )\n- \u22b2 Refer to Algorithm 1", + "metadata": {} + }, + { + "text": "- 7: if \ud835\udc63 \u2208 \ud835\udc49 \u2217 then\n- 8: \ud835\udc40 0 \u2190 \ud835\udc40\n- 9: else\n- 10: \ud835\udc40 0 \u2190 \ud835\udc5a", + "metadata": {} + }, + { + "text": "- 11: Select \ud835\udc40 0 neighbors from \ud835\udc4a using original heuristic 12: Add bidirectional edges between \ud835\udc63 and neighbors to\n\ud835\udc3a\n- 13:\n1", + "metadata": {} + }, + { + "text": "Shrink edges if \u2203 \ud835\udc5e \u2208 neighbor and \ud835\udc37 \ud835\udc5c\ud835\udc62\ud835\udc61 ( \ud835\udc5e ) > \ud835\udc40\ndifferent optimization objective: rather than minimizing disk access, it prioritizes efficient GPU usage to reduce end-to-end latency.", + "metadata": {} + }, + { + "text": "With the Two-Level Search and dynamic batching mechanisms in place to optimize recomputation latency, we now examine how LEANN reduces the storage costs associated with graph metadata through a high degree preserving graph pruning algorithm.", + "metadata": {} + }, + { + "text": "In datacenter environments, this overhead is typically acceptable: storage is relatively inexpensive, and the operational costs of index maintenance (e.g., updates, rebuilds, and monitoring) are manageable. In contrast, consumer devices are often storage-constrained, making even the metadata footprint of the index", + "metadata": {} + }, + { + "text": "structure a significant concern.", + "metadata": {} + }, + { + "text": "As discussed in \u00a73, while LEANN avoids storing exact embeddings by recomputing them at query time, the graph metadata used to guide the search process can still introduce substantial overhead. For example, in the datastore described by [56], the index structure alone accounts for over", + "metadata": {} + }, + { + "text": "30% of the total storage footprint.", + "metadata": {} + }, + { + "text": "To address this, LEANN allows users to specify a disk usage constraint \ud835\udc36 . When the metadata size exceeds this threshold, LEANN invokes a graph pruning algorithm that reduces the number of edges while preserving high-degree nodes. This design maintains retrieval accuracy and avoids significant increases in query-time", + "metadata": {} + }, + { + "text": "latency, while substantially reducing the metadata footprint.\nThe graph, stored in a compressed sparse row (CSR) format, for example, consumes space proportional to the total\nFigure 3. Node access probability per query", + "metadata": {} + }, + { + "text": "number of edges, i.e., the number of nodes times their average degree 2 . Since each node corresponds to a fixed chunk of text, the number of nodes is fixed given the text. The key challenge, then, is to reduce the average node degree without significantly compromising search", + "metadata": {} + }, + { + "text": "latency. We formalize this optimization problem as follows: given a storage budget, construct a graph that maximizes search efficiency.\n", + "metadata": {} + }, + { + "text": "Here, \ud835\udc5b denotes the number of nodes in the graph, corresponding to the number of text or image chunks. \ud835\udc37 \ud835\udc56 represents the degree of node \ud835\udc56 , and ef is a parameter that controls the length of the search queue, as described in Algorithm", + "metadata": {} + }, + { + "text": "1. During Best-First Search, each time a node \ud835\udc56 is selected for expansion, all of its \ud835\udc37 \ud835\udc56 neighbors must be recomputed 3 .", + "metadata": {} + }, + { + "text": "While indiscriminate edge reduction in graph-based indexes often degrades search quality, as shown in \u00a76.4, our key insight is that selectively retaining hub nodes is sufficient to preserve performance. This strategy is motivated by the skewed node access pattern observed in Fig. 3, where", + "metadata": {} + }, + { + "text": "highdegree nodes are accessed more frequently during search. Accordingly, we aim to preserve these high-degree nodes, which serve as the backbone of the graph's connectivity, even as we reduce the overall number of edges. To implement this idea, we introduce Algorithm 3. At a high", + "metadata": {} + }, + { + "text": "level, our hubpreservation strategy incorporates two key modifications to the original graph construction process.", + "metadata": {} + }, + { + "text": "Throughput denotes the number of chunks the embedding server can process per second. Since LEANN's performance bottleneck lies in recomputation as shown in Fig. 11, this formulation serves as a reasonable approximation of the search time. Finally, Dtype indicates the size of the data type used", + "metadata": {} + }, + { + "text": "to store node connections in the graph, which is typically int32 (4 bytes).\n2 Here we refer to average out-degree.", + "metadata": {} + }, + { + "text": "3 In the actual search trajectory, there may be slight differences between ef and the exact number of hops made by the query. For simplicity, we use \u02dd ef \ud835\udc56 = 1 | \ud835\udc37 \ud835\udc56 | as an approximation for the number of nodes requiring", + "metadata": {} + }, + { + "text": "recomputation along the search path.", + "metadata": {} + }, + { + "text": "On the one hand, we apply differentiated degree thresholds to nodes based on their estimated importance. Specifically, we reduce the number of connections for most nodes to a lower threshold \ud835\udc5a (line 10), while allowing a small fraction (i.e., \ud835\udc4e %) of", + "metadata": {} + }, + { + "text": "important nodes to retain a higher degree up to a threshold \ud835\udc40 (line 8). Given a storage budget \ud835\udc36 , LEANN automatically tunes the values of \ud835\udc5a and \ud835\udc40 through offline profiling across multiple datasets. To identify important nodes, we follow prior work", + "metadata": {} + }, + { + "text": "[42, 51] and use node degree as a proxy for influence, selecting the top \ud835\udc4e % of nodes by degree (line 4). Empirically, we find that preserving only the top 2% of highdegree nodes significantly reduces the total number", + "metadata": {} + }, + { + "text": "of edges while maintaining high retrieval accuracy.\nNote that this algorithm does not require knowledge about the query distribution. Hence, it can scale efficiently to large datasets, providing a simple yet effective mechanism to balance graph size and search performance.", + "metadata": {} + }, + { + "text": "On the other hand, while we restrict the number of outgoing connections during node insertion, as shown in line 10, weallow all nodes to establish bidirectional edges with newly inserted nodes, up to the maximum threshold \ud835\udc40 (as shown in line 13, not", + "metadata": {} + }, + { + "text": "\ud835\udc5a ). This design choice ensures that each node retains the opportunity to connect with high-degree hub nodes, thereby preserving the navigability of the graph with minimal impact on search quality.", + "metadata": {} + }, + { + "text": "In our evaluation, we answer the following important questions:\n- 2. How does LEANN impact downstream task accuracy, particularly when compared to low-storage alternatives such as index compression techniques and keyword-based search? (\u00a76.3)", + "metadata": {} + }, + { + "text": "- 1. How does LEANN perform compared to state-of-the-art baselines in terms of latency and storage, across different search accuracy (recall) levels? (\u00a76.2)", + "metadata": {} + }, + { + "text": "- 3. Howdoes each individual technique of LEANN contribute to its overall efficiency and effectiveness? (\u00a76.4)", + "metadata": {} + }, + { + "text": "\nTable 1. Summary of our dataset and index setup.", + "metadata": {} + }, + { + "text": "Dataset, Value = rpj_wiki [10]. Raw text size, Value = 76G. Chunk size, Value = 256 token. # of chunks, Value = 60 million. Embed model, Value = Contriever [27]. Embed", + "metadata": {} + }, + { + "text": "dimension, Value = 768. Embedding size, Value = 171G. Index type, Value = FLAT. Distance metric, Value = Inner Product", + "metadata": {} + }, + { + "text": "Workloads We construct a datastore for retrieval based on the RPJ-Wiki dataset [10], a widely used corpus containing 76 GB of raw Wikipedia text. The indexing configuration is summarized in Tab. 1. Following prior work [57], we segment the text into passages of", + "metadata": {} + }, + { + "text": "256 tokens and generate an embedding for each chunk using Contriever [27], an unsupervised contrastive learning based dense retriever. Each embedding has a dimensionality of 768.", + "metadata": {} + }, + { + "text": "For evaluation, we adopt four standard benchmarks widely used in RAG and open-domain retrieval: NQ [31], TriviaQA [28], GPQA [48], and HotpotQA [68].", + "metadata": {} + }, + { + "text": "Besides retrieval itself, we also consider the predominant downstream task of RAG. We adopt the widely deployed LLaMA model family for generation and report downstream task accuracy with the Llama-3.2-1B-Instruct model [19].", + "metadata": {} + }, + { + "text": "Testbed. We evaluate our system and baselines on two hardware platforms. The first is an NVIDIA A10 server hosted on an AWS g5.48xlarge instance [4], equipped with a 96-core CPU, 2 \u00d7 3.8TB AWS NVMe", + "metadata": {} + }, + { + "text": "SSD, and an NVIDIA A10G GPU with 24 GB of memory. The second is a Mac environment, provided via an AWS EC2 M1 Mac instance [3], featuring an Apple M1 Ultra processor (Arm64), macOS, and utilizes a", + "metadata": {} + }, + { + "text": "512GB Amazon EBS volume for its main storage.\nMetrics. We compare LEANN against alternative baselines in three main dimensions: storage, latency, and accuracy. For accuracy, we evaluate both the search (retrieval) accuracy and downstream task accuracy.", + "metadata": {} + }, + { + "text": "To evaluate downstream task (RAG) accuracy, we use the exact match (EM) and the F1 score as metrics. EM measures the proportion of predictions that match the ground-truth answers provided by the query dataset. The F1 score captures the harmonic mean of precision and recall, typically", + "metadata": {} + }, + { + "text": "calculated at the token level. It assigns partial credit by considering the overlap in tokens between the predicted answer and the ground-truth answer, even if they are not an exact match.", + "metadata": {} + }, + { + "text": "To evaluate retrieval accuracy, we report Recall@k as defined in \u00a72. In open-domain settings, ground-truth labels for retrieved passages are typically unavailable. Following standard practice [29, 54, 75], we use the results from exact search as a proxy for ground", + "metadata": {} + }, + { + "text": "truth. In our experiments, we set \ud835\udc58 = 3 following prior work standard setup [1, 57], and report Recall@3. The exact search is implemented with faiss.IndexFlatIP over our datastore for each query set.", + "metadata": {} + }, + { + "text": "For the retrieval latency evaluation, we measure the time required to reach different target recall levels. Specifically, we perform a binary search to identify the minimal search queue length \ud835\udc52\ud835\udc53 (as defined in Algorithm 1) that meets the", + "metadata": {} + }, + { + "text": "Figure 4. [Main Result]: Latency-storage trade-offs in RAG applications across four datasets and two hardware configurations. The y-axis shows the storage overhead, defined as the size of the ANN index relative to the raw data size (as detailed in Tab. 1). We vary the", + "metadata": {} + }, + { + "text": "target recall to evaluate latency under different retrieval accuracy levels. Since recall is not applicable to BM25, it appears as a single data point in each figure. Additionally, we omit the PQ-compressed method, as it fails to reach the target recall threshold despite being a vector-based approach. As", + "metadata": {} + }, + { + "text": "shown in Fig. 5, both BM25 and PQ result in poor downstream accuracy.", + "metadata": {} + }, + { + "text": "- \u00b7 IVF(in-memory) : The Inverted File (IVF) index is a widely used cluster-based vector index. We adopt the faiss.IndexIVFFlat implementation. Following best practices from Faiss [52] and prior work [25], we set the number of", + "metadata": {} + }, + { + "text": "centroids to \u221a \ud835\udc41 , where \ud835\udc41 is the size of the datastore. In our setup, we use a 60 \ud835\udc40 datastore, which corresponds to \ud835\udc5b\ud835\udc59\ud835\udc56\ud835\udc60\ud835\udc61 = 8192.", + "metadata": {} + }, + { + "text": "Figure 5. [Main Result]: Comparison of Exact Match and F1 scores for downstream RAG tasks across three methods: keyword search (BM25), PQ-compressed vector search, and our proposed vector search system. Our method is configured to achieve a target recall of 90%,", + "metadata": {} + }, + { + "text": "while the PQ baseline is given extended search time to reach its highest possible recall. Here we use Llama-3.2-1B as the generation model.", + "metadata": {} + }, + { + "text": "- \u00b7 DiskANN [59]: DiskANN is a graph-based vector search system optimized for memory efficiency. It keeps only a PQ table in memory and loads full embeddings from disk on demand. We configure it with \ud835\udc40 = 60 and \ud835\udc52\ud835\udc53", + "metadata": {} + }, + { + "text": "\ud835\udc36\ud835\udc5c\ud835\udc5b\ud835\udc60\ud835\udc61\ud835\udc5f\ud835\udc62\ud835\udc50\ud835\udc61\ud835\udc56\ud835\udc5c\ud835\udc5b = 128, following recommended settings [59].\ntarget recall, and report the average latency of 20 queries using the resulting \ud835\udc52\ud835\udc53 value.", + "metadata": {} + }, + { + "text": "Baselines We compare LEANN against the following baseline methods and systems:", + "metadata": {} + }, + { + "text": "- \u00b7 IVF-based recomputation : We adopt the idea of IVFbased recomputation from Edge-RAG [55], where we use online recomputation to avoid storing the full set of embeddings, while using the same construction parameters as IVF (in-memory).", + "metadata": {} + }, + { + "text": "- \u00b7 IVF-Disk : IVF-Disk reduces memory usage by employing memory-mapped files ( mmap ) instead of loading the entire index into memory. We implement it using Faiss's faiss.contrib.ondisk module and adopt the same configuration as in IVF (in-memory).", + "metadata": {} + }, + { + "text": "- \u00b7 PQ Compression [29]: We apply PQ to compress embeddings to match our storage footprint while preserving the graph structure.\n- \u00b7 BM25 [13, 49]: A classical lexical ranking algorithm widely used in keyword-based search.", + "metadata": {} + }, + { + "text": "- \u00b7 HNSW (in-memory) [38]: HNSW is a widely-used stateof-the-art vector index [2, 47]. We use the faiss.IndexHNSWFlat implementation with construction parameters recommended by Faiss: \ud835\udc40 = 30", + "metadata": {} + }, + { + "text": "and \ud835\udc52\ud835\udc53 \ud835\udc36\ud835\udc5c\ud835\udc5b\ud835\udc60\ud835\udc61\ud835\udc5f\ud835\udc62\ud835\udc50\ud835\udc61\ud835\udc56\ud835\udc5c\ud835\udc5b = 128, distinct from the search-time parameter \ud835\udc52\ud835\udc53 .", + "metadata": {} + }, + { + "text": "Fig. 4 presents the storage consumption and end-to-end RAG query latency across all baseline systems and LEANN. The results show that LEANN is the only system that reduces storage to less than 5% of the original raw text size while maintaining reasonable", + "metadata": {} + }, + { + "text": "latency, which we discussed in \u00a72.3, such as achieving 90% recall on GPQA in under 2 seconds.", + "metadata": {} + }, + { + "text": "For latency evaluation, we measure per-query latency under different target recall levels across all combinations of query datasets and hardware platforms. For BM25, we report a single number for its latency value using the default keyword search configuration. Unlike embedding-based search methods,", + "metadata": {} + }, + { + "text": "BM25 is a lexical search technique and does not operate over dense embeddings. As a result, recall is not applicable for evaluating its effectiveness because it is defined based on approximate nearest neighbor retrieval. We omit results for HNSW and IVF on the Mac", + "metadata": {} + }, + { + "text": "platform, as both methods require loading the full dense embedding matrix into memory, which leads to out-of-memory (OOM) errors. Specifically, the Mac system has 128GB of RAM, while the index size exceeds 171GB, as shown", + "metadata": {} + }, + { + "text": "in Tab. 1. We also exclude the PQ-compressed baseline, as it fails to achieve the target recall even with an arbitrarily long search time.", + "metadata": {} + }, + { + "text": "We report storage consumption as a proportion of the raw text size (76 GB), referred to as proportional size in Fig. 4. Since all methods operate on the same fixed datastore based on the RPJ-Wiki dataset, their storage consumption remains constant across hardware", + "metadata": {} + }, + { + "text": "platforms and query datasets. The figure shows that HNSW stores all dense embeddings along with the graph structure, leading to substantial storage overhead. DiskANN incurs even higher overhead due to its sectoraligned design. Each node's data, including its embedding", + "metadata": {} + }, + { + "text": "(768 \u00d7 4 bytes) and edge list (60 neighbors, 60 \u00d7 4 bytes), is padded to a 4 KB SSD sector, resulting in the largest storage footprint among all methods. IVF and IVF-Disk exhibit", + "metadata": {} + }, + { + "text": "similar storage overheads, both dominated by the embedding file. The additional metadata required by IVF (e.g., centroids) is relatively small, typically amounting to only about 1 / \u221a \ud835\udc41 of the total embedding size, and thus contributes little", + "metadata": {} + }, + { + "text": "overhead. For BM25, storage is determined by the vocabulary size and the associated posting lists (i.e., the frequency of each token). In our setting, the size of the BM25 index is comparable to that of the original corpus. LEANN", + "metadata": {} + }, + { + "text": "stores only a compact graph structure, resulting in less than 5% additional storage. Among the baselines, IVF-based recomputation achieves the lowest storage footprint, as it only stores the IVF centroids on disk, which adds little overhead.", + "metadata": {} + }, + { + "text": "Fig. 4 shows that LEANN consistently outperforms EdgeRAG, an IVF-based recomputation method, achieving significantly lower latency, ranging from 21 . 17 \u00d7 to 200 . 60 \u00d7 , across all the", + "metadata": {} + }, + { + "text": "datasets and hardware platforms. This advantage is partly due to the asymptotic difference in recomputation complexity: the number of recomputed chunks in LEANN\n\u221a", + "metadata": {} + }, + { + "text": "grows polylogarithmically with \ud835\udc41 , while it grows as \ud835\udc41 in Edge-RAG[65]. Graph-based baselines such as HNSW and DiskANN represent upper bounds on latency performance, as they store all embeddings in RAM", + "metadata": {} + }, + { + "text": "or on disk. While LEANN trades some latency for substantial storage savings, its performance remains well within an acceptable range. This latency degradation is acceptable for two main reasons as we discussed in \u00a72.3: (1) second-level latency is acceptable for large-scale", + "metadata": {} + }, + { + "text": "local document or image retrieval tasks, and (2) many downstream tasks on local devices, such as image or text generation, typically take over tens of seconds to complete [11, 34], making the additional latency introduced by LEANN reasonable in practice.", + "metadata": {} + }, + { + "text": "Comparing across hardware platforms, A10 achieves a 2 . 28 \u00d7 to 3 . 01 \u00d7 speedup over the Mac, which aligns with their theoretical TFLOPS specifications [12, 43].", + "metadata": {} + }, + { + "text": "We evaluate downstream task accuracy across four query datasets, as shown in Fig. 5. For all methods, we retrieve the top-3 most relevant documents. Our method is configured to achieve a target recall of 90%, while BM25", + "metadata": {} + }, + { + "text": "operates with its default keyword matching configuration. Although the PQ-compressed method fails to meet the target recall defined in \u00a76.2, it still achieves approximately 20% recall across all datasets. We include its downstream performance using these lower-quality", + "metadata": {} + }, + { + "text": "retrieved results.", + "metadata": {} + }, + { + "text": "Finally, we note that when a target recall level (e.g., 90%) is enforced, the downstream accuracy of our method aligns with that of other lossless ANN approaches, confirming that our system does not sacrifice accuracy for storage efficiency.", + "metadata": {} + }, + { + "text": "As illustrated in Fig. 5, our method consistently achieves higher downstream accuracy across all datasets except GPQA. Our ANN method shows limited gains on GPQA due to a distributional mismatch: the RPJ-Wiki datastore is somewhat out-of-distribution", + "metadata": {} + }, + { + "text": "for GPQA, which consists of graduatelevel questions that are poorly supported by the retrieved content from Wikipedia. The accuracy improvement on HotpotQA is also more modest compared to the first two datasets, as HotpotQA requires multi-hop reasoning, while our", + "metadata": {} + }, + { + "text": "current setup performs only single-hop retrieval, limiting its effectiveness for this task.", + "metadata": {} + }, + { + "text": "We conduct comprehensive and detailed ablation studies to analyze the impacts of each methodology we use in LEANN.", + "metadata": {} + }, + { + "text": "Ablation study on latency optimization technique. To evaluate LEANN's latency optimization techniques, we incrementally enable the components introduced in \u00a74, using a fixed target recall across multiple datasets. We begin with a naive graph-based recomputation baseline. Incorporating", + "metadata": {} + }, + { + "text": "Figure 6. [Ablation Study]: Speedup achieved by different optimization techniques described in \u00a74 when evaluated on four datasets to reach the same recall level on the A10 GPU. Two-level refers to the optimization in \u00a74.1, while Batch corresponds to", + "metadata": {} + }, + { + "text": "\u00a74.2.", + "metadata": {} + }, + { + "text": "Figure 7. [Ablation Study]: Comparison of pruned graph quality against two heuristic methods and the upper bound using the datastore in Tab. 1. We vary the target recall and measure the number of nodes each method needs to recompute. The dashed gray line represents", + "metadata": {} + }, + { + "text": "the original HNSW graph, which serves as the upper bound, with twice the storage (i.e., average degree) of the others.", + "metadata": {} + }, + { + "text": "the two-level hybrid distance computation strategy from \u00a74.1 yields an average speedup of 1 . 40 \u00d7 , reaching up to 1 . 64 \u00d7 , by reducing the number of nodes requiring recomputation and enabling lightweight distance estimation without querying the embedding", + "metadata": {} + }, + { + "text": "server. Adding the dynamic batching technique further improves GPU utilization during recomputation, increasing the overall speedup to 1 . 76 \u00d7 , with a maximum of 2 . 02 \u00d7 . Among all datasets, HotpotQA benefits the most from batching, as its", + "metadata": {} + }, + { + "text": "longer search queue required to achieve the target recall allows more effective grouping of multi hop requests.", + "metadata": {} + }, + { + "text": "Wecompare our graph pruning algorithm with two heuristic baselines and evaluate graph quality by measuring the number of embeddings that must be fetched to achieve a given recall target, as shown in Fig. 7. In LEANN, the end-to-end latency scales linearly with the number", + "metadata": {} + }, + { + "text": "of embeddings that", + "metadata": {} + }, + { + "text": "Figure 8. [Ablation Study]: Comparison of (out-)degree distributions between the original graph, our pruning method, and two heuristic baselines. Similar to Fig. 7, the gray curve represents the original HNSW graph, which has twice the size of", + "metadata": {} + }, + { + "text": "the others. Only our pruning method successfully preserves the high degree nodes.\nrequire recomputation, making this metric a strong proxy for retrieval latency.", + "metadata": {} + }, + { + "text": "The original graph, constructed on the datastore described in Tab. 1, has an average degree of 18. All three pruning methods, ours and the two baselines, are applied to reduce the total number of edges by half, thereby halving the graph's storage", + "metadata": {} + }, + { + "text": "overhead.", + "metadata": {} + }, + { + "text": "The two heuristic baselines are as follows: (1) Random Prune , which randomly removes 50% of the existing edges from the original graph; and (2) Small M , which directly constrains the maximum out-degree during graph construction, resulting in an average degree", + "metadata": {} + }, + { + "text": "that is half that of the original graph.", + "metadata": {} + }, + { + "text": "We evaluate the performance of different graph structures on the NQ dataset by varying the search queue length \ud835\udc52\ud835\udc53 , aiming to determine the minimum number of embeddings that must be fetched to achieve various recall targets. As shown in Fig. 7, our pruning method introduced in", + "metadata": {} + }, + { + "text": "\u00a75 achieves performance comparable to the original unpruned graph, despite using only half the edges. It outperforms the Random Prune baseline by up to 1 . 18 \u00d7 and the Small M baseline by up to 5 . 76 \u00d7 . We", + "metadata": {} + }, + { + "text": "omit the Small M data points at 94% and 96% recall targets due to their poor performance.", + "metadata": {} + }, + { + "text": "Degree Distribution in Pruned Graphs. To better understand the effectiveness of our pruning strategy, we analyze the out-degree distributions of the original graph, our approach, Random Prune, and Small M. As discussed in \u00a75, our design explicitly aims to preserve high-degree", + "metadata": {} + }, + { + "text": "'hub' nodes. As shown in Fig. 8, it successfully retains a substantial number of such nodes, whereas the other two baselines fail to do so. This underscores the critical role of hub nodes in supporting efficient graph-based vector search, a finding that aligns with", + "metadata": {} + }, + { + "text": "insights from prior work [39, 42, 51].", + "metadata": {} + }, + { + "text": "Figure 9. [Ablation Study]: Latency on the A10 GPU and accuracy of a smaller embedding model evaluated on a 2Mchunk datastore, using a fixed search queue length of ef=50 . The smaller embedding model significantly reduces latency without causing a", + "metadata": {} + }, + { + "text": "substantial drop in downstream accuracy.", + "metadata": {} + }, + { + "text": "Using different embedding model sizes. Since the primary bottleneck of our system lies in the recomputation process, as shown in Fig. 11 later, we further explore the potential for latency reduction by adopting a smaller embedding model. Specifically, we replace the original contriever model", + "metadata": {} + }, + { + "text": "(110M parameters) used in \u00a76.2 with the lightweight GTE-small model [36], which has only 34M parameters. We evaluate performance on a smaller 2M document datastore using a fixed search queue length of ef=50 ,", + "metadata": {} + }, + { + "text": "as shown in Fig. 9. The results show that GTE-small achieves a 2 . 3 \u00d7 speedup while maintaining downstream task accuracy within 2% of the Contriever baseline. This demonstrates the potential of LEANN to further reduce search latency by leveraging a", + "metadata": {} + }, + { + "text": "lightweight embedding model.", + "metadata": {} + }, + { + "text": "Relaxing disk constraint. As discussed in \u00a73, when disk storage constraints are relaxed, LEANN can materialize the embeddings of high-degree nodes to reduce recomputation overhead. This effectively builds an on-disk embedding cache, reducing the number of nodes that need to be", + "metadata": {} + }, + { + "text": "recomputed at query time. For instance, storing just 10% of the original embeddings yields a 1 . 47 \u00d7 speedup, with a cache hit rate of up to 41.9%. This high cache hit rate arises from the skewed access pattern", + "metadata": {} + }, + { + "text": "characteristic of graph-based traversal. However, the observed speedup does not fully align with the hit rate due to the non-negligible loading overhead introduced by SSDs with limited bandwidth.", + "metadata": {} + }, + { + "text": "Graph-based recomputation breakdown. Fig. 11 breaks down the time cost of a single batch in graph-based recomputation into three stages, categorized by the primary system resource used. Each batch aggregates multiple hops of recomputation, as described in \u00a74.2. First,", + "metadata": {} + }, + { + "text": "LEANN performs PQ lookups to select promising nodes, then retrieves and tokenizes the corresponding raw text. The tokenized inputs are sent to the embedding server. Finally, LEANN performs embedding recomputation and distance calculation.", + "metadata": {} + }, + { + "text": "Figure 10. [Ablation Study]: Latency and cache hit rate comparison under varying storage constraints across four datasets. The x-axis indicates total storage size (graph size + cached embeddings on disk) and the corresponding percentage of cached embeddings.", + "metadata": {} + }, + { + "text": "Figure 11. [Ablation Study]: Latency breakdown of a batch of requests in graph-based recomputation.", + "metadata": {} + }, + { + "text": "Although embedding recomputation is the primary bottleneck in LEANN, accounting for 76% of total latency, the three stages-spanning I/O, CPU, and GPU resources-can potentially be overlapped to improve overall efficiency. We leave this optimization for future work.", + "metadata": {} + }, + { + "text": "General Vector Search. Vector search primarily follows two paradigms: IVF [33] and proximity graphs [38]. IVF clusters vectors and probes relevant subsets during search, while graph-based methods such as HNSW [38], NSG [21], Vamana", + "metadata": {} + }, + { + "text": "[59], and others [8, 20, 41] connect similar vectors to enable efficient traversal. Graph-based approaches are widely regarded as state of the art due to their favorable trade-offs between accuracy and efficiency [65]. Prior work has explored reducing graph size through learned neighbor", + "metadata": {} + }, + { + "text": "selection [5, 73], but these methods are often impractical due to the high training cost and the need for labeled data.", + "metadata": {} + }, + { + "text": "Resource-Constrained Vector Search. Numerous efforts have aimed to reduce the memory footprint of vector search. Disk-based approaches such as DiskANN [59] store both vectors and graph structures on disk, leveraging in-memory compressed embeddings for navigation. Starling [64] improves I/O efficiency for", + "metadata": {} + }, + { + "text": "disk-resident graphs, while FusionANNS [61] enables cost-effective search through coordinated use of SSD, CPU, and GPU resources. AiSAQ [60], LM-DiskANN [46] further minimizes DRAM usage by storing compressed embeddings directly on disk.", + "metadata": {} + }, + { + "text": "EdgeRAG [55] alleviates memory pressure by generating embeddings online using an IVF-based index. However, it still incurs substantial storage overhead due to the need to maintain large clusters on disk as dictated by its design, and its performance degrades at scale owing to the high recomputation", + "metadata": {} + }, + { + "text": "cost introduced by an inefficient index structure. An alternative approach is embedding compression, such as PQ [29], or more recent methods like RabitQ [23], which offers quantization with theoretical error bounds. Yet, these methods struggle to maintain high search accuracy under tight storage budgets. In", + "metadata": {} + }, + { + "text": "contrast, LEANN integrates on-the-fly embedding recomputation with a graph-based index, incorporating highdegree preserving graph pruning and a specialized traversal algorithm optimized for edge devices.", + "metadata": {} + }, + { + "text": "Vector Search Applications on Edge Devices. On-device vector search enables privacy-preserving, low-latency, and offline capabilities across diverse applications. On-device RAGsystems ground language models in personal document collections while maintaining data privacy [32, 53, 66, 72].", + "metadata": {} + }, + { + "text": "Personalized recommendation systems [69] match user profiles with item embeddings directly on the device, while content-based search over large collections of locally stored images and videos employs efficient vision embedding models [50] to generate vector representations for fast retrieval. These applications motivate the design of LEANN to enable", + "metadata": {} + }, + { + "text": "efficient, low-overhead vector search on edge devices.", "metadata": {} }, { @@ -157,75 +1061,2251 @@ "metadata": {} }, { - "text": "The core techniques of LEANN, including on-the-fly recomputation from on-disk data, graph pruning, and a recomputationfriendly search algorithm, are broadly applicable across a range of graph-based approximate nearest neighbor frameworks. While we use HNSW as a concrete implementation example, these techniques are compatible with many other graph structures discussed earlier. Furthermore, LEANN's methodology can be naturally adapted to alternative algorithmic and system designs. For instance, in a DiskANN-style architecture, one can keep PQ-compressed embeddings in memory, store the graph structure on disk, and traverse the graph using PQ results. Instead of loading exact embeddings from disk, embeddings are recomputed on demand, and final reranking is performed using the recomputed values.", + "text": "The core techniques of LEANN, including on-the-fly recomputation from on-disk data, graph pruning, and a recomputationfriendly search algorithm, are broadly applicable across a range of graph-based approximate nearest neighbor frameworks. While we use HNSW as a concrete", "metadata": {} }, { - "text": "LEANN requires computing embeddings for all passages in advance in order to build the graph, after which the embeddings can be discarded. In other words, while LEANN incurs low storage overhead during search, the peak storage usage during index construction can be high. There are multiple potential solutions to tackle storage-efficient index building. One approach is to pre-cluster the data, then embed and construct the graph structure independently within each cluster. This process is performed sequentially, and for each cluster, the embeddings are discarded after the graph is built. During the search, results from all clusters are simply aggregated to form the final result.", + "text": "implementation example, these techniques are compatible with many other graph structures discussed earlier. Furthermore, LEANN's methodology can be naturally adapted to alternative algorithmic and system designs. For instance, in a DiskANN-style architecture, one can keep PQ-compressed embeddings in memory,", "metadata": {} }, { - "text": "For edge deployments, the latency overhead of LEANN is expected to decrease as consumer-grade GPUs continue to advance. For example, the RTX 5090 is projected to deliver over three times the FP16 Tensor throughput (419 TFLOPS [44]) compared to the NVIDIA A10 (125 TFLOPS [43]). In parallel, ongoing progress in compact and efficient embedding models is expected to reduce the cost of the forward pass, further accelerating LEANN and broadening its applicability across diverse hardware platforms. Building on our core algorithm, we envision future optimizations that further reduce latency and improve responsiveness.\nBeyond edge devices, our solution has broader applicability. In datacenter environments, where high-dimensional vectors are used to represent each object (e.g., text or image) for semantic search and other downstream tasks, storage quickly becomes a significant burden. Efficiently managing these representations is therefore essential. LEANN introduces fine-grained, on-demand embedding computation, offering a promising strategy for reducing storage overhead. We hope that LEANN will inspire further research into addressing storage challenges in large-scale ANN systems, particularly as the adoption of advanced embedding models continues to accelerate in datacenter settings.", + "text": "store the graph structure on disk, and traverse the graph using PQ results. Instead of loading exact embeddings from disk, embeddings are recomputed on demand, and final reranking is performed using the recomputed values.", "metadata": {} }, { - "text": "Similarity search over high-dimensional embeddings underpins many generative AI applications such as retrievalaugmented generation (RAG). However, enabling such capabilities on personal devices remains challenging due to the substantial storage required for storing embeddings and rich vector index metadata. In this paper, we present LEANN, a\nstorage-efficient neural retrieval system that leverages graphbased recomputation . By combining a two-level search algorithm with batch execution , LEANN achieves efficient query processing without storing the full embedding set. Furthermore, we introduce a high degree preserving pruning strategy to reduce graph storage overhead while maintaining accuracy. Together, these techniques enable LEANN to operate with less than 5% of the original data size - achieving a 50 \u00d7 storage reduction compared to existing methods - while maintaining fast and accurate retrieval.", + "text": "LEANN requires computing embeddings for all passages in advance in order to build the graph, after which the embeddings can be discarded. In other words, while LEANN incurs low storage overhead during search, the peak storage usage during index construction can be high. There are multiple potential solutions to tackle", "metadata": {} }, { - "text": "- [1] Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil, and Hannaneh Hajishirzi. 2023. Self-rag: Learning to retrieve, generate, and critique through self-reflection. In The Twelfth International Conference on Learning Representations .\n- [3] AWS. 2025. Amazon EC2 G5 instance. https://aws.amazon.com/ec2/i nstance-types/mac/ . [Online; accessed April-2025].\n- [2] Martin Aum\u00fcller, Erik Bernhardsson, and Alexander Faithfull. 2020. ANN-Benchmarks: A benchmarking tool for approximate nearest neighbor algorithms. Information Systems 87 (2020), 101374.\n- [4] AWS. 2025. Amazon EC2 G5 instance. https://aws.amazon.com/ec2/i nstance-types/g5 . [Online; accessed April-2025].\n- [6] Dongqi Cai, Shangguang Wang, Chen Peng, et al. 2024. Recall: Empowering Multimodal Embedding for Edge Devices. arXiv:2409.15342.\n- [5] Dmitry Baranchuk and Artem Babenko. 2019. Towards similarity graphs constructed by deep reinforcement learning. arXiv preprint arXiv:1911.12122 (2019).\n- [7] Pablo Castro. 2024. Announcing cost-effective RAG at scale with Azure AI Search. https://techcommunity.microsoft.com/blog/azure-aiservices-blog/announcing-cost-effective-rag-at-scale-with-azureai-search/4104961 .\n- [9] Davin Choo, Christoph Grunau, Julian Portmann, and V\u00e1clav Rozhon. 2020. k-means++: few more steps yield constant approximation. In International Conference on Machine Learning . PMLR, 1909-1917.", + "text": "storage-efficient index building. One approach is to pre-cluster the data, then embed and construct the graph structure independently within each cluster. This process is performed sequentially, and for each cluster, the embeddings are discarded after the graph is built. During the search, results from all clusters are simply aggregated", "metadata": {} }, { - "text": "- [8] Qi Chen, Bing Zhao, Haidong Wang, Mingqin Li, Chuanjie Liu, Zengzhong Li, Mao Yang, and Jingdong Wang. 2021. SPANN: Highlyefficient Billion-scale Approximate Nearest Neighbor Search. In 35th Conference on Neural Information Processing Systems (NeurIPS 2021) .\n- [10] Together Computer. 2023. RedPajama: An Open Source Recipe to Reproduce LLaMA Training Dataset. https://github.com/togethercom puter/RedPajama-Data . Accessed: May 10, 2025.\n- [12] CPU-Monkey. n.d.. Apple M1 Ultra 64-Core GPU. https://www.cpumonkey.com/en/igpu-apple_m1_ultra_64_core . Accessed: 2025-05-10.\n- [11] KVCACHE.AI Contributors. 2025. KTransformers: A Flexible Framework for Experiencing Cutting-edge LLM Inference Optimizations. https://github.com/kvcache-ai/ktransformers . Accessed: 2025-05-14.\n- [13] Nick Craswell, Bhaskar Mitra, Emine Yilmaz, Daniel Campos, and Jimmy Lin. 2021. Ms marco: Benchmarking ranking models in the large-data regime. In proceedings of the 44th International ACM SIGIR conference on research and development in information retrieval . 15661576.\n- [15] Weihao Cui, Han Zhao, Quan Chen, Hao Wei, Zirui Li, Deze Zeng, Chao Li, and Minyi Guo. 2022. { DVABatch } : Diversity-aware { MultiEntry }{ Multi-Exit } batching for efficient processing of { DNN } services on { GPUs } . In 2022 USENIX Annual Technical Conference (USENIX ATC 22) . 183-198.", + "text": "to form the final result.", "metadata": {} }, { - "text": "- [14] Nick Craswell, Bhaskar Mitra, Emine Yilmaz, Daniel Campos, and Ellen M Voorhees. 2020. Overview of the TREC 2019 deep learning track. arXiv preprint arXiv:2003.07820 (2020).\n- [16] Matthijs Douze. 2020. Indexing 1T Vectors. https://github.com/faceb ookresearch/faiss/wiki/Indexing-1T-vectors .\n- [17] Matthijs Douze, Alexandr Guzhva, Chengqi Deng, Jeff Johnson, Gergely Szilvasy, Pierre-Emmanuel Mazar\u00e9, Maria Lomeli, Lucas Hosseini, and Herv\u00e9 J\u00e9gou. 2025. The Faiss library. arXiv:2401.08281 [cs.LG] https://arxiv.org/abs/2401.08281\n- [19] Abhimanyu Dubey, Abhinav Jauhri, Abhinav Pandey, Abhishek Kadian, Ahmad Al-Dahle, Aiesha Letman, Akhil Mathur, Alan Schelten, Amy Yang, Angela Fan, et al. 2024. The llama 3 herd of models. arXiv preprint arXiv:2407.21783 (2024).\n- [18] Matthijs Douze, Alexandre Sablayrolles, and Herv\u00e9 J\u00e9gou. 2018. Link and code: Fast indexing with graphs and compact regression codes. In Proceedings of the IEEE conference on computer vision and pattern recognition . 3646-3654.\n- [20] Cong Fu, Changxu Wang, and Deng Cai. 2021. High Dimensional Similarity Search with Satellite System Graph: Efficiency, Scalability, and Unindexed Query Compatibility. arXiv:1907.06146 [cs.IR] https: //arxiv.org/abs/1907.06146", + "text": "For edge deployments, the latency overhead of LEANN is expected to decrease as consumer-grade GPUs continue to advance. For example, the RTX 5090 is projected to deliver over three times the FP16 Tensor throughput (419 TFLOPS [44]) compared", "metadata": {} }, { - "text": "- [22] Jianyang Gao and Cheng Long. 2023. High-Dimensional Approximate Nearest Neighbor Search: with Reliable and Efficient Distance Comparison Operations. Proc. ACM Manag. Data 1, 2, Article 137 (June 2023), 27 pages. https://doi.org/10.1145/3589282\n- [21] Cong Fu, Chao Xiang, Changxu Wang, and Deng Cai. 2019. Fast approximate nearest neighbor search with the navigating spreadingout graph. Proc. VLDB Endow. 12, 5 (Jan. 2019), 461-474. https: //doi.org/10.14778/3303753.3303754\n- [23] Jianyang Gao and Cheng Long. 2024. RabitQ: Quantizing HighDimensional Vectors with a Theoretical Error Bound for Approximate Nearest Neighbor Search. In Proceedings of the ACM on Management of Data (SIGMOD '24) , Vol. 2. Article 167.\n- [25] Alexandra Henzinger, Emma Dauterman, Henry Corrigan-Gibbs, and Nickolai Zeldovich. 2023. Private Web Search with Tiptoe. Cryptology ePrint Archive, Paper 2023/1438. https://doi.org/10.1145/3600006.36 13134\n- [24] Yanzhang He, Tara N. Sainath, Rohit Prabhavalkar, Ian McGraw, Raziel Alvarez, Ding Zhao, et al. 2019. Streaming End-to-End Speech Recognition for Mobile Devices. In Proc. IEEE ICASSP . 6381-6385.", + "text": "to the NVIDIA A10 (125 TFLOPS [43]). In parallel, ongoing progress in compact and efficient embedding models is expected to reduce the cost of the forward pass, further accelerating LEANN and broadening its applicability across diverse hardware platforms. Building on our core", "metadata": {} }, { - "text": "- [26] Piotr Indyk and Rajeev Motwani. 1998. Approximate nearest neighbors: towards removing the curse of dimensionality. In Proceedings of the Thirtieth Annual ACM Symposium on Theory of Computing (Dallas, Texas, USA) (STOC '98) . Association for Computing Machinery, New York, NY, USA, 604-613. https://doi.org/10.1145/276698.276876\n- [28] Mandar Joshi, Eunsol Choi, Daniel S Weld, and Luke Zettlemoyer. 2017. Triviaqa: A large scale distantly supervised challenge dataset for reading comprehension. arXiv preprint arXiv:1705.03551 (2017).\n- [27] Gautier Izacard, Mathilde Caron, Lucas Hosseini, Sebastian Riedel, Piotr Bojanowski, Armand Joulin, and Edouard Grave. 2021. Unsupervised dense information retrieval with contrastive learning. arXiv preprint arXiv:2112.09118 (2021).\n- [29] Herve J\u00e9gou, Matthijs Douze, and Cordelia Schmid. 2011. Product Quantization for Nearest Neighbor Search. IEEE Transactions on Pattern Analysis and Machine Intelligence 33, 1 (2011), 117-128. https://doi.or g/10.1109/TPAMI.2010.57", + "text": "algorithm, we envision future optimizations that further reduce latency and improve responsiveness.", "metadata": {} }, { - "text": "- [31] Tom Kwiatkowski, Jennimaria Palomaki, Olivia Redfield, Michael Collins, Ankur Parikh, Chris Alberti, Danielle Epstein, Illia Polosukhin, Jacob Devlin, Kenton Lee, Kristina Toutanova, Llion Jones, Matthew Kelcey, Ming-Wei Chang, Andrew M. Dai, Jakob Uszkoreit, Quoc Le, and Slav Petrov. 2019. Natural Questions: A Benchmark for Question Answering Research. Transactions of the Association for Computational Linguistics 7 (2019), 452-466. https://doi.org/10.1162/tacl_a_00276\n- [30] Vladimir Karpukhin, Barlas Oguz, Sewon Min, Patrick SH Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, and Wen-tau Yih. 2020. Dense Passage Retrieval for Open-Domain Question Answering.. In EMNLP (1) . 6769-6781.\n- [32] Chanhee Lee, Deeksha Prahlad, Dongha Kim, and Hokeun Kim. 2024. Work-in-Progress: On-device Retrieval Augmented Generation with", + "text": "Beyond edge devices, our solution has broader applicability. In datacenter environments, where high-dimensional vectors are used to represent each object (e.g., text or image) for semantic search and other downstream tasks, storage quickly becomes a significant burden. Efficiently managing these representations is therefore essential.", "metadata": {} }, { - "text": "- Knowledge Graphs for Personalized Large Language Models. In 2024 International Conference on Embedded Software (EMSOFT) . 1-1. https: //doi.org/10.1109/EMSOFT60242.2024.00006\n- [34] Muyang Li, Yujun Lin, Zhekai Zhang, Tianle Cai, Xiuyu Li, Junxian Guo, Enze Xie, Chenlin Meng, Jun-Yan Zhu, and Song Han. 2024. Svdqunat: Absorbing outliers by low-rank components for 4-bit diffusion models. arXiv preprint arXiv:2411.05007 (2024).\n- [33] Victor Lempitsky. 2012. The inverted multi-index. In Proceedings of the 2012 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (CVPR '12) . IEEE Computer Society, USA, 3069-3076.\n- [35] Wen Li, Ying Zhang, Yifang Sun, Wei Wang, Mingjie Li, Wenjie Zhang, and Xuemin Lin. 2019. Approximate nearest neighbor search on high dimensional data-experiments, analyses, and improvement. IEEE Transactions on Knowledge and Data Engineering 32, 8 (2019), 14751488.\n- [37] Jimmy Lin, Rodrigo Nogueira, and Andrew Yates. 2022. Pretrained transformers for text ranking: Bert and beyond . Springer Nature.\n- [36] Zehan Li, Xin Zhang, Yanzhao Zhang, Dingkun Long, Pengjun Xie, and Meishan Zhang. 2023. Towards general text embeddings with multistage contrastive learning. arXiv preprint arXiv:2308.03281 (2023).\n- [38] Yu A Malkov and Dmitry A Yashunin. 2018. Efficient and robust approximate nearest neighbor search using hierarchical navigable small world graphs. IEEE transactions on pattern analysis and machine intelligence 42, 4 (2018), 824-836.", + "text": "LEANN introduces fine-grained, on-demand embedding computation, offering a promising strategy for reducing storage overhead. We hope that LEANN will inspire further research into addressing storage challenges in large-scale ANN systems, particularly as the adoption of advanced embedding models continues to accelerate in datacenter settings.", "metadata": {} }, { - "text": "- [40] Microsoft Learn. 2025. Vector index size and staying under limits . https: //learn.microsoft.com/en-us/azure/search/vector-search-indexsize?utm_source=chatgpt.com&tabs=portal-vector-quota\n- [39] Magdalen Dobson Manohar, Zheqi Shen, Guy Blelloch, Laxman Dhulipala, Yan Gu, Harsha Vardhan Simhadri, and Yihan Sun. 2024. Parlayann: Scalable and deterministic parallel graph-based approximate nearest neighbor search algorithms. In Proceedings of the 29th ACM SIGPLAN Annual Symposium on Principles and Practice of Parallel Programming . 270-285.\n- [41] Javier Vargas Munoz, Marcos A Gon\u00e7alves, Zanoni Dias, and Ricardo da S Torres. 2019. Hierarchical clustering-based graphs for large scale approximate nearest neighbor search. Pattern Recognition 96 (2019), 106970.\n- [43] NVIDIA. n.d.. NVIDIA A10 Tensor Core GPU. https://www.nvidia.c om/en-us/data-center/products/a10-gpu/ . Accessed: 2025-05-10.\n- [42] Blaise Munyampirwa, Vihan Lakshman, and Benjamin Coleman. 2024. Down with the Hierarchy: The'H'in HNSW Stands for\" Hubs\". arXiv preprint arXiv:2412.01940 (2024).\n- [44] NVIDIA Corporation. 2024. NVIDIA RTX Blackwell GPU Architecture. https://images.nvidia.com/aem-dam/Solutions/geforce/blackwell/nv idia-rtx-blackwell-gpu-architecture.pdf . Whitepaper.\n- [46] Yu Pan, Jianxin Sun, and Hongfeng Yu. 2023. LM-DiskANN: Low Memory Footprint in Disk-Native Dynamic Graph-Based ANN Indexing. In 2023 IEEE International Conference on Big Data (BigData) . 5987-5996. https://doi.org/10.1109/BigData59044.2023.10386517", + "text": "Similarity search over high-dimensional embeddings underpins many generative AI applications such as retrievalaugmented generation (RAG). However, enabling such capabilities on personal devices remains challenging due to the substantial storage required for storing embeddings and rich vector index metadata. In this paper, we present LEANN, a", "metadata": {} }, { - "text": "- [45] ObjectBox Ltd. 2024. Edge AI: The era of on-device AI. https://obje ctbox.io/on-device-vector-databases-and-edge-ai/ . Accessed May 2025.\n- [47] Pinecone. n.d.. Vector Search: Hierarchical Navigable Small Worlds. https://www.pinecone.io/learn/series/faiss/hnsw/ . Accessed: 2025-05-10.\n- [49] Navid Rekabsaz, Oleg Lesota, Markus Schedl, Jon Brassey, and Carsten Eickhoff. 2021. TripClick: the log files of a large health web search engine. In Proceedings of the 44th International ACM SIGIR Conference on Research and Development in Information Retrieval . 2507-2513.\n- [48] David Rein, Betty Li Hou, Asa Cooper Stickland, Jackson Petty, Richard Yuanzhe Pang, Julien Dirani, Julian Michael, and Samuel R Bowman. 2024. Gpqa: A graduate-level google-proof q&a benchmark. In First Conference on Language Modeling .", + "text": "storage-efficient neural retrieval system that leverages graphbased recomputation . By combining a two-level search algorithm with batch execution , LEANN achieves efficient query processing without storing the full embedding set. Furthermore, we introduce a high degree preserving pruning strategy to reduce graph storage overhead while maintaining accuracy. Together, these techniques enable", "metadata": {} }, { - "text": ", 1 = Humphrey Shi. 2023. Efficient Neural Networks: From Algorithm Design to Practical Mobile Deployments. CVPR 2023 Tutorial. https: //snap-research.github.io/efficient-nn-tutorial/ .. [51], 1 = Jie Ren, Minjia Zhang, and Dong Li. 2020. HM-ANN: efficient billion- point nearest neighbor search on heterogeneous memory. In Proceed- ings of the 34th International Conference on Neural Information Process- ing Systems (Vancouver, BC, Canada) (NIPS '20) . Curran Associates Inc., Red Hook, NY, USA, Article 895, 13 pages.. [52], 1 = Facebook AI Research. n.d.. Guidelines to Choose an Index. https: //github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an- index/28074dc0ddc733f84b06fa4d99b3f6e2ef65613d#if-below-1m- vectors-ivfx . Accessed: 2025-05-10.. [53], 1 = Michael J. Ryan, Danmei Xu, Chris Nivera, and Daniel Campos. 2024. EnronQA: Towards Personalized RAG over Private Documents. arXiv preprint arXiv:2505.00263 (2024).. [54], 1 = Christoph Schuhmann, Richard Vencu, Romain Beaumont, Robert Kaczmarczyk, Clayton Mullis, Aarush Katta, Theo Coombes, Jenia Jitsev, and Aran Komatsuzaki. 2021. Laion-400m: Open dataset of clip- filtered 400 million image-text pairs. arXiv preprint arXiv:2111.02114 (2021).. [55], 1 = Korakit Seemakhupt, Sihang Liu, and Samira Khan. 2024. EdgeRAG: Online-Indexed RAG for Edge Devices. arXiv preprint arXiv:2412.21023 (2024).. [56],", + "text": "LEANN to operate with less than 5% of the original data size - achieving a 50 \u00d7 storage reduction compared to existing methods - while maintaining fast and accurate retrieval.", "metadata": {} }, { - "text": "1 = Daniel Severo, Giuseppe Ottaviano, Matthew Muckley, Karen Ullrich, and Matthijs Douze. 2025. Lossless Compression of Vector IDs for Approximate Nearest Neighbor Search. arXiv preprint arXiv:2501.10479 (2025).. [57], 1 = Rulin Shao, Jacqueline He, Akari Asai, Weijia Shi, TimDettmers,Sewon Min, Luke Zettlemoyer, and Pang Wei WKoh. 2024. Scaling retrieval- based language models with a trillion-token datastore. Advances in Neural Information Processing Systems 37 (2024), 91260-91299.. [58], 1 = Michael Shen, Muhammad Umar, Kiwan Maeng, G. Edward Suh, and Udit Gupta. 2024. Towards Understanding Systems Trade-offs in Retrieval-Augmented Generation Model Inference. arXiv:2412.11854 [cs.AR] https://arxiv.org/abs/2412.11854. [59], 1 = Suhas Jayaram Subramanya, Devvrit, Rohan Kadekodi, Ravishankar Krishaswamy, and Harsha Vardhan Simhadri. 2019. DiskANN: fast accurate billion-point nearest neighbor search on a single node . Curran Associates Inc., Red Hook, NY, USA.. [60], 1 = Kento Tatsuno, Daisuke Miyashita, Taiga Ikeda, Kiyoshi Ishiyama, Kazunari Sumiyoshi, and Jun Deguchi. 2024. AiSAQ: All-in-Storage ANNS with Product Quantization for DRAM-free Information Re- trieval. arXiv preprint arXiv:2404.06004 (2024). arXiv:2404.06004 https://arxiv.org/abs/2404.06004. [61], 1 = Bing Tian, Haikun Liu, Yuhang Tang, Shihai Xiao, Zhuohui Duan, Xiaofei Liao, Hai Jin, Xuecang Zhang,", + "text": "- [1] Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil, and Hannaneh Hajishirzi. 2023. Self-rag: Learning to retrieve, generate, and critique through self-reflection. In The Twelfth International", "metadata": {} }, { - "text": "Junhua Zhu, and Yu Zhang. 2025. Towards High-throughput and Low-latency Billion-scale Vector Search via CPU/GPU Collaborative Filtering and Re-ranking. In 23rd USENIX Conference on File and Storage Technologies (FAST 25) . USENIX Association, Santa Clara, CA, 171-185. https://www.usenix.org/con. [62], 1 = ference/fast25/presentation/tian-bing Vincent Totino. 2025. Phone Storage: How Much Do You Really Need? https://www.optimum.com/articles/mobile/choosing-phone- storage-amount-needs-guide. [63], 1 = Vincent Totino. 2025. Phone Storage: How Much Do You Really Need? https://www.optimum.com/articles/mobile/choosing-phone- storage-amount-needs-guide Accessed May 15, 2025.. [64], 1 = Mengzhao Wang, Weizhi Xu, Xiaomeng Yi, Songlin Wu, Zhangyang Peng, Xiangyu Ke, Yunjun Gao, Xiaoliang Xu, Rentong Guo, and Charles Xie. 2024. Starling: AnI/O-Efficient Disk-Resident Graph Index Framework for High-Dimensional Vector Similarity Search on Data Segment. In Proceedings of the ACM on Management of Data (SIGMOD", + "text": "Conference on Learning Representations .\n- [3] AWS. 2025. Amazon EC2 G5 instance. https://aws.amazon.com/ec2/i nstance-types/mac/ . [Online; accessed April-2025].", "metadata": {} }, { - "text": "- [65] Peng Wang, Chen Wang, Xiaofang Lin, Wenjie Zhang, and Qing He. 2021. A Comprehensive Survey and Experimental Comparison of Graph-Based Approximate Nearest Neighbor Search. Proc. VLDB Endow. 14, 11 (2021), 1964-1978. https://doi.org/10.14778/3476249.347 6258\n- [67] Zhenliang Xue, Yixin Song, et al. 2024. PowerInfer-2: Fast Large Language Model Inference on a Smartphone. arXiv preprint arXiv:2406.06282 (2024).\n- [66] Zijie J Wang and Duen Horng Chau. 2024. MeMemo: On-device Retrieval Augmentation for Private and Personalized Text Generation. In Proceedings of the 47th International ACM SIGIR Conference on Research and Development in Information Retrieval . 2765-2770.\n- [68] Zhilin Yang, Peng Qi, Saizheng Zhang, Yoshua Bengio, William W Cohen, Ruslan Salakhutdinov, and Christopher D Manning. 2018. HotpotQA: A dataset for diverse, explainable multi-hop question answering. arXiv preprint arXiv:1809.09600 (2018).\n- [70] Weiping Yu, Ningyi Liao, Siqiang Luo, and Junfeng Liu. 2025. RAGDoll: Efficient Offloading-based Online RAG System on a Single GPU. arXiv preprint arXiv:2504.15302 (2025).\n- [69] Hongzhi Yin, Tong Chen, Liang Qu, and Bin Cui. 2024. On-Device Recommender Systems: A Comprehensive Survey. arXiv preprint arXiv:2401.11441 (2024).", + "text": "- [2] Martin Aum\u00fcller, Erik Bernhardsson, and Alexander Faithfull. 2020. ANN-Benchmarks: A benchmarking tool for approximate nearest neighbor algorithms. Information Systems 87 (2020), 101374.", "metadata": {} }, { - "text": "- [71] Hamed Zamani, Johanne R Trippas, Jeff Dalton, Filip Radlinski, et al. 2023. Conversational information seeking. Foundations and Trends\u00ae in Information Retrieval 17, 3-4 (2023), 244-456.\n- [73] Minjia Zhang, Wenhan Wang, and Yuxiong He. 2020. Learning to Anneal and Prune Proximity Graphs for Similarity Search. In International Conference on Learning Representations (ICLR) . Available at https://openreview.net/forum?id=HJlXC3EtwB .\n- [72] Saber Zerhoudi and Michael Granitzer. 2024. PersonaRAG: Enhancing Retrieval-Augmented Generation Systems with User-Centric Agents. arXiv preprint arXiv:2407.09394 (2024).\n- [74] Yanhao Zhang, Pan Pan, Yun Zheng, Kang Zhao, Yingya Zhang, Xiaofeng Ren, and Rong Jin. 2018. Visual search at alibaba. In Proceedings of the 24th ACM SIGKDD international conference on knowledge discovery & data mining . 993-1001.\n- [76] Kan Zhu, Yilong Zhao, Liangyu Zhao, Gefei Zuo, Yile Gu, Dedong Xie, Yufei Gao, Qinyu Xu, Tian Tang, Zihao Ye, et al. 2024. Nanoflow: Towards optimal large language model serving throughput. arXiv preprint arXiv:2408.12757 (2024).\n- [75] Jinhao Zhu, Liana Patel, Matei Zaharia, and Raluca Ada Popa. 2024. Compass: Encrypted Semantic Search with High Accuracy. Cryptology ePrint Archive, Paper 2024/1255. https://eprint.iacr.org/2024/1255\n- [77] Zilliz AI FAQ. 2025. How much memory overhead is typically introduced by indexes like HNSW or IVF? Accessed May 2025.", + "text": "- [4] AWS. 2025. Amazon EC2 G5 instance. https://aws.amazon.com/ec2/i nstance-types/g5 . [Online; accessed April-2025].", + "metadata": {} + }, + { + "text": "- [6] Dongqi Cai, Shangguang Wang, Chen Peng, et al. 2024. Recall: Empowering Multimodal Embedding for Edge Devices. arXiv:2409.15342.", + "metadata": {} + }, + { + "text": "- [5] Dmitry Baranchuk and Artem Babenko. 2019. Towards similarity graphs constructed by deep reinforcement learning. arXiv preprint arXiv:1911.12122 (2019).", + "metadata": {} + }, + { + "text": "- [7] Pablo Castro. 2024. Announcing cost-effective RAG at scale with Azure AI Search. https://techcommunity.microsoft.com/blog/azure-aiservices-blog/announcing-cost-effective-rag-at-scale-with-azureai-search/4104961 .", + "metadata": {} + }, + { + "text": "- [9] Davin Choo, Christoph Grunau, Julian Portmann, and V\u00e1clav Rozhon. 2020. k-means++: few more steps yield constant approximation. In International Conference on Machine Learning . PMLR,", + "metadata": {} + }, + { + "text": "1909-1917.", + "metadata": {} + }, + { + "text": "- [8] Qi Chen, Bing Zhao, Haidong Wang, Mingqin Li, Chuanjie Liu, Zengzhong Li, Mao Yang, and Jingdong Wang. 2021. SPANN: Highlyefficient Billion-scale Approximate Nearest Neighbor Search. In", + "metadata": {} + }, + { + "text": "35th Conference on Neural Information Processing Systems (NeurIPS 2021) .", + "metadata": {} + }, + { + "text": "- [10] Together Computer. 2023. RedPajama: An Open Source Recipe to Reproduce LLaMA Training Dataset. https://github.com/togethercom puter/RedPajama-Data . Accessed: May 10, 2025.", + "metadata": {} + }, + { + "text": "- [12] CPU-Monkey. n.d.. Apple M1 Ultra 64-Core GPU. https://www.cpumonkey.com/en/igpu-apple_m1_ultra_64_core . Accessed: 2025-05-10.", + "metadata": {} + }, + { + "text": "- [11] KVCACHE.AI Contributors. 2025. KTransformers: A Flexible Framework for Experiencing Cutting-edge LLM Inference Optimizations. https://github.com/kvcache-ai/ktransformers . Accessed:", + "metadata": {} + }, + { + "text": "2025-05-14.", + "metadata": {} + }, + { + "text": "- [13] Nick Craswell, Bhaskar Mitra, Emine Yilmaz, Daniel Campos, and Jimmy Lin. 2021. Ms marco: Benchmarking ranking models in the large-data regime. In proceedings of the 44th International ACM SIGIR conference", + "metadata": {} + }, + { + "text": "on research and development in information retrieval . 15661576.", + "metadata": {} + }, + { + "text": "- [15] Weihao Cui, Han Zhao, Quan Chen, Hao Wei, Zirui Li, Deze Zeng, Chao Li, and Minyi Guo. 2022. { DVABatch } : Diversity-aware { MultiEntry }{ Multi-Exit", + "metadata": {} + }, + { + "text": "} batching for efficient processing of { DNN } services on { GPUs } . In 2022 USENIX Annual Technical Conference (USENIX ATC 22) . 183-198.", + "metadata": {} + }, + { + "text": "- [14] Nick Craswell, Bhaskar Mitra, Emine Yilmaz, Daniel Campos, and Ellen M Voorhees. 2020. Overview of the TREC 2019 deep learning track. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2003.07820 (2020).", + "metadata": {} + }, + { + "text": "- [16] Matthijs Douze. 2020. Indexing 1T Vectors. https://github.com/faceb ookresearch/faiss/wiki/Indexing-1T-vectors .", + "metadata": {} + }, + { + "text": "- [17] Matthijs Douze, Alexandr Guzhva, Chengqi Deng, Jeff Johnson, Gergely Szilvasy, Pierre-Emmanuel Mazar\u00e9, Maria Lomeli, Lucas Hosseini, and Herv\u00e9 J\u00e9gou.", + "metadata": {} + }, + { + "text": "2025. The Faiss library. arXiv:2401.08281 [cs.LG] https://arxiv.org/abs/2401.08281", + "metadata": {} + }, + { + "text": "- [19] Abhimanyu Dubey, Abhinav Jauhri, Abhinav Pandey, Abhishek Kadian, Ahmad Al-Dahle, Aiesha Letman, Akhil Mathur, Alan Schelten, Amy Yang, Angela Fan, et", + "metadata": {} + }, + { + "text": "al. 2024. The llama 3 herd of models. arXiv preprint arXiv:2407.21783 (2024).", + "metadata": {} + }, + { + "text": "- [18] Matthijs Douze, Alexandre Sablayrolles, and Herv\u00e9 J\u00e9gou. 2018. Link and code: Fast indexing with graphs and compact regression codes. In Proceedings of the IEEE conference on computer vision and pattern recognition .", + "metadata": {} + }, + { + "text": "3646-3654.", + "metadata": {} + }, + { + "text": "- [20] Cong Fu, Changxu Wang, and Deng Cai. 2021. High Dimensional Similarity Search with Satellite System Graph: Efficiency, Scalability, and Unindexed Query Compatibility. arXiv:1907.06146", + "metadata": {} + }, + { + "text": "[cs.IR] https: //arxiv.org/abs/1907.06146", + "metadata": {} + }, + { + "text": "- [22] Jianyang Gao and Cheng Long. 2023. High-Dimensional Approximate Nearest Neighbor Search: with Reliable and Efficient Distance Comparison Operations. Proc. ACM Manag. Data 1, 2, Article 137 (June", + "metadata": {} + }, + { + "text": "2023), 27 pages. https://doi.org/10.1145/3589282", + "metadata": {} + }, + { + "text": "- [21] Cong Fu, Chao Xiang, Changxu Wang, and Deng Cai. 2019. Fast approximate nearest neighbor search with the navigating spreadingout graph. Proc. VLDB Endow. 12, 5 (Jan.", + "metadata": {} + }, + { + "text": "2019), 461-474. https: //doi.org/10.14778/3303753.3303754", + "metadata": {} + }, + { + "text": "- [23] Jianyang Gao and Cheng Long. 2024. RabitQ: Quantizing HighDimensional Vectors with a Theoretical Error Bound for Approximate Nearest Neighbor Search. In Proceedings of the ACM on Management of Data (SIGMOD '24) ,", + "metadata": {} + }, + { + "text": "Vol. 2. Article 167.", + "metadata": {} + }, + { + "text": "- [25] Alexandra Henzinger, Emma Dauterman, Henry Corrigan-Gibbs, and Nickolai Zeldovich. 2023. Private Web Search with Tiptoe. Cryptology ePrint Archive, Paper", + "metadata": {} + }, + { + "text": "2023/1438. https://doi.org/10.1145/3600006.36 13134", + "metadata": {} + }, + { + "text": "- [24] Yanzhang He, Tara N. Sainath, Rohit Prabhavalkar, Ian McGraw, Raziel Alvarez, Ding Zhao, et al. 2019. Streaming End-to-End Speech Recognition for Mobile Devices. In Proc. IEEE", + "metadata": {} + }, + { + "text": "ICASSP . 6381-6385.", + "metadata": {} + }, + { + "text": "- [26] Piotr Indyk and Rajeev Motwani. 1998. Approximate nearest neighbors: towards removing the curse of dimensionality. In Proceedings of the Thirtieth Annual ACM Symposium on Theory of Computing (Dallas, Texas, USA) (STOC", + "metadata": {} + }, + { + "text": "'98) . Association for Computing Machinery, New York, NY, USA, 604-613. https://doi.org/10.1145/276698.276876", + "metadata": {} + }, + { + "text": "- [28] Mandar Joshi, Eunsol Choi, Daniel S Weld, and Luke Zettlemoyer. 2017. Triviaqa: A large scale distantly supervised challenge dataset for reading comprehension. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:1705.03551 (2017).", + "metadata": {} + }, + { + "text": "- [27] Gautier Izacard, Mathilde Caron, Lucas Hosseini, Sebastian Riedel, Piotr Bojanowski, Armand Joulin, and Edouard Grave. 2021. Unsupervised dense information retrieval with contrastive learning.", + "metadata": {} + }, + { + "text": "arXiv preprint arXiv:2112.09118 (2021).", + "metadata": {} + }, + { + "text": "- [29] Herve J\u00e9gou, Matthijs Douze, and Cordelia Schmid. 2011. Product Quantization for Nearest Neighbor Search. IEEE Transactions on Pattern Analysis and Machine Intelligence 33, 1 (2011),", + "metadata": {} + }, + { + "text": "117-128. https://doi.or g/10.1109/TPAMI.2010.57", + "metadata": {} + }, + { + "text": "- [31] Tom Kwiatkowski, Jennimaria Palomaki, Olivia Redfield, Michael Collins, Ankur Parikh, Chris Alberti, Danielle Epstein, Illia Polosukhin, Jacob Devlin, Kenton Lee, Kristina Toutanova, Llion Jones, Matthew", + "metadata": {} + }, + { + "text": "Kelcey, Ming-Wei Chang, Andrew M. Dai, Jakob Uszkoreit, Quoc Le, and Slav Petrov. 2019. Natural Questions: A Benchmark for Question Answering Research. Transactions of the Association for Computational Linguistics 7", + "metadata": {} + }, + { + "text": "(2019), 452-466. https://doi.org/10.1162/tacl_a_00276", + "metadata": {} + }, + { + "text": "- [30] Vladimir Karpukhin, Barlas Oguz, Sewon Min, Patrick SH Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, and Wen-tau Yih. 2020. Dense Passage Retrieval for Open-Domain Question Answering..", + "metadata": {} + }, + { + "text": "In EMNLP (1) . 6769-6781.", + "metadata": {} + }, + { + "text": "- [32] Chanhee Lee, Deeksha Prahlad, Dongha Kim, and Hokeun Kim. 2024. Work-in-Progress: On-device Retrieval Augmented Generation with", + "metadata": {} + }, + { + "text": "- Knowledge Graphs for Personalized Large Language Models. In 2024 International Conference on Embedded Software (EMSOFT) . 1-1. https:", + "metadata": {} + }, + { + "text": "//doi.org/10.1109/EMSOFT60242.2024.00006", + "metadata": {} + }, + { + "text": "- [34] Muyang Li, Yujun Lin, Zhekai Zhang, Tianle Cai, Xiuyu Li, Junxian Guo, Enze Xie, Chenlin Meng, Jun-Yan Zhu, and Song Han. 2024.", + "metadata": {} + }, + { + "text": "Svdqunat: Absorbing outliers by low-rank components for 4-bit diffusion models. arXiv preprint arXiv:2411.05007 (2024).", + "metadata": {} + }, + { + "text": "- [33] Victor Lempitsky. 2012. The inverted multi-index. In Proceedings of the 2012 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (CVPR '12) . IEEE Computer Society, USA,", + "metadata": {} + }, + { + "text": "3069-3076.", + "metadata": {} + }, + { + "text": "- [35] Wen Li, Ying Zhang, Yifang Sun, Wei Wang, Mingjie Li, Wenjie Zhang, and Xuemin Lin. 2019. Approximate nearest neighbor search on high dimensional data-experiments, analyses, and improvement. IEEE Transactions on Knowledge and Data Engineering", + "metadata": {} + }, + { + "text": "32, 8 (2019), 14751488.\n- [37] Jimmy Lin, Rodrigo Nogueira, and Andrew Yates. 2022. Pretrained transformers for text ranking: Bert and beyond . Springer Nature.", + "metadata": {} + }, + { + "text": "- [36] Zehan Li, Xin Zhang, Yanzhao Zhang, Dingkun Long, Pengjun Xie, and Meishan Zhang. 2023. Towards general text embeddings with multistage contrastive learning. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2308.03281 (2023).", + "metadata": {} + }, + { + "text": "- [38] Yu A Malkov and Dmitry A Yashunin. 2018. Efficient and robust approximate nearest neighbor search using hierarchical navigable small world graphs. IEEE transactions on pattern analysis and machine intelligence 42, 4 (2018),", + "metadata": {} + }, + { + "text": "824-836.\n- [40] Microsoft Learn. 2025. Vector index size and staying under limits . https: //learn.microsoft.com/en-us/azure/search/vector-search-indexsize?utm_source=chatgpt.com&tabs=portal-vector-quota", + "metadata": {} + }, + { + "text": "- [39] Magdalen Dobson Manohar, Zheqi Shen, Guy Blelloch, Laxman Dhulipala, Yan Gu, Harsha Vardhan Simhadri, and Yihan Sun. 2024. Parlayann: Scalable", + "metadata": {} + }, + { + "text": "and deterministic parallel graph-based approximate nearest neighbor search algorithms. In Proceedings of the 29th ACM SIGPLAN Annual Symposium on Principles and Practice of Parallel Programming . 270-285.", + "metadata": {} + }, + { + "text": "- [41] Javier Vargas Munoz, Marcos A Gon\u00e7alves, Zanoni Dias, and Ricardo da S Torres. 2019. Hierarchical clustering-based graphs for large scale approximate nearest neighbor search. Pattern Recognition 96 (2019),", + "metadata": {} + }, + { + "text": "106970.\n- [43] NVIDIA. n.d.. NVIDIA A10 Tensor Core GPU. https://www.nvidia.c om/en-us/data-center/products/a10-gpu/ . Accessed: 2025-05-10.", + "metadata": {} + }, + { + "text": "- [42] Blaise Munyampirwa, Vihan Lakshman, and Benjamin Coleman. 2024. Down with the Hierarchy: The'H'in HNSW Stands for\" Hubs\". arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2412.01940 (2024).", + "metadata": {} + }, + { + "text": "- [44] NVIDIA Corporation. 2024. NVIDIA RTX Blackwell GPU Architecture. https://images.nvidia.com/aem-dam/Solutions/geforce/blackwell/nv idia-rtx-blackwell-gpu-architecture.pdf . Whitepaper.", + "metadata": {} + }, + { + "text": "- [46] Yu Pan, Jianxin Sun, and Hongfeng Yu. 2023. LM-DiskANN: Low Memory Footprint in Disk-Native Dynamic Graph-Based ANN Indexing. In 2023 IEEE International Conference on Big Data (BigData) .", + "metadata": {} + }, + { + "text": "5987-5996. https://doi.org/10.1109/BigData59044.2023.10386517", + "metadata": {} + }, + { + "text": "- [45] ObjectBox Ltd. 2024. Edge AI: The era of on-device AI. https://obje ctbox.io/on-device-vector-databases-and-edge-ai/ . Accessed May 2025.", + "metadata": {} + }, + { + "text": "- [47] Pinecone. n.d.. Vector Search: Hierarchical Navigable Small Worlds. https://www.pinecone.io/learn/series/faiss/hnsw/ . Accessed: 2025-05-10.", + "metadata": {} + }, + { + "text": "- [49] Navid Rekabsaz, Oleg Lesota, Markus Schedl, Jon Brassey, and Carsten Eickhoff. 2021. TripClick: the log files of a large health web search engine. In Proceedings of the 44th International", + "metadata": {} + }, + { + "text": "ACM SIGIR Conference on Research and Development in Information Retrieval . 2507-2513.", + "metadata": {} + }, + { + "text": "- [48] David Rein, Betty Li Hou, Asa Cooper Stickland, Jackson Petty, Richard Yuanzhe Pang, Julien Dirani, Julian Michael, and Samuel R Bowman. 2024. Gpqa: A graduate-level google-proof q&a benchmark. In First Conference on", + "metadata": {} + }, + { + "text": "Language Modeling .", + "metadata": {} + }, + { + "text": ", 1 = Humphrey Shi. 2023. Efficient Neural Networks: From Algorithm Design to Practical Mobile Deployments. CVPR 2023 Tutorial. https: //snap-research.github.io/efficient-nn-tutorial/ .. [51], 1 = Jie", + "metadata": {} + }, + { + "text": "Ren, Minjia Zhang, and Dong Li. 2020. HM-ANN: efficient billion- point nearest neighbor search on heterogeneous memory. In Proceed- ings of the 34th International Conference on Neural Information Process- ing Systems (Vancouver, BC, Canada)", + "metadata": {} + }, + { + "text": "(NIPS '20) . Curran Associates Inc., Red Hook, NY, USA, Article 895, 13 pages.. [52], 1 = Facebook AI Research. n.d.. Guidelines to Choose an Index. https:", + "metadata": {} + }, + { + "text": "//github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an- index/28074dc0ddc733f84b06fa4d99b3f6e2ef65613d#if-below-1m-", + "metadata": {} + }, + { + "text": "vectors-ivfx . Accessed: 2025-05-10.. [53], 1 = Michael J. Ryan, Danmei Xu, Chris Nivera, and Daniel Campos. 2024. EnronQA: Towards Personalized RAG over", + "metadata": {} + }, + { + "text": "Private Documents. arXiv preprint arXiv:2505.00263 (2024).. [54], 1 = Christoph Schuhmann, Richard Vencu, Romain Beaumont, Robert Kaczmarczyk, Clayton Mullis,", + "metadata": {} + }, + { + "text": "Aarush Katta, Theo Coombes, Jenia Jitsev, and Aran Komatsuzaki. 2021. Laion-400m: Open dataset of clip- filtered 400 million image-text pairs. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2111.02114 (2021).. [55], 1 = Korakit Seemakhupt, Sihang Liu, and Samira Khan. 2024. EdgeRAG: Online-Indexed RAG for Edge", + "metadata": {} + }, + { + "text": "Devices. arXiv preprint arXiv:2412.21023 (2024).. [56], 1 = Daniel Severo, Giuseppe Ottaviano, Matthew Muckley, Karen Ullrich, and Matthijs Douze.", + "metadata": {} + }, + { + "text": "2025. Lossless Compression of Vector IDs for Approximate Nearest Neighbor Search. arXiv preprint arXiv:2501.10479 (2025).. [57], 1 = Rulin Shao, Jacqueline He, Akari", + "metadata": {} + }, + { + "text": "Asai, Weijia Shi, TimDettmers,Sewon Min, Luke Zettlemoyer, and Pang Wei WKoh. 2024. Scaling retrieval- based language models with a trillion-token datastore. Advances in Neural Information Processing Systems 37 (2024),", + "metadata": {} + }, + { + "text": "91260-91299.. [58], 1 = Michael Shen, Muhammad Umar, Kiwan Maeng, G. Edward Suh, and Udit Gupta. 2024. Towards Understanding Systems Trade-offs in Retrieval-Augmented Generation Model", + "metadata": {} + }, + { + "text": "Inference. arXiv:2412.11854 [cs.AR] https://arxiv.org/abs/2412.11854. [59], 1 = Suhas Jayaram Subramanya, Devvrit, Rohan", + "metadata": {} + }, + { + "text": "Kadekodi, Ravishankar Krishaswamy, and Harsha Vardhan Simhadri. 2019. DiskANN: fast accurate billion-point nearest neighbor search on a single node . Curran Associates Inc., Red Hook, NY, USA.. [60],", + "metadata": {} + }, + { + "text": "1 = Kento Tatsuno, Daisuke Miyashita, Taiga Ikeda, Kiyoshi Ishiyama, Kazunari Sumiyoshi, and Jun Deguchi. 2024. AiSAQ: All-in-Storage ANNS with Product Quantization for", + "metadata": {} + }, + { + "text": "DRAM-free Information Re- trieval. arXiv preprint arXiv:2404.06004 (2024). arXiv:2404.06004", + "metadata": {} + }, + { + "text": "https://arxiv.org/abs/2404.06004. [61], 1 = Bing Tian, Haikun Liu, Yuhang Tang, Shihai Xiao, Zhuohui Duan, Xiaofei Liao, Hai Jin,", + "metadata": {} + }, + { + "text": "Xuecang Zhang, Junhua Zhu, and Yu Zhang. 2025. Towards High-throughput and Low-latency Billion-scale Vector Search via CPU/GPU Collaborative Filtering and Re-ranking. In 23rd USENIX Conference on File and Storage Technologies (FAST", + "metadata": {} + }, + { + "text": "25) . USENIX Association, Santa Clara, CA, 171-185. https://www.usenix.org/con. [62], 1 = ference/fast25/presentation/tian-bing Vincent Totino. 2025. Phone", + "metadata": {} + }, + { + "text": "Storage: How Much Do You Really Need? https://www.optimum.com/articles/mobile/choosing-phone- storage-amount-needs-guide. [63], 1 = Vincent Totino. 2025. Phone Storage: How Much Do You Really Need?", + "metadata": {} + }, + { + "text": "https://www.optimum.com/articles/mobile/choosing-phone- storage-amount-needs-guide Accessed May 15, 2025.. [64], 1 = Mengzhao Wang, Weizhi Xu, Xiaomeng Yi, Songlin Wu, Zhangyang Peng,", + "metadata": {} + }, + { + "text": "Xiangyu Ke, Yunjun Gao, Xiaoliang Xu, Rentong Guo, and Charles Xie. 2024. Starling: AnI/O-Efficient Disk-Resident Graph Index Framework for High-Dimensional Vector Similarity Search on Data Segment. In Proceedings of", + "metadata": {} + }, + { + "text": "the ACM on Management of Data (SIGMOD", + "metadata": {} + }, + { + "text": "- [65] Peng Wang, Chen Wang, Xiaofang Lin, Wenjie Zhang, and Qing He. 2021. A Comprehensive Survey and Experimental Comparison of Graph-Based Approximate Nearest Neighbor Search. Proc. VLDB Endow. 14, 11", + "metadata": {} + }, + { + "text": "(2021), 1964-1978. https://doi.org/10.14778/3476249.347 6258", + "metadata": {} + }, + { + "text": "- [67] Zhenliang Xue, Yixin Song, et al. 2024. PowerInfer-2: Fast Large Language Model Inference on a Smartphone. arXiv preprint arXiv:2406.06282", + "metadata": {} + }, + { + "text": "(2024).", + "metadata": {} + }, + { + "text": "- [66] Zijie J Wang and Duen Horng Chau. 2024. MeMemo: On-device Retrieval Augmentation for Private and Personalized Text Generation. In Proceedings of the 47th International ACM SIGIR Conference on Research and Development in Information Retrieval", + "metadata": {} + }, + { + "text": ". 2765-2770.", + "metadata": {} + }, + { + "text": "- [68] Zhilin Yang, Peng Qi, Saizheng Zhang, Yoshua Bengio, William W Cohen, Ruslan Salakhutdinov, and Christopher D Manning. 2018. HotpotQA: A dataset for diverse, explainable multi-hop question", + "metadata": {} + }, + { + "text": "answering. arXiv preprint arXiv:1809.09600 (2018).", + "metadata": {} + }, + { + "text": "- [70] Weiping Yu, Ningyi Liao, Siqiang Luo, and Junfeng Liu. 2025. RAGDoll: Efficient Offloading-based Online RAG System on a Single GPU. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2504.15302 (2025).", + "metadata": {} + }, + { + "text": "- [69] Hongzhi Yin, Tong Chen, Liang Qu, and Bin Cui. 2024. On-Device Recommender Systems: A Comprehensive Survey. arXiv preprint arXiv:2401.11441", + "metadata": {} + }, + { + "text": "(2024).", + "metadata": {} + }, + { + "text": "- [71] Hamed Zamani, Johanne R Trippas, Jeff Dalton, Filip Radlinski, et al. 2023. Conversational information seeking. Foundations and Trends\u00ae in Information Retrieval 17, 3-4 (2023),", + "metadata": {} + }, + { + "text": "244-456.", + "metadata": {} + }, + { + "text": "- [73] Minjia Zhang, Wenhan Wang, and Yuxiong He. 2020. Learning to Anneal and Prune Proximity Graphs for Similarity Search. In International Conference on Learning Representations (ICLR) . Available at", + "metadata": {} + }, + { + "text": "https://openreview.net/forum?id=HJlXC3EtwB .", + "metadata": {} + }, + { + "text": "- [72] Saber Zerhoudi and Michael Granitzer. 2024. PersonaRAG: Enhancing Retrieval-Augmented Generation Systems with User-Centric Agents. arXiv preprint arXiv:2407.09394", + "metadata": {} + }, + { + "text": "(2024).", + "metadata": {} + }, + { + "text": "- [74] Yanhao Zhang, Pan Pan, Yun Zheng, Kang Zhao, Yingya Zhang, Xiaofeng Ren, and Rong Jin. 2018. Visual search at alibaba. In Proceedings of the 24th ACM SIGKDD international conference on knowledge discovery", + "metadata": {} + }, + { + "text": "& data mining . 993-1001.", + "metadata": {} + }, + { + "text": "- [76] Kan Zhu, Yilong Zhao, Liangyu Zhao, Gefei Zuo, Yile Gu, Dedong Xie, Yufei Gao, Qinyu Xu, Tian Tang, Zihao Ye, et al. 2024.", + "metadata": {} + }, + { + "text": "Nanoflow: Towards optimal large language model serving throughput. arXiv preprint arXiv:2408.12757 (2024).", + "metadata": {} + }, + { + "text": "- [75] Jinhao Zhu, Liana Patel, Matei Zaharia, and Raluca Ada Popa. 2024. Compass: Encrypted Semantic Search with High Accuracy. Cryptology ePrint Archive, Paper 2024/1255.", + "metadata": {} + }, + { + "text": "https://eprint.iacr.org/2024/1255\n- [77] Zilliz AI FAQ. 2025. How much memory overhead is typically introduced by indexes like HNSW or IVF? Accessed May 2025.", + "metadata": {} + }, + { + "text": "Paper #130 (12 pages)", + "metadata": {} + }, + { + "text": "Large language model (LLM) inference workload dominates a wide variety of modern AI applications, ranging from multiturn conversation to document analysis. Balancing fairness and efficiency is critical for managing diverse client workloads with varying prefix patterns. Unfortunately, existing fair scheduling algorithms for LLM serving, such as Virtual Token Counter", + "metadata": {} + }, + { + "text": "(VTC), fail to take prefix caching locality into consideration and thus suffer from poor performance. On the other hand, prefix-aware scheduling algorithms in existing LLM serving frameworks tend to maximize the prefix cache hit rate without considering fair sharing among clients.", + "metadata": {} + }, + { + "text": "This paper introduces the first prefix-aware fair scheduling algorithm, Deficit Longest Prefix Match (DLPM), which can maintain a high degree of prefix locality with a fairness guarantee. We also introduce a novel algorithm, DoubleQ, extending DLPM for distributed setup that can find a balance point among fairness, locality,", + "metadata": {} + }, + { + "text": "and load-balancing. Our extensive evaluation demonstrates the superior performance of DLPM and DoubleQ in ensuring fairness while maintaining high throughput (up to 2.87 \u00d7 higher than VTC) and low per-client (up to 7.18 \u00d7 lower than state-of-the-art distributed LLM serving", + "metadata": {} + }, + { + "text": "system) latency.", + "metadata": {} + }, + { + "text": "Online inference workloads for large language models (LLMs) are rapidly becoming widespread, driven by their general-purpose capabilities and versatility across a wide range of tasks such as search engines [2], coding assistant [12], autonomous agents [30,34,48], and tool calling", + "metadata": {} + }, + { + "text": "[35,39]. The release of OpenAI's o1 model has further highlighted the testtime scaling phenomenon [4,8,32,43], where the allocation of increased computational resources during inference via techniques such as Monte Carlo Tree Search (MCTS)", + "metadata": {} + }, + { + "text": "[37,54], Best-of-N sampling [43] and Self-refine [25], can substantially improve the quality of LLM-generated answers across various tasks. The increasingly complex test-time compute re-", + "metadata": {} + }, + { + "text": "Figure 1: DLPM achieves a new Pareto frontier considering locality and fairness in LLM serving. Q is a hyper-parameter in DLPM, indicating how much we relax the fairness bound of DLPM. Results are obtained in a single A10 GPU.", + "metadata": {} + }, + { + "text": "quirements underscore the growing prominence of inference workloads in the LLM landscape.", + "metadata": {} + }, + { + "text": "Despite the advance in LLM generation quality, efficiently scaling online LLM inference services remains challenging, posing substantial barriers to their broad adoption. On the one hand, service providers need to provide isolation between concurrent tasks to ensure stable and predictable performance for all clients [31]: a client's experience should not be", + "metadata": {} + }, + { + "text": "negatively impacted by a dominant or malicious client. On the other hand, service providers want to maximize system efficiency to improve throughput and reduce cost.", + "metadata": {} + }, + { + "text": "Unfortunately, existing scheduling algorithms [21,41,44, 57] for LLM serving fall short of achieving these dual goals effectively, as shown in Fig. 1. Although fair scheduling algorithms such as Virtual Token Counter (VTC) [41], are workconserving", + "metadata": {} + }, + { + "text": "- ensuring the system is fully utilized as long as there are requests in the system - they are not locality-aware. Locality awareness is essential for enhancing memory and computational efficiency, particularly through mechanisms such as prefix sharing [57]. Reusing the prefix's key-value (KV) tensors across multiple requests allows", + "metadata": {} + }, + { + "text": "multiple requests sharing the same prefix to retain only one copy of the prefix's KV tensors in GPU memory. Moreover, it reduces redundant", + "metadata": {} + }, + { + "text": "computation of the prefix's KV tensors. Conversely, algorithms such as Longest Prefix Match (LPM) [57] enhance the system efficiency by prioritizing prefix locality: reordering the requests to maximize the prefix cache hit rate, yet they fail to guarantee effective isolation among clients - a malicious client", + "metadata": {} + }, + { + "text": "can monopolize shared resources by sending a large volume of requests with long identical prefix, significantly degrading the performance experienced by other clients.", + "metadata": {} + }, + { + "text": "Achieving both fairness and prefix locality in LLM inference scheduling is challenging, as these two goals inherently conflict with each other. Prefix sharing, for instance, may require reordering requests to group those with identical prefixes together. In contrast, fair scheduling algorithms prioritize serving requests in a specific order to ensure isolation and", + "metadata": {} + }, + { + "text": "prevent any single client from dominating resources. This necessary ordering can interfere with the efficiency gains from prefix sharing, as it restricts the flexibility to reorder requests for optimal resource utilization. This challenge is exacerbated in a distributed setting, where the algorithm must decide not only the order in which the requests are dispatched, but", + "metadata": {} + }, + { + "text": "also to which GPU they are dispatched to achieve load balancing and prefix locality. This dual consideration of dispatch order and location significantly complicates achieving efficient and fair resource allocation across multiple GPUs.", + "metadata": {} + }, + { + "text": "In this paper, we introduce the first prefix-aware fair scheduling algorithm Deficit Longest Prefix Match (DLPM) for LLM serving which relaxes the dispatch order required by VTC to better preserve prefix locality while still bounding the allocation fairness. As illustrated in Fig. 1, DLPM can achieve", + "metadata": {} + }, + { + "text": "throughput comparable to that of LPM while maintaining a degree of fairness close to that provided by VTC. We further propose a novel distributed scheduling algorithm Double Quantum (DoubleQ) that builds on top of DLPM to preserve high per-GPU prefix locality with a global fairness guarantee in a distributed setting.", + "metadata": {} + }, + { + "text": "In summary, this paper makes the following contributions:", + "metadata": {} + }, + { + "text": "- \u00b7 We introduce the first prefix-aware fair scheduling algorithm DLPM and its distributed version DoubleQ for LLM serving, which can achieve up to 2 . 87 \u00d7 higher throughput than VTC and up to 7 . 18 \u00d7 lower latency than the state-ofthe-art locality-aware", + "metadata": {} + }, + { + "text": "scheduling algorithm [44,57].", + "metadata": {} + }, + { + "text": "- \u00b7 We provide rigorous theoretical bounds on DLPM and DoubleQ's fairness property, including service bound and latency bound between various types of clients.\n- \u00b7 We conduct extensive evaluations on our proposed algorithms and demonstrate their superiority in achieving high system throughput while preserving fairness guarantees.", + "metadata": {} + }, + { + "text": "In this section, we first briefly introduce the basics of LLM inference, prefix caching, and fairness in LLM serving (\u00a72.1). We then discuss key issues with existing LLM serving scheduling algorithms and the challenges they pose (\u00a72.2).", + "metadata": {} + }, + { + "text": "LLMInference Modern transformer-based LLM inference consists of prefill and decode phases. The prefill phase takes input prompt, computes internal embedding vectors through the attention mechanism [47], and generates the first output token. These embedding vectors are normally stored inside the GPU", + "metadata": {} + }, + { + "text": "memory as the KV cache to avoid recomputation. In the decode phase, new tokens are generated auto-regressively until an End-Of-Sequence (EOS) token is encountered or the pre-defined maximum token length is reached. During each iteration of token generation, the", + "metadata": {} + }, + { + "text": "key-value (KV) cache of all previous tokens will be needed and the key-value tensors of the newly generated token will be appended to the KV cache. Such auto-regressive generation can lead to sub-optimal device utilization and decreased serving throughput [36]. To enhance", + "metadata": {} + }, + { + "text": "GPU utilization, [52] proposed continuous batching . However, limited memory capacity emerged as a critical bottleneck, restricting batch sizes and thus reducing GPU efficiency. To address this issue, [21] developed PagedAttention, which mitigates memory fragmentation inherent in continuous batching", + "metadata": {} + }, + { + "text": "and significantly enhances memory efficiency.", + "metadata": {} + }, + { + "text": "Prefix Caching and Locality To further improve the memory and computation efficiency, SGLang [57] introduced RadixAttention to facilitate the reuse of the KV cache of the shared prefix across multiple different LLM calls. By exploiting the prefix locality, memory usage for", + "metadata": {} + }, + { + "text": "the KV cache is reduced, allowing for larger batch sizes and improved GPU utilization. Additionally, it eliminates redundant computations for the shared KV cache,", + "metadata": {} + }, + { + "text": "This technique is increasingly crucial for emerging multicall LLM workloads such as Tree-of-Thought [51], Skeletonof-thought [29], MCTS [54], and Self-refine [25], where there are substantial opportunities for prefix sharing.", + "metadata": {} + }, + { + "text": "For instance, in a Tree-of-Thought program, all branches originating from the same node share the entire prefix up to the root. As the tree expands, the number of requests sharing the same prefix grows, and as the tree deepens, the length of the shared", + "metadata": {} + }, + { + "text": "prefix increases.", + "metadata": {} + }, + { + "text": "LLMServing Fairness Achieving efficient online LLM inference with Service Level Objective (SLO) guarantees necessitates isolation among different clients [41]. This need arises because clients share the same GPU accelerators and compete for these GPU resources. Without isolation, there is", + "metadata": {} + }, + { + "text": "a risk that one client might monopolize resources, leading to the starvation of others. Moreover, to optimize resource utilization, it is crucial to reallocate unused resources from one client to another rather than merely imposing a rate limit [31] on each client for isolation", + "metadata": {} + }, + { + "text": "purpose. Rate limit simply disallows clients to send requests beyond a certain rate which harms the resource utilization as shown in [41]. Formally, our goal is to achieve the classic max-min fairness [49], where the fair scheduling ensures each client receives at least", + "metadata": {} + }, + { + "text": "1/ n of the resources, with n representing the total number of clients. If", + "metadata": {} + }, + { + "text": "Figure 2: Requests from the same client share prefixes with each other. In LPM locality-aware scheduling, the system schedules the GPUs to process all requests from Client 1 to maximize prefix sharing while starving Client 2. In VTC fair scheduling, the system processes", + "metadata": {} + }, + { + "text": "requests in turn to maximize fairness, while ignoring the prefix sharing opportunity. Our DLPM scheduling achieves the best of two worlds through a novel quantum mechanism (\u00a74) to guarantee locality while not sacrificing fairness.", + "metadata": {} + }, + { + "text": "some clients do not fully utilize their allocated share, these resources can be redistributed to others.", + "metadata": {} + }, + { + "text": "VTC [41] proposes the first fair scheduling algorithm called Virtual Token Counter targeting the continuous batching mechanism in online LLM serving. It tracks the tokens serviced for each client as the virtual counter and prioritizes clients with the lowest counters in each batching iteration. By tracking", + "metadata": {} + }, + { + "text": "token-level resource usage, VTC achieves fair scheduling even when the output length of the request is unknown in advance.", + "metadata": {} + }, + { + "text": "Locality vs. Fairness Achieving both strong fairness and high locality for efficient online LLM serving is inherently challenging, since these two are usually at odds with each other, as illustrated in Fig. 2. On the one hand, locality-aware scheduling (Fig.", + "metadata": {} + }, + { + "text": "2a) reorders requests to group those with similar prefixes - often originating from the same client - to the same GPU to optimize for prefix locality. On the other hand, the VTC fair scheduler (Fig. 2b) adheres to a strict order based on per-client", + "metadata": {} + }, + { + "text": "resource usage counters to dispatch requests, ensuring no client continuously dominates the GPU usage; such an order compromises locality as it intersperses the requests of the same client with requests from other clients. Fig. 1 also demonstrates the vastly different prioritizations of these two techniques, highlighting the", + "metadata": {} + }, + { + "text": "trade-off between fairness and prefix locality.", + "metadata": {} + }, + { + "text": "Locality vs. Load-Balancing The challenge intensifies in distributed settings, where model replicas are served on multiple workers, each managed by its own local scheduler, with a global scheduler coordinating all these local workers. In this scenario, the scheduling algorithm on the global scheduler must balance a", + "metadata": {} + }, + { + "text": "trade-off between locality and load balancing.\nFigure 3: This paper addresses the conflict between fairness and locality through the DLPM mechanism (\u00a74). It further addresses the conflict between locality and load balancing in distributed settings with the DoubleQ mechanism (\u00a75).", + "metadata": {} + }, + { + "text": "For instance, simply distributing requests equally across the cluster is suboptimal due to the high prefix recompute overhead. Similarly, always dispatching requests with the same prefix to a single GPU can lead to workload imbalance.", + "metadata": {} + }, + { + "text": "Design Goals The main goal of this paper is to provide a principled way of navigating the trade-off between strong fairness and high locality in online LLM serving, as well as between locality and load-balancing in distributed settings. Our methodology ensures that the algorithms for single and distributed settings can", + "metadata": {} + }, + { + "text": "be combined to maintain global fairness effectively. In the remainder of the paper, we begin by discussing preliminary concepts related to fairness in LLM serving (\u00a73), then we introduce our fair scheduling design for a single worker (\u00a74), and finally, we expand this approach to distributed fair", + "metadata": {} + }, + { + "text": "scheduling (\u00a75).", + "metadata": {} + }, + { + "text": "In this section, we first formally define the properties a fair scheduling algorithm needs to meet for LLM serving, following those described in VTC [41]. We then discuss the cost function we adopt for service measurement.", + "metadata": {} + }, + { + "text": "Definition 3.1 (Backlog) . Aclient u is backlogged if dispatching additional requests cannot further increase throughput and can only incur additional queueing delay. In distributed settings, depending on the load-balancing policy, a backlogged client may have requests in queues of certain workers or", + "metadata": {} + }, + { + "text": "all workers.", + "metadata": {} + }, + { + "text": "Fairness Properties Similar to VTC, our goal is to achieve approximate max-min fairness [49] on the service received by each client; different from VTC, we also want to preserve prefix cache locality. More formally, an LLM serving system that can achieve approximate max-min fairness should", + "metadata": {} + }, + { + "text": "satisfy the following three properties [41]:", + "metadata": {} + }, + { + "text": "- 1. During any time interval [ t 1 , t 2 ) , if two clients f and g are continuously backlogged, they should receive a similar level of service, i.e. | Wf ( t 1 , t 2 ) -Wg ( t", + "metadata": {} + }, + { + "text": "1 , t 2 ) | \u2264 \u03b4 , where \u03b4 is a constant value independent of t 2 -t 1.\n", + "metadata": {} + }, + { + "text": "Table 1: The upper half includes notations for service measurement. The lower half includes notations for the DLPM and DoubleQ algorithm and their analysis. *The extend tokens are the input tokens excluding prefix tokens.", + "metadata": {} + }, + { + "text": "W f ( t 1 , t 2 ) n e n q w e w q Q u q i Q w q i , w L input L out put M U, Explanation = service received by f during interval [ t 1 , t 2 ) number of processed extend", + "metadata": {} + }, + { + "text": "tokens* number of processed output tokens weight of extend tokens in the cost function weight of output tokens in the cost function. , Explanation = the quantum assigned to each client in DLPM the deficit counter of client i in DLPM. , Explanation = the quantum assigned to each worker in. , Explanation", + "metadata": {} + }, + { + "text": "= DoubleQ the deficit counter of worker w for client i in DoubleQ. , Explanation = maximum number of input tokens in a request. , Explanation = maximum number of output tokens in a request maximum number of tokens that can be fitted in a running batch. , Explanation = maximum number of counter", + "metadata": {} + }, + { + "text": "that a single request can consume w e \u00b7 L input + w q \u00b7 M. , Explanation = data parallelism degrees. D, Explanation = ", + "metadata": {} + }, + { + "text": "- 2. A client f that is continuously backlogged during a time interval should not receive less service than another client g that is not continuously backlogged during the same time interval, i.e. Wg ( t 1 , t 2 ) -Wf ( t 1 ,", + "metadata": {} + }, + { + "text": "t 2 ) \u2264 \u03b4 , where \u03b4 is a constant value.\n- 3. The scheduling policy should be work-conserving: no worker should be idle if there are requests in the queue.", + "metadata": {} + }, + { + "text": "The first property states that a client sending at a high request rate is guaranteed to not receive more than their fair share of service and will not impact other normal-behaved clients. The second property prevents clients from accumulating unused service by first sending at a low request rate and later monopolizing the", + "metadata": {} + }, + { + "text": "system. The third property guarantees that no resources are wasted in order to enforce fairness.", + "metadata": {} + }, + { + "text": "Measurement of Service Another important aspect in designing a fair scheduling algorithm for LLM serving is how the service should be measured. In VTC, the cost function is defined as a weighted sum of the number of input tokens and the number of output tokens. To incorporate the impact of prefix sharing", + "metadata": {} + }, + { + "text": "(i.e., reduced memory and computations), we introduce a slightly different measure. Intuitively, with prefix sharing, the prefix tokens' cost should only be counted once when it is first calculated and stored in the GPU memory. Our prefix-aware version of the cost function is then defined as W (", + "metadata": {} + }, + { + "text": "t 1 , t 2 ) = we \u00b7 ne ( t 1 , t 2 ) + wq \u00b7 nq ( t 1 , t 2 ) . The notations are explained in Tab. 1. Here we and wq are set to be 1", + "metadata": {} + }, + { + "text": "and 2, inspired by OpenAI's pricing for GPT4 1\n1 https://openai.com/api/pricing/", + "metadata": {} + }, + { + "text": "In this section, we present our algorithm DLPM for the single worker in \u00a74.1 and the proved fairness guarantees in \u00a74.2.", + "metadata": {} + }, + { + "text": "In the Longest Prefix Match (LPM) algorithm [57], at each continuous batching step, the scheduler first sorts current requests in the waiting queue based on their matched prefix length and then adds them to the new batch until the memory pool is full. LPM efficiently utilizes memory by", + "metadata": {} + }, + { + "text": "grouping requests that can share a common prefix, thus maximizing the decoding batch size, which in turn leads to better operational intensity and throughput for the decoding phase.", + "metadata": {} + }, + { + "text": "To maintain the cache hit rate while introducing a fairness guarantee, it is essential not to disrupt the LPM order of the requests excessively. To achieve this, we incorporate a quantum mechanism inspired by the deficit round robin (DRR) approach [42]. This mechanism compels the scheduler to", + "metadata": {} + }, + { + "text": "occasionally prioritize requests from less-served clients over those with the longest matching prefixes. Intuitively, this mechanism is effective because it preserves the local ordering inherent to the LPM. As a result, the system continues to benefit significantly from the memory savings brought by the shared prefixes, while", + "metadata": {} + }, + { + "text": "the additional cost of prefix recomputation is incurred only when switching to serve less-served clients. This balanced approach allows DLPM to uphold the core efficiencies of the original LPM algorithm while enhancing fairness across client requests, ensuring that no clients monopolize the batching process to the detriment of others.", + "metadata": {} + }, + { + "text": "The core algorithm of DLPM is presented in Algorithm 1. Initially, the algorithm initializes all clients' deficit counter qi to zero, with Q u representing the service quantum replenished to each client in a cycle. At each continuous batching step, DLPM performs the following steps:", + "metadata": {} + }, + { + "text": "1) It sorts the requests in the waiting queue by their matched prefix length and then tries to add them to the currently running batch ( B ) until the memory pool is full. 2) The request will be added to B if the corresponding client has a positive deficit counter ( qi >", + "metadata": {} + }, + { + "text": "0). Otherwise, the request will be skipped. When all the active clients have q \u2264 0, they will be replenished by Q u at Line 7. 3) After each request is added to B , the corresponding client's deficit counter will deduct the amount of service invoked", + "metadata": {} + }, + { + "text": "by the extend tokens. 4) The new batch B then goes through one model forward step. After each decoding step, the service invoked by the output tokens will be deducted from the client's deficit counter accordingly.", + "metadata": {} + }, + { + "text": "In this section, we provide the theoretical fairness guarantees of DLPM that correspond to the three properties we introduced in \u00a73. The full proofs are provided in Appendix A.1.", + "metadata": {} + }, + { + "text": "- 1: let l denotes the client list 2: let B denotes current running batch 3: function CHECKREFILL( l , Queue ) 4: for all i \u2208 { client ( r ) | r \u2208 Queue } do", + "metadata": {} + }, + { + "text": "5: if qi > 0 then return 6: for all i \u2208 l do 7: if qi \u2264 0 then qi \u2190 qi + Q u 8: end function 9: \u25b7 with monitoring stream: 10:", + "metadata": {} + }, + { + "text": "while True do 11: if new request r from client i arrived then 12: if i / \u2208 l then qi \u2190 0, l \u2190 l + u 13: Queue \u2190 Queue + r 14: \u25b7", + "metadata": {} + }, + { + "text": "with execution stream 1: 15: while True do 16: Queue \u2190 SORTBYPREFIX( Queue ) 17: while not Queue . empty () do 18: for each r \u2208 Queue do 19:", + "metadata": {} + }, + { + "text": "i \u2190 client ( r ) 20: if qi \u2264 0 then CHECKREFILL( l , Queue ) 21: if qi > 0 then 22: if CANADD( r ) then 23: B \u2190", + "metadata": {} + }, + { + "text": "B + r 24: qi \u2190 qi - we \u00b7 extend _ length ( r ) 25: Queue \u2190 Queue - r 26: FORWARDSTEP( B ) 27: qi \u2190 qi - wq \u00b7 |{ r", + "metadata": {} + }, + { + "text": "| client ( r ) = i , r \u2208 B }| 28: B \u2190 filter_finished_requests( B )", + "metadata": {} + }, + { + "text": "Under the DLPM scheme: for any time interval [ t 1 , t 2 ) , if two clients f and g are continuously backlogged. Then the difference in their received service are bounded: | Wf ( t 1 ,", + "metadata": {} + }, + { + "text": "t 2 ) -Wg ( t 1 , t 2 ) | \u2264 2 \u00b7 ( U + Q u ) , where U = we \u00b7 Linput + wq \u00b7 M.", + "metadata": {} + }, + { + "text": "Proof. Let the client with maximum service be f , and the client with minimum service be g . Consider t 1 and t 2.", + "metadata": {} + }, + { + "text": "- \u00b7 At t 2, since both clients f and g are backlogged and are in client list l , both client f and client g have been replenished the same k number of times in Line 7 since t 1. f", + "metadata": {} + }, + { + "text": "and g are backlogged, Line 5 ensures that both clients have negative qi before reaching Line 7 and be replenished.", + "metadata": {} + }, + { + "text": "- \u00b7 Since t 1, client f at t 2 has received service Wf ( t 1 , t 2 ) = qf ( t 1 ) + k \u00b7 Q u -qf ( t 2 ) .", + "metadata": {} + }, + { + "text": "client g at t 2 has received service Wg ( t 1 , t 2 ) = qg ( t 1 ) + k \u00b7 Q u -qg ( t 2 ) .", + "metadata": {} + }, + { + "text": "- \u00b7 | Wf ( t 1 , t 2 ) -Wg ( t 1 , t 2 ) | = | qf ( t 1 ) -qf ( t 2 ) -qg ( t", + "metadata": {} + }, + { + "text": "1 ) + qg ( t 2 ) | \u2264 | qf ( t 1 ) -qf ( t 2 ) | + | qg ( t 2 ) -qg ( t 1 ) | \u2264", + "metadata": {} + }, + { + "text": "2 \u00b7 ( U + Q u ) , according to Theorem A.1.\nTheorem 4.2 ( Service bound between backlogged and", + "metadata": {} + }, + { + "text": "non-backlogged clients ) . Under the DLPM scheme: Client f that is continuously backlogged during time interval [ t 1 , t 2 ) should not receive less service than another client, g, that is not continuously backlogged during", + "metadata": {} + }, + { + "text": "the same time interval, that is Wf ( t 1 , t 2 ) \u2265 Wg ( t 1 , t 2 ) -2 U -2 Q u .", + "metadata": {} + }, + { + "text": "Proof. \u00b7 Consider client f and client g . f is continuously backlogged and g is not continuously backlogged.", + "metadata": {} + }, + { + "text": "- \u00b7 If g is not backlogged during the entire duration from t 1 to t 2, Wg ( t 1 , t 2 ) \u2264 U , with no new request arrival.", + "metadata": {} + }, + { + "text": "- \u00b7 Let client f be replenished k t f at time t in Line 7.", + "metadata": {} + }, + { + "text": "- \u00b7 Since f is continuously backlogged from t 1 to t 2, k t 2 f -k t 1 f \u2265 k t 2 g -k t 1 g . A backlogged client will be replenished", + "metadata": {} + }, + { + "text": "for the same time as another backlogged client, from Theorem 4.1. A non-backlogged client will be replenished less as it is not in the active client list (Line 5).", + "metadata": {} + }, + { + "text": "- \u00b7 Wg ( t 1 , t 2 ) -Wf ( t 1 , t 2 ) = ( qg ( t 1 )+ k t 2 g Q u -qg ( t 2", + "metadata": {} + }, + { + "text": ") -k t 1 g Q u ) -( qf ( t 1 )+ k t 2 f Q u -qf ( t 2 )+ k t 1 f Q u ) \u2264 2 ( U +", + "metadata": {} + }, + { + "text": "Q u ) -Q u \u00b7 ( k t 2 f -k t 1 f -k t 2 g + k t 1 g ) \u2264 2 ( U + Q u ) , since Q u \u00b7 ( k t", + "metadata": {} + }, + { + "text": "2 f -k t 1 f -k t 2 g + k t 1 g ) > 0.", + "metadata": {} + }, + { + "text": "The DLPM algorithm is work-conserving since it only manipulates the dispatch order and does not reject a request if it fits into the running batch.", + "metadata": {} + }, + { + "text": "Theorem 4.1 and Theorem 4.2 reflect the first and second properties introduced in \u00a73. Illustrative examples for Theorem 4.1 can be found in Fig. 8 and Fig. 12 in", + "metadata": {} + }, + { + "text": "\u00a77.1, where within any time interval, the difference of the received service of two continuously backlogged clients is bounded.", + "metadata": {} + }, + { + "text": "In this section, we first present the strawman solution of centralized DLPM for distributed scheduling that ignores the scheduling overhead (\u00a75.1). We then proposed a decentralized DLPM solution that hides this overhead while preserving fairness property (\u00a75.2).", + "metadata": {} + }, + { + "text": "The DLPM algorithm works perfectly when there is no scheduling overhead such that the DLPM scheduler could immediately make decisions based on freshest GPU states. Unfortunately, in real-world distributed scenarios, scheduling overhead happens significantly because of concurrent request handling and synchronization, prefix tree traversing", + "metadata": {} + }, + { + "text": "and maintenance, and more. Recent work has also shown that the CPU scheduling overhead occupies nearly half of the inference time for two popular LLM inference engines [45].", + "metadata": {} + }, + { + "text": "Global-local States Synchronization To enable global DLPM for fair scheduling in distributed setups, we need to synchronize local and global prefix caching information. This", + "metadata": {} + }, + { + "text": "(a) Scheduler Overhead Breakdown. The global queue size is 200. Decode batch size is 25.\n(b) Prefix match overhead w.r.t global queue size.", + "metadata": {} + }, + { + "text": "Figure 4: Global scheduler overhead breakdown w.r.t data parallelism degree and global queue size. The time for one decode step with bs=25 is also reported for reference. Existing serving engines such as vLLM [21] and SGLang", + "metadata": {} + }, + { + "text": "[57] normally perform a continuous batching step after multiple (e.g., 10 in SGLang) decoding steps.", + "metadata": {} + }, + { + "text": "synchronization ensures that the global scheduler can replicate the decision-making process typical of a single worker. Using the token RadixTree from SGLang [57] as an example, to construct an accurate global RadixTree at time t i (assume the last", + "metadata": {} + }, + { + "text": "time the global scheduler dispatches the requests at time t i -1), updates from each worker s are encapsulated as \u2206 Trees , defined as:\n", + "metadata": {} + }, + { + "text": "where N inserted and N evicted are sets of nodes that have been inserted to or evicted from the RadixTree, between the last dispatch time t i -1 and the current time t i . M KV indicates the current available KV cache memory.", + "metadata": {} + }, + { + "text": "Upon sending these updates, the worker enters a blocked state, awaiting new requests from the global scheduler. The global scheduler then updates the RadixTree accordingly and dispatches new requests to the local worker following the DLPM algorithm. Such a synchronous approach guarantees the effectiveness and", + "metadata": {} + }, + { + "text": "correctness of DLPM in the distributed setup; however, it incurs significant overhead due to the need to block workers while awaiting new requests, and the race conditions on the global waiting queue across workers.", + "metadata": {} + }, + { + "text": "Overhead Analysis The global scheduler's overhead primarily stems from synchronization overhead, algorithmic overhead (e.g., the frequent tree-matching overhead for the global waiting queue), and metadata updates overhead. Among these, the metadata updates overhead per worker remains relatively constant as the system", + "metadata": {} + }, + { + "text": "scales. However, the synchronization and algorithmic overhead increase dramatically as the data parallelism degree ( D ) 2 and global queue size increases, as shown in Fig. 4. The prefix matching process (algorithmic overhead) involves matching all incoming requests in", + "metadata": {} + }, + { + "text": "the global waiting queue against each worker's radix tree and sorting them based on prefix length to determine the dispatch order. The \"Prefix Match\" time (blue) increases significantly\n2 Here data parallelism degree refers to the number of model replicas in the distributed settings.", + "metadata": {} + }, + { + "text": "Update Deficit Counter", + "metadata": {} + }, + { + "text": "Figure 5: An overview of the DoubleQ scheduler. The global scheduler tracks the deficit counters for each client per worker to control the 'stickiness' of a client to a worker. The local schedulers maintain the deficit counters for each client to enforce the fair", + "metadata": {} + }, + { + "text": "sharing of the local GPU resources.\nas the global queue size increases (Fig. 4b), which is normally the case when the data parallelism degree grows.", + "metadata": {} + }, + { + "text": "Overall, Fig. 4 demonstrates how synchronization and algorithmic overheads dominate as the data parallelism degree increases, particularly for higher degrees ( D = 8) - they add to around 40% decoding overhead in the demonstrated case. This analysis underscores the", + "metadata": {} + }, + { + "text": "challenges of designing scalable global schedulers to mitigate synchronization and algorithmic bottlenecks as the system scales.", + "metadata": {} + }, + { + "text": "Besides the significant scheduling overhead, the Global DLPM scheduler also requires extensive modification of the local worker to enable local-global information synchronization and the blocking operation to wait for the global scheduler dispatching requests.", + "metadata": {} + }, + { + "text": "To mitigate the global scheduling overhead and tight coupling between the global scheduler and the local worker, we resort to decentralized scheduling: dispatching the requests directly to local workers and queueing them at the local worker instead of the global scheduler. Most of the existing distributed", + "metadata": {} + }, + { + "text": "schedulers for LLM serving (e.g., Preble [44] and SGLang [56]) follow this design.", + "metadata": {} + }, + { + "text": "In such a decentralized design, the local worker can directly run a fair scheduling algorithm (e.g., DLPM); as long as the global scheduler can balance the per-client service on all the local workers, we could achieve global fairness guarantee [3]. Previous works", + "metadata": {} + }, + { + "text": "in CPU scheduling [1] and wireless LANs bandwidth sharing [3] also demonstrate the effectiveness of such design. Therefore, the challenge now becomes how to strike a good trade-off between load balancing and locality.", + "metadata": {} + }, + { + "text": "Double Quantum (DoubleQ) Our key insight is to prioritize", + "metadata": {} + }, + { + "text": "- then", + "metadata": {} + }, + { + "text": "- 1: let sw denotes the current queue size of worker w . 2: W \u2190 GETWORKERS ( ), R \u2190 INITRADIXTREE ( | W | ) 3: function SELECTWORKER( G , i ) 4: Gavail \u2190{ w", + "metadata": {} + }, + { + "text": "| qi , w > 0 } 5: while Gavail == / 0 do 6: for all w \u2208 W do qi , w \u2190 qi , w + Q w 7: Gcand \u2190 G \u2229 Gavail 8: if", + "metadata": {} + }, + { + "text": "Gcand == / 0 then return argmin w \u2208 Gavail sw return argmin w \u2208 Gcand sw 9: end function 10: \u25b7 with concurrent stream 1: 11: while True do 12: if new request", + "metadata": {} + }, + { + "text": "r from client i arrived then 13: G \u2190 R.LONGESTMATCHWORKERS ( r ) 14: w \u2190 SELECTWORKER( G , client ( r ) ) 15: DISPATCH( w , r ) 16: qi , w", + "metadata": {} + }, + { + "text": "\u2190 qi , w -we \u00b7 r . input_tokens 17: sw \u2190 sw + 1 18: R.INSERT( r .input_tokens, w ) 19: \u25b7 with concurrent stream 2: 20: while True do", + "metadata": {} + }, + { + "text": "21: if request r from client i has finished at worker w 22: qi , w \u2190 qi , w -wq \u00b7 r .output_tokens 23: sw \u2190 sw -1 24: \u25b7 with concurrent stream 3:", + "metadata": {} + }, + { + "text": "25: while True do 26: if prefix P has been evicted at worker w then 27: R.EVICT( P , w )", + "metadata": {} + }, + { + "text": "locality first until certain limits are met: we use the quantum mechanism again to avoid a client becoming too sticky to a single worker due to the prefix cache locality by assigning quantum to each worker for each client. As demonstrated in Fig. 5 and Algorithm 2, for each", + "metadata": {} + }, + { + "text": "new request, the global scheduler first matches it with the global radix tree and get the workers G that have its longest-matched prefix (Line 13). Then in the SELECTWORKER function (Line 3), if any wokers in G has deficit counter larger than", + "metadata": {} + }, + { + "text": "0 ( Gavail ), the worker with minimum queue size in G \u2229 Gavail will be chosen. Otherwise, the worker with minimum queue size in Gavail will be selected. After each request is dispatched, the request's input tokens will be inserted into the global radix tree and", + "metadata": {} + }, + { + "text": "the corresponding deficit counter will be updated (Line 17). The global scheduler will periodically update corresponding deficit counter when there are requests finished (Line 23) as well as prune the global radix tree with collected local workers' eviction information (Line 27). Note that", + "metadata": {} + }, + { + "text": "unlike the centralized DLPM where the eviction information needed to be passed to the global scheduler synchronously, in DoubleQ this happens asynchronously with negligible overhead.", + "metadata": {} + }, + { + "text": "We note that our DoubleQ scheduling (with local workers running DLPM) 3 provides global fairness guarantees corresponding to the properties introduced in \u00a73 through the following theorems.", + "metadata": {} + }, + { + "text": "At any time interval [ t 1 , t 2 ) , max iWi ( t 1 , t 2 ) -min iWi ( t 1 , t 2 ) \u2264 2 \u00b7 | W | \u00b7 ( U", + "metadata": {} + }, + { + "text": "+ Q u ) . The difference between the maximum service among all backlogged clients and the minimum service among all backlogged clients is bounded by 2 \u00b7 | W | \u00b7 ( U + Q u ) , where | W | is the number", + "metadata": {} + }, + { + "text": "of workers.", + "metadata": {} + }, + { + "text": "Theorem 5.2 ( Service bound between backlogged and non-backlogged clients ) . Consider any execution of the DoubleQ scheme. Client f that is continuously backlogged during time interval [ t 1 , t 2 ) should not", + "metadata": {} + }, + { + "text": "receive less service than another client, g, that is not continuously backlogged during the same time interval, where Wg ( t 1 , t 2 ) -Wf ( t 1 , t 2 ) \u2264 2 \u00b7", + "metadata": {} + }, + { + "text": "( U + Q u ) \u00b7 | W | .\nSince there are no requests rejected to enforce fairness, DoubleQ scheduling is work-conserving.", + "metadata": {} + }, + { + "text": "Implementation We implement our DLPM and DoubleQ schedulers with 1000 LoC in Python on top of SGLang [57], a fast industry-standard LLM inference system.", + "metadata": {} + }, + { + "text": "Models and Hardware Our evaluation is conducted on the widely-used model Llama-3.1-8B and Llama-3.2-3BInstruct [10]. Other transformer-based LLMs such as Qwen [50], DeepSeek [7], and Mistral", + "metadata": {} + }, + { + "text": "[18] share a similar backbone architecture and are also compatible with our system. For hardware, we test on NVIDIA A100 80GB and A10G GPUs.\n\nTable 2: Workload configurations.", + "metadata": {} + }, + { + "text": "Long-context QA, Dataset = LooGLE [23]. Long-context QA, Avg Prefix Len. = 21449. Long-context QA, Avg Output Len. = 15. Tree of Thoughts, Dataset = GSM8K [6]. Tree of Thoughts, Avg", + "metadata": {} + }, + { + "text": "Prefix Len. = 546. Tree of Thoughts, Avg Output Len. = 256. LLM-as-a-Judge, Dataset = Synthetic articles [57]. LLM-as-a-Judge, Avg Prefix Len. = 2701.", + "metadata": {} + }, + { + "text": "LLM-as-a-Judge, Avg Output Len. = 256. Real multi-turn, Dataset = Chatbot Arena [56]. Real multi-turn, Avg Prefix Len. = 56. Real multi-turn, Avg Output Len. = 142", + "metadata": {} + }, + { + "text": "Workloads and Datasets We evaluate the efficiency and effectiveness of the schedulers on 4 diverse LLM-based workloads, each characterized by its unique execution graph structures (Fig. 6) and variations in prefix and output length distributions. as detailed in Tab. 2. Specifically, we", + "metadata": {} + }, + { + "text": "evaluate long document understanding using the LooGLE [23] dataset. We implement the Tree-of-Thought [51] program for solving GSM8K [6] problems (with a tree height of 4), and the", + "metadata": {} + }, + { + "text": "3 Generally, in DoubleQ, the local worker can run any other fair scheduling algorithms such as VTC. In this paper, DoubleQ specifically refers to the implementation using DLPM at the local workers.", + "metadata": {} + }, + { + "text": "LLM-as-a-Judge [57] program, which utilizes the branchsolve-merge technique to evaluate synthetic articles. We also conduct experiments on real-world multi-turn conversation traces from Chatbot Arena [56].\n(a) Long-Context QA\n(b) LLM-as-a-Judge", + "metadata": {} + }, + { + "text": "(c) Tree of Thoughts\n(d) Multi-Turn Chat\nFigure 6: Illustration of the execution graphs of different workloads in our benchmark.", + "metadata": {} + }, + { + "text": "Synthetic Traces For Long-context QA, Tree-of-Thoughts, and LLM-as-a-Judge, we generate synthetic client request traces following the Gamma process, as done in [24,40,41], with the request rate increasing as the number of GPUs scales.", + "metadata": {} + }, + { + "text": "For these three workloads, we evaluate two distinct types of misbehaving patterns, as detailed in Tab. 3. The first type (S1) involves a misbehaving client sending more requests than well-behaved clients. Specifically, although all clients send programs at the same request", + "metadata": {} + }, + { + "text": "rate, the misbehaving client submits programs with a more complex execution graph (e.g., more branches in Tree-of-thought). The second type (S2) features a misbehaving client sending programs with the same structural complexity and at the same request rate as wellbehaved clients,", + "metadata": {} + }, + { + "text": "but with the input altered to increase the prefix length. These workloads are evaluated with the Llama3.1-8B model served on NVIDIA A100 GPUs. The related results are reported in \u00a76.2.\n", + "metadata": {} + }, + { + "text": "Table 3: Synthetic Workload Configurations. /thumbs_down_alt stands for misbehaving client and /thumbs_up_alt denotes well-behaved clients.", + "metadata": {} + }, + { + "text": "S1: More Requests Long-context QA Tree-of-thought LLM-as-Judge, Detailed Behavior = /thumbs_down_alt : Higher req rate /thumbs_down_alt : Trees of 4 branches (340 req per tree) /thumbs_up_alt : Trees of 2 branches", + "metadata": {} + }, + { + "text": "(30 req per tree) /thumbs_down_alt : Evaluation with 16 dimensions /thumbs_up_alt : Evaluation with 2 dimensions", + "metadata": {} + }, + { + "text": "Real-world Traces For real-world multi-turn conversation, we re-scale the request time stamps provided in the dataset 4 and aggregate multiple clients' requests to closely mimic highdemand scenarios. This workload is evaluated with the Llama-", + "metadata": {} + }, + { + "text": "4 https://huggingface.co/datasets/lmsys/chatbot_arena_ conversations\n3.2-3B-Instruct model served on NVIDIA A10G GPUs. The related results are reported in \u00a76.3.", + "metadata": {} + }, + { + "text": "Baselines We compare DLPM and DoubleQ with three baseline scheduling algorithms.\n- \u00b7 DoubleQ : The local worker adopts DLPM, and the global scheduler runs the DoubleQ algorithm when Data Parallelism Degree D > 1.", + "metadata": {} + }, + { + "text": "- \u00b7 RR + LPM : The local scheduler runs LPM, and the global scheduler uses the round-robin (RR) algorithm when D > 1. It is the default distributed scheduling algorithm in SGLang [57] without fairness guarantees.", + "metadata": {} + }, + { + "text": "- \u00b7 Preble [44]: Preble is a state-of-the-art distributed LLM serving system that aims to provide high serving throughput by balancing load distribution and locality, yet without fairness guarantee. Specifically, it dispatches requests based on a pre-defined prefix-matching ratio to decide whether to", + "metadata": {} + }, + { + "text": "explore a new GPU or exploit locality.", + "metadata": {} + }, + { + "text": "- \u00b7 VTC : The local scheduler runs VTC [41], and the global scheduler applies a per-client round-robin strategy when D > 1. Extending VTC with round-robin scheduling is the straightforward approach to ensuring fairness in distributed settings, with fairness bound proven in Appendix", + "metadata": {} + }, + { + "text": "A.3.\nMetrics To measure the system efficiency and fairness achieved by different scheduling algorithms, we use the following three metrics:", + "metadata": {} + }, + { + "text": "- \u00b7 Service Rate : We measure the clients' service as a weighted sum of the number of input tokens and the number of output tokens, following VTC [41] 5 . As discussed in \u00a73, the weight for input token is 1 and the weight for output token is", + "metadata": {} + }, + { + "text": "2.\n- \u00b7 Jain's Fairness Index [17] is a widely-used metric for evaluating the fairness of resource allocation in networked systems [22]. The index is mathematically defined as:\n", + "metadata": {} + }, + { + "text": "where xi represents the allocation for the i th client, and n is the total number of clients. The value of J ranges from 1 n (minimum fairness, when one client monopolizes all resources) to 1 (maximum fairness, when resources are equally distributed). In our context, we", + "metadata": {} + }, + { + "text": "compute the Jain's Fairness Index by letting xi denote the service rate of client i . The calculation is based on the time interval during which all clients are active, ensuring an accurate representation of fairness across the system.", + "metadata": {} + }, + { + "text": "- \u00b7 P50 and P99 Latency : We assess the scheduler's effectiveness in maintaining service quality for well-behaved clients by measuring their P50 and P99 latency. We measure latency using the end-to-end completion time for program evaluation. We use the TTFT", + "metadata": {} + }, + { + "text": "(Time to First Token) latencyc 6 metric for long-context QA tasks.\n5 Note that this service rate is from clients' perspective. From the system's perspective, the actual service is measured by the cost function using the number of extend tokens.", + "metadata": {} + }, + { + "text": "6 For QA tasks, a shorter TTFT contributes to improved client experiences.", + "metadata": {} + }, + { + "text": "Figure 7: Summary of results across three datasets and two types of misbehaving clients on up to 8 A100 GPUs (8B model). The reported latency represents the average latency for well-behaved clients. The data point for S2@Tree of Thoughts with D", + "metadata": {} + }, + { + "text": "= 8 is omitted, as it takes too long to complete.", + "metadata": {} + }, + { + "text": "We present all three metrics across three workloads and two types of misbehaving clients in Fig. 7. Both VTC and DoubleQ provide theoretical fairness guarantees, whereas Preble and RR + LPM do not. The data point for Preble with D =", + "metadata": {} + }, + { + "text": "1 is omitted because Preble is designed as a multi-GPU cacheaware prompt dispatch system.", + "metadata": {} + }, + { + "text": "compared to D = 4 can be attributed to the complex sharing patterns inherent in Tree of Thoughts. Round Robin fails to preserve locality among GPUs, leading to a significant drop in cache hit rate (i.e., from 95% to 50%). This limitation", + "metadata": {} + }, + { + "text": "indicates that RR + LPM does not scale effectively when clients submit complex LLM programs.", + "metadata": {} + }, + { + "text": "Throughput Analysis As previously discussed, ensuring fairness inherently competes with maximizing throughput. However, DoubleQ's effective global cache-aware scheduler and DLPM enable significant performance gains, achieving up to a 2.87 \u00d7 improvement compared to the only other fair algorithm,", + "metadata": {} + }, + { + "text": "VTC.\nDoubleQ achieves better throughput than RR + LPM, with improvements of up to 2.22 \u00d7 . In the case of S2@Tree of Thoughts, the poor performance of RR + LPM with D = 8", + "metadata": {} + }, + { + "text": "Compared to Preble, DoubleQ consistently matches or exceeds its performance across all workloads and GPU configurations, demonstrating its ability to sustain high throughput while ensuring fairness. An exception arises for S2@Longcontext QA with D = 8, where Preble outperforms", + "metadata": {} + }, + { + "text": "DoubleQ in throughput. This discrepancy occurs because DoubleQ sacrifices some locality to maintain fairness, resulting in increased prefix recompute overhead. As indicated in Tab. 2, the LooGLE dataset features an exceptionally high prefix lengthto-output length ratio. In this case, the", + "metadata": {} + }, + { + "text": "cost of recomputing long documents becomes substantial, with the prefill stage", + "metadata": {} + }, + { + "text": "significantly dominating the generation time. Consequently, the Long-context QA workload serves as a worst-case scenario that adversely impacts DoubleQ's throughput. However, when the prefix length-to-output length ratio falls within a reasonable range, the DoubleQ algorithm consistently matches and even slightly surpasses", + "metadata": {} + }, + { + "text": "the performance of state-of-the-art non-fair scheduling algorithms. This is achieved through the careful management of load balance and locality trade-offs in the global scheduler, as well as locality and fairness trade-offs in the local scheduler.", + "metadata": {} + }, + { + "text": "Jain's Fairness Index Analysis From the second column in Fig. 7, it is clear that DoubleQ consistently outperforms both Preble and RR + LPM. This is because DoubleQ provides strict fairness guarantees. However, it is slightly less fair than", + "metadata": {} + }, + { + "text": "VTC, as DoubleQ relaxes the fairness bounds to improve locality, which leads to higher throughput but slightly worse fairness control. Preble performs slightly better than RR + LPM due to its multi-level priority wait queue, which avoids starvation but cannot provide isolation and strict fairness", + "metadata": {} + }, + { + "text": "guarantee. As a result, there remains a notable gap between Preble and DoubleQ.", + "metadata": {} + }, + { + "text": "Well-behaved Clients' Latency Analysis We use the average P50 and P99 latency of well-behaved clients to evaluate the experience of well-behaved clients when a misbehaving client is present. Algorithms focusing on high system efficiency might inadvertently increase", + "metadata": {} + }, + { + "text": "latency for well-behaved clients as these schedulers may prioritize the requests from the misbehaving clients to optimize the prefix cache hit rate. Preble and RR + LPM, therefore, can result in up to 7 . 18 \u00d7 and 9", + "metadata": {} + }, + { + "text": ". 55 \u00d7 higher latency, respectively, compared to DoubleQ. On average, DoubleQ achieves 2 . 90 \u00d7 and 4 . 06 \u00d7 lower latency than Preble and RR + LPM. On the other hand, algorithms that focus", + "metadata": {} + }, + { + "text": "solely on fairness will also incur high latency for well-behaved clients due to reduced overall system efficiency. For instance, VTC can lead to latency up to 7 . 96 \u00d7 higher than DoubleQ, with an average latency increase of 2 .", + "metadata": {} + }, + { + "text": "98 \u00d7 .", + "metadata": {} + }, + { + "text": "Figure 8 demonstrates the fairness and performance comparison of different schedulers on the real-world multi-turn conversation workload. In this workload, clients 2 and 3 initially send excessive number of requests, and then return to normal midway. A fair scheduler should prevent these two clients", + "metadata": {} + }, + { + "text": "from impacting other clients. Due to LPM's prioritization strategy, which favors requests with longer prefix matches, Clients 2 and 3 receive a disproportionately large share of resources. As a result, Clients 0 and 1 suffer from high response times and reduced", + "metadata": {} + }, + { + "text": "throughput. In contrast, VTC achieves relatively low response times and maintains high throughput for Clients 0 and 1. However, such strict fair allocation comes at the expense of Clients 2 and 3, who endure substantial response delays, reaching up to", + "metadata": {} + }, + { + "text": "80 seconds.\nDLPM achieves a more reasonable distribution of re-", + "metadata": {} + }, + { + "text": "Figure 8: Fairness and performance visualization for the real-world multi-turn conversation workload ( D = 2). Clients 2 and 3 send requests at a much higher rate than Clients 0 and 1.", + "metadata": {} + }, + { + "text": "sources, protecting well-behaved clients from the disruptive effects of high request rates by the misbehaving clients. DLPM ensures consistently low response time and high throughput for both well-behaved and previously misbehaving clients. Thus, DLPM not only mitigates", + "metadata": {} + }, + { + "text": "the impact of malicious usage patterns but also improves overall system performance and fairness compared to the baseline approaches.", + "metadata": {} + }, + { + "text": "We visualize the response time and the services provided by the server to different clients over time in Fig. 9. The experiments use 4 A10G GPUs as the testbed, with all clients sending Tree-of-Thought programs at the same rate and with a consistent", + "metadata": {} + }, + { + "text": "branch count of 3. However, client 0 is misbehaving by sending a longer prefix, i.e. 10 \u00d7 longer than well-behaved clients. The maximum value on the x-axis represents the end-to-end completion time of all programs. As", + "metadata": {} + }, + { + "text": "observed, DoubleQ achieves the shortest execution time, demonstrating up to 2 \u00d7 speedup compared to VTC and Preble.", + "metadata": {} + }, + { + "text": "From the first row of the figure, we observe that DoubleQ consistently maintains lower response times compared to VTC as it preserves a higher degree of locality, which enhances overall system efficiency. Furthermore, it avoids the excessively high response time caused by schedulers like RR + LPM", + "metadata": {} + }, + { + "text": "and Preble, which lack fairness control. These schedulers tend to prioritize serving client 0, resulting in substantial delays for other clients. For instance, as shown in the figure, the service received by clients 1 and 2 between 100s and", + "metadata": {} + }, + { + "text": "700s is almost zero for Preble, causing a queuing latency of up to 600 seconds.", + "metadata": {} + }, + { + "text": "The second and third rows depict the actual service and the service received by each client, respectively. As shown in the second row of Fig. 9, both VTC and DoubleQ achieve an ideal sharing of resources across the 4 GPUs in terms of actual service. In", + "metadata": {} + }, + { + "text": "the third row, we can observe that the", + "metadata": {} + }, + { + "text": "Figure 9: Fairness and performance visualization of different schedulers on Tree-of-Thought workloads with D = 4 (3B model + 4 A10G GPUs). The maximum value on the X-axis represents the end-to-end completion time for each", + "metadata": {} + }, + { + "text": "scheduler. The actual service is calculated using the cost function defined in \u00a73, which is a weighted sum of the number of extend tokens and the number of output tokens.", + "metadata": {} + }, + { + "text": "service rate of client 0 is higher than clients 1 and 2 - this is because client 0 has longer prefix sharing and thus lower cost per token. However, due to the relatively low cache hit rate of VTC, it experiences worse end-to-end performance.", + "metadata": {} + }, + { + "text": "In contrast, the other two algorithms demonstrate significant unfairness in resource allocation across clients.", + "metadata": {} + }, + { + "text": "A key highlight here is the extremely low throughput observed with Preble. Preble prioritizes dispatching requests to the GPU with the longest prefix-matching length, provided the matching length exceeds a predefined threshold. Between 300 and 600 seconds, client", + "metadata": {} + }, + { + "text": "0's requests are continuously dispatched to a single GPU as the prefix-matching ratio will always exceed the pre-defined threshold. Some requests from clients 1 and 2 get queued at this monopolized GPU, which blocks these clients from generating new requests (i.e.,", + "metadata": {} + }, + { + "text": "\"deeper\" thoughts), due to the inherent LLM call dependencies in the Tree-of-thought programs. This results in severe workload imbalance among the GPUs, with the cluster at merely 1/4 of its potential computational capacity.", + "metadata": {} + }, + { + "text": "We now examine the trade-off between locality and fairness using Q u and Q w . The impact of Q u is illustrated in Fig. 1, where increasing Q u enhances throughput but compromises fairness control. By adjusting the value of Q", + "metadata": {} + }, + { + "text": "u , the server can achieve a tailored trade-off between performance and fairness, defining a new Pareto frontier compared to VTC and LPM.", + "metadata": {} + }, + { + "text": "Fig. 10 illustrates the impact of Q w on throughput in DoubleQ. To recap, Q w represents the quantum of service assigned to each worker in DoubleQ, where a larger Q w typically implies a better locality for requests", + "metadata": {} + }, + { + "text": "within a client. As shown in\n(a) Throughput of Tree-ofThoughts with one misbehaving client (b) Throughput of Tree-ofThoughts with all well-behaved clients", + "metadata": {} + }, + { + "text": "Figure 10: Impact of Q w on throughput under different workloads ( D = 4). The solid line represents throughput, while the dashed line represents Jain's Index. The fairness index in (b) is omitted as it", + "metadata": {} + }, + { + "text": "consistently equals 1.", + "metadata": {} + }, + { + "text": "Fig. 10, as Q w increases, the throughput of DoubleQ also increases, eventually stabilizing and surpassing all other schedulers. The low throughput of Preble, as seen in Fig. 10a,", + "metadata": {} + }, + { + "text": "has been explained earlier in \u00a77.1.", + "metadata": {} + }, + { + "text": "Although Q w is not explicitly included in the fairness bound of DoubleQ as demonstrated in Appendix A.2, it does slightly affect Jain's Fairness Index. Specifically, the index decreases from 0.855 to", + "metadata": {} + }, + { + "text": "0.83 when Q w increases from 2000 to 40000, due to the more unbalanced dispatching of requests within a client 7 .", + "metadata": {} + }, + { + "text": "We assess DLPM's performance as we increase the number of clients from 5 to 50, using a single A10 GPU as the testbed, while maintaining a constant total request rate. As depicted in Fig. 11, DLPM consistently achieves a", + "metadata": {} + }, + { + "text": "service rate comparable to LPM, even as the number of clients increases, whereas VTC consistently underperforms.\nFigure 11: Service rate w.r.t the number of clients on a single A10 GPU (3B model).", + "metadata": {} + }, + { + "text": "Note that as the number of clients rises, the number of distinct prefixes in the same volume of requests increases, which marginally reduces the cache hit rate for both DLPM and LPM, leading to a slight decrease in service rate as the number of clients increases.", + "metadata": {} + }, + { + "text": "7 When Q w is set to infinity, the algorithm is reduced to be similar as Preble, which lacks fairness guarantees since the difference in load across workers becomes unbounded, as proven in Theorem A.5", + "metadata": {} + }, + { + "text": "In contrast, VTC's performance is less affected since its cache hit rate is consistently low regardless of the number of clients.", + "metadata": {} + }, + { + "text": "As a complement to the single-workload scenario discussed earlier, we now explore a more realistic setting where clients handle diverse workloads. As shown in Fig. 12, DLPM consistently achieves better response time and end-to-end execution times compared to the other schedulers. In", + "metadata": {} + }, + { + "text": "the LPM scheduler, clients sending Tree-of-Thoughts programs act as misbehaving clients, significantly increasing the response time for other clients. From the second row, we observe that VTC exhibits better fairness control than DLPM, as it provides more evenly distributed actual service across", + "metadata": {} + }, + { + "text": "clients. This demonstrates that DLPM sacrifices some degree of fairness to achieve higher throughput.", + "metadata": {} + }, + { + "text": "Figure 12: Mix of workloads among four clients: two engage in multi-turn conversations, while the other two send different programs, all within a single-GPU setup (3B model + an A10G GPU).", + "metadata": {} + }, + { + "text": "Fairness in ML Workloads ML training workloads have extensively studied the fairness problems in shared clusters [5, 26, 27, 38]. Due to their unique characteristics such as long running time, placement sensitivity, and statistical efficiency (i.e., the amount of progress per", + "metadata": {} + }, + { + "text": "unit of data consumed), traditional fair scheduling for big data workloads [15,16] does not work well. To handle the long-running and placementsensitive natures of ML training workloads, Themsis [26] proposes new finish-time fairness metrics, and leverages", + "metadata": {} + }, + { + "text": "multiround partial allocation auctions to provide Pareto-efficient and envy-free resource allocations. To consider statistical efficiency for higher cluster-wide resource utilization, Pollux [38] introduces goodput-driven cluster scheduling by jointly optimizing resource allocations and job batch sizes. On the other hand, prior work VTC and", + "metadata": {} + }, + { + "text": "our work focus on the LLM inference-time fairness. Compared to VTC, our work co-optimizes both fairness and prefix sharing for higher performance without losing fairness.", + "metadata": {} + }, + { + "text": "Fairness in Other Workloads Fairness is a long-existing topic in networking and operating systems. For example, networking needs to guarantee fairness among different switching ports [42] and during link bandwidth allocation [9, 13, 14,19,33]; OS scheduling needs", + "metadata": {} + }, + { + "text": "to guarantee fair CPU time share among different processes [20, 46], and fair memory allocations [28]. Fairness is also extensively studied in big data workload scheduling with prominent prior work of Delay Scheduling [53] and Dominant Resource Fairness [11]. Our fair", + "metadata": {} + }, + { + "text": "scheduling design is inspired by many prior work such as Deficit Round Robin [42] and Delay Scheduling [53]; but differently, we explicitly optimize for the prefix sharing property in LLM inference workloads while guaranteeing fairness.", + "metadata": {} + }, + { + "text": "Locality in LLM Inference Previous advances in LLM inference focus on batching and memory optimization [21,52]. SGLang further exploits locality in scheduling to improve LLM inference performance for emerging applications such as multi-turn chatting [57]. It leverages the LPM scheduling with", + "metadata": {} + }, + { + "text": "RadixTree to save GPU memory and avoid redundant computations through prefix sharing. Preble [44] further extends LPM into distributed settings to jointly optimize load balancing and prefix caching locality for high throughput. BlendServe [55] co-optimizes GPU resource overlapping and prefix sharing for offline", + "metadata": {} + }, + { + "text": "LLM inference, achieving nearly optimal inference throughput. Unlike the above work which only focuses on inference throughput, our work presents a principled way of navigating the trade-off between performance and fairness in multi-client scenarios.", + "metadata": {} + }, + { + "text": "This paper introduces the first prefix-aware fair scheduling algorithm for LLM serving, namely, DLPM. We also propose an extension of the algorithm, DoubleQ, to preserve locality with global fairness guarantee in a distributed setup. Our algorithm achieves up to 2.87 \u00d7 higher throughput than", + "metadata": {} + }, + { + "text": "stateof-the-art fair scheduling algorithms in LLM like VTC, and 7.18 \u00d7 lower latency for victim clients compared to localityaware scheduling algorithms like Preble.", + "metadata": {} + }, + { + "text": "- [1] Linux 2.6.23. Completely fair scheduler. https://docs.kernel.org/scheduler/ sched-design-CFS.html .\n- [2] Perplexity AI. Perplexity: Conversational Search Assistant. https://www.perplexity.ai .", + "metadata": {} + }, + { + "text": "- [3] Yigal Bejerano, Seung-Jae Han, and Li Li. Fairness and load balancing in wireless lans using association control. In Proceedings of the 10th annual international conference on Mobile computing and networking , pages 315-329,", + "metadata": {} + }, + { + "text": "2004.\n- [4] Bradley Brown, Jordan Juravsky, Ryan Ehrlich, Ronald Clark, Quoc V Le, Christopher R\u00e9, and Azalia Mirhoseini. Large language monkeys: Scaling inference compute with repeated sampling. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2407.21787 , 2024.", + "metadata": {} + }, + { + "text": "- [5] Shubham Chaudhary, Ramachandran Ramjee, Muthian Sivathanu, Nipun Kwatra, and Srinidhi Viswanatha. Balancing efficiency and fairness in heterogeneous gpu clusters for deep learning. In Proceedings of the Fifteenth European", + "metadata": {} + }, + { + "text": "Conference on Computer Systems , pages 116, 2020.", + "metadata": {} + }, + { + "text": "- [6] Karl Cobbe, Vineet Kosaraju, Mohammad Bavarian, Mark Chen, Heewoo Jun, Lukasz Kaiser, Matthias Plappert, Jerry Tworek, Jacob Hilton, Reiichiro Nakano, et al. Training verifiers to solve math word problems.", + "metadata": {} + }, + { + "text": "arXiv preprint arXiv:2110.14168 , 2021.", + "metadata": {} + }, + { + "text": "- [7] Damai Dai, Chengqi Deng, Chenggang Zhao, R. X. Xu, Huazuo Gao, Deli Chen, Jiashi Li, Wangding Zeng, Xingkai Yu, Y. Wu, Zhenda Xie, Y. K. Li,", + "metadata": {} + }, + { + "text": "Panpan Huang, Fuli Luo, Chong Ruan, Zhifang Sui, and Wenfeng Liang. Deepseekmoe: Towards ultimate expert specialization in mixture-of-experts language models. CoRR , abs/2401.06066,", + "metadata": {} + }, + { + "text": "2024.\n- [8] DeepSeek. Deepseek-r1-lite-preview release. https: //api-docs.deepseek.com/news/news1120 , 2024. Accessed: 2024-11-20.", + "metadata": {} + }, + { + "text": "- [9] Alan J. Demers, Srinivasan Keshav, and Scott Shenker. Analysis and simulation of a fair queueing algorithm. In Lawrence H. Landweber, editor, ACM Symposium on Communications Architectures & Protocols (SIGCOMM) , pages", + "metadata": {} + }, + { + "text": "1-12. ACM, 1989.", + "metadata": {} + }, + { + "text": "- [10] Abhimanyu Dubey, Abhinav Jauhri, Abhinav Pandey, Abhishek Kadian, Ahmad Al-Dahle, Aiesha Letman, Akhil Mathur, Alan Schelten, Amy Yang, Angela Fan, et", + "metadata": {} + }, + { + "text": "al. The llama 3 herd of models. arXiv preprint arXiv:2407.21783 , 2024.", + "metadata": {} + }, + { + "text": "- [11] Ali Ghodsi, Matei Zaharia, Benjamin Hindman, Andy Konwinski, Scott Shenker, and Ion Stoica. Dominant resource fairness: fair allocation of multiple resource types. In Proceedings of Networks and Systems Design and Implementation (NSDI) ,", + "metadata": {} + }, + { + "text": "2011.\n- [12] Github. Github copilot: Your ai pair programmer. https://github.com/features/copilot .", + "metadata": {} + }, + { + "text": "- [13] S. Jamaloddin Golestani. A self-clocked fair queueing scheme for broadband applications. In Proceedings IEEE INFOCOM '94, The Conference on Computer Communications, Thirteenth Annual Joint Conference of the IEEE Computer and Communications Societies, Networking for Global Communications , pages", + "metadata": {} + }, + { + "text": "636-646. IEEE Computer Society, 1994.", + "metadata": {} + }, + { + "text": "- [14] Pawan Goyal, Harrick M. Vin, and Haichen Cheng. Start-time fair queueing: A scheduling algorithm for integrated services packet switching networks. In Conference on Applications, Technologies, Architectures, and Protocols for Computer Communication (SIGCOMM) , pages", + "metadata": {} + }, + { + "text": "157-168. ACM, 1996.", + "metadata": {} + }, + { + "text": "- [15] Robert Grandl, Mosharaf Chowdhury, Aditya Akella, and Ganesh Ananthanarayanan. Altruistic scheduling in Multi-Resource clusters. In 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI", + "metadata": {} + }, + { + "text": "16) , pages 65-80, Savannah, GA, November 2016. USENIX Association.", + "metadata": {} + }, + { + "text": "- [16] Michael Isard, Vijayan Prabhakaran, Jon Currey, Udi Wieder, Kunal Talwar, and Andrew Goldberg. Quincy: Fair scheduling for distributed computing clusters. In ACM Symposium on Operating Systems Principles (SOSP) , page", + "metadata": {} + }, + { + "text": "261-276. Association for Computing Machinery, 2009.", + "metadata": {} + }, + { + "text": "- [17] Rajendra K Jain, Dah-Ming W Chiu, William R Hawe, et al. A quantitative measure of fairness and discrimination. Eastern Research Laboratory, Digital Equipment Corporation, Hudson, MA , 21:1, 1984.", + "metadata": {} + }, + { + "text": "- [18] Albert Q Jiang, Alexandre Sablayrolles, Arthur Mensch, Chris Bamford, Devendra Singh Chaplot, Diego de las Casas, Florian Bressand, Gianna Lengyel, Guillaume Lample, Lucile Saulnier, et al. Mistral", + "metadata": {} + }, + { + "text": "7b. arXiv preprint arXiv:2310.06825 , 2023.", + "metadata": {} + }, + { + "text": "- [19] Wei Jin, Jeffrey S. Chase, and Jasleen Kaur. Interposed proportional sharing for a storage service utility. In International Conference on Measurements and Modeling of Computer Systems (SIGMETRICS) , pages 37-48. ACM, 2004.", + "metadata": {} + }, + { + "text": "- [20] The kernel development community. CFS Scheduler. https://docs.kernel.org/scheduler/ sched-design-CFS.html .", + "metadata": {} + }, + { + "text": "- [21] Woosuk Kwon, Zhuohan Li, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Hao Yu, Joseph Gonzalez, Hao Zhang, and Ion Stoica. Efficient memory management for large language model serving with paged attention. In Proceedings of the", + "metadata": {} + }, + { + "text": "29th Symposium on Operating Systems Principles , pages 611-626, 2023.", + "metadata": {} + }, + { + "text": "- [22] Tian Lan, David Kao, Mung Chiang, and Ashutosh Sabharwal. An axiomatic theory of fairness in network resource allocation. In 2010 Proceedings IEEE INFOCOM , pages 1-9, 2010.", + "metadata": {} + }, + { + "text": "- [23] Jiaqi Li, Mengmeng Wang, Zilong Zheng, and Muhan Zhang. Loogle: Can long-context language models understand long contexts? arXiv preprint arXiv:2311.04939 ,\n2023.", + "metadata": {} + }, + { + "text": "- [24] Zhuohan Li, Lianmin Zheng, Yinmin Zhong, Vincent Liu, Ying Sheng, Xin Jin, Yanping Huang, Zhifeng Chen, Hao Zhang, Joseph E Gonzalez, et al. { AlpaServe } : Statistical multiplexing with model parallelism", + "metadata": {} + }, + { + "text": "for deep learning serving. In 17th USENIX Symposium on Operating Systems Design and Implementation (OSDI 23) , pages 663-679, 2023.", + "metadata": {} + }, + { + "text": "- [25] Aman Madaan, Niket Tandon, Prakhar Gupta, Skyler Hallinan, Luyu Gao, Sarah Wiegreffe, Uri Alon, Nouha Dziri, Shrimai Prabhumoye, Yiming Yang, et", + "metadata": {} + }, + { + "text": "al. Selfrefine: Iterative refinement with self-feedback. Advances in Neural Information Processing Systems , 36, 2024.", + "metadata": {} + }, + { + "text": "- [26] Kshiteej Mahajan, Arjun Balasubramanian, Arjun Singhvi, Shivaram Venkataraman, Aditya Akella, Amar Phanishayee, and Shuchi Chawla. Themis: Fair and efficient gpu cluster scheduling.", + "metadata": {} + }, + { + "text": "In 17th USENIX Symposium on Networked Systems Design and Implementation (NSDI 20) , pages 289-304, 2020.", + "metadata": {} + }, + { + "text": "- [27] Deepak Narayanan, Keshav Santhanam, Fiodar Kazhamiaka, Amar Phanishayee, and Matei Zaharia. { Heterogeneity-Aware } cluster scheduling policies for deep learning workloads. In 14th", + "metadata": {} + }, + { + "text": "USENIX Symposium on Operating Systems Design and Implementation (OSDI 20) , pages 481-498, 2020.", + "metadata": {} + }, + { + "text": "- [28] Kyle J. Nesbit, Nidhi Aggarwal, James Laudon, and James E. Smith. Fair queuing memory systems. In 2006 39th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO'06) ,", + "metadata": {} + }, + { + "text": "pages 208-222, 2006.", + "metadata": {} + }, + { + "text": "- [29] Xuefei Ning, Zinan Lin, Zixuan Zhou, Zifu Wang, Huazhong Yang, and Yu Wang. Skeleton-of-thought: Prompting LLMs for efficient parallel generation. In The Twelfth International Conference on Learning Representations ,", + "metadata": {} + }, + { + "text": "2024.", + "metadata": {} + }, + { + "text": "- [30] OpenAI. Gpt-4 technical report, 2023.\n- [31] OpenAI. Rate limit. https://platform.openai. com/docs/guides/rate-limits?context= tier-free , 2023.", + "metadata": {} + }, + { + "text": "- [32] OpenAI. Learning to reason with llms. https://openai.com/index/ learning-to-reason-with-llms/ , 2024. Accessed: 2024-11-20.", + "metadata": {} + }, + { + "text": "- [33] A.K. Parekh and R.G. Gallager. A generalized processor sharing approach to flow control in integrated services networks: the single-node case. IEEE/ACM Transactions on Networking , 1(3):344-357, 1993.", + "metadata": {} + }, + { + "text": "- [34] Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, and Michael S. Bernstein. Generative agents: Interactive simulacra of human behavior. In In the 36th Annual ACM Symposium on User Interface", + "metadata": {} + }, + { + "text": "Software and Technology (UIST '23) , UIST '23, New York, NY, USA, 2023. Association for Computing Machinery.", + "metadata": {} + }, + { + "text": "- [35] Shishir G. Patil, Tianjun Zhang, Xin Wang, and Joseph E. Gonzalez. Gorilla: Large language model connected with massive apis. arXiv preprint arXiv:2305.15334 ,\n2023.", + "metadata": {} + }, + { + "text": "- [36] Reiner Pope, Sholto Douglas, Aakanksha Chowdhery, Jacob Devlin, James Bradbury, Jonathan Heek, Kefan Xiao, Shivani Agrawal, and Jeff Dean. Efficiently scaling transformer inference. Proceedings of Machine Learning and Systems ,", + "metadata": {} + }, + { + "text": "5, 2023.", + "metadata": {} + }, + { + "text": "- [37] Pranav Putta, Edmund Mills, Naman Garg, Sumeet Motwani, Chelsea Finn, Divyansh Garg, and Rafael Rafailov. Agent q: Advanced reasoning and learning for autonomous ai agents. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2408.07199 , 2024.", + "metadata": {} + }, + { + "text": "- [38] Aurick Qiao, Sang Keun Choe, Suhas Jayaram Subramanya, Willie Neiswanger, Qirong Ho, Hao Zhang, Gregory R Ganger, and Eric P Xing. Pollux: Co-adaptive cluster scheduling for goodput-optimized", + "metadata": {} + }, + { + "text": "deep learning. In 15th { USENIX } Symposium on Operating Systems Design and Implementation ( { OSDI } 21) , 2021.", + "metadata": {} + }, + { + "text": "- [39] Timo Schick, Jane Dwivedi-Yu, Roberto Dess\u00ec, Roberta Raileanu, Maria Lomeli, Luke Zettlemoyer, Nicola Cancedda, and Thomas Scialom. Toolformer: Language models can teach themselves to use tools.", + "metadata": {} + }, + { + "text": "arXiv preprint arXiv:2302.04761 , 2023.", + "metadata": {} + }, + { + "text": "- [40] Ying Sheng, Shiyi Cao, Dacheng Li, Coleman Hooper, Nicholas Lee, Shuo Yang, Christopher Chou, Banghua Zhu, Lianmin Zheng, Kurt Keutzer, Joseph E. Gonzalez, and Ion Stoica. S-lora:", + "metadata": {} + }, + { + "text": "Serving thousands of concurrent lora adapters. arXiv preprint arXiv:2311.03285 , 2023.", + "metadata": {} + }, + { + "text": "- [41] Ying Sheng, Shiyi Cao, Dacheng Li, Banghua Zhu, Zhuohan Li, Danyang Zhuo, Joseph E Gonzalez, and Ion Stoica. Fairness in Serving Large Language Models. In 18th USENIX Symposium on Operating", + "metadata": {} + }, + { + "text": "Systems Design and Implementation (OSDI 24) , pages 965-988, 2024.", + "metadata": {} + }, + { + "text": "- [42] M. Shreedhar and George Varghese. Efficient fair queueing using deficit round-robin. IEEE/ACM Trans. Netw. , 4(3):375-385, 1996.", + "metadata": {} + }, + { + "text": "- [43] Charlie Snell, Jaehoon Lee, Kelvin Xu, and Aviral Kumar. Scaling llm test-time compute optimally can be more effective than scaling model parameters. arXiv preprint arXiv:2408.03314 ,", + "metadata": {} + }, + { + "text": "2024.\n- [44] Vikranth Srivatsa, Zijian He, Reyna Abhyankar, Dongming Li, and Yiying Zhang. Preble: Efficient Distributed Prompt Scheduling for LLM Serving. 2024.", + "metadata": {} + }, + { + "text": "- [45] Vikranth Srivatsa, Dongming Li, Yiying Zhang, and Reyna Abhyankar. Can Scheduling Overhead Dominate LLM Inference Performance? A Study of CPU Scheduling Overhead on Two Popular LLM Inference Systems.", + "metadata": {} + }, + { + "text": "https://mlsys.wuklab.io/posts/ scheduling_overhead/ .", + "metadata": {} + }, + { + "text": "- [46] Ion Stoica and Hussein Abdel-Wahab. Earliest Eligible Virtual Deadline First: A Flexible and Accurate Mechanism for Proportional Share Resource Allocation. Old Dominion Univ., Norfolk, VA, Tech. Rep. TR-95-22 ,", + "metadata": {} + }, + { + "text": "1995.", + "metadata": {} + }, + { + "text": "- [47] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, \u0141ukasz Kaiser, and Illia Polosukhin. Attention is all you need. Advances in neural information processing", + "metadata": {} + }, + { + "text": "systems , 30, 2017.", + "metadata": {} + }, + { + "text": "- [48] Guanzhi Wang, Yuqi Xie, Yunfan Jiang, Ajay Mandlekar, Chaowei Xiao, Yuke Zhu, Linxi Fan, and Anima Anandkumar. Voyager: An open-ended embodied agent with large language models. arXiv", + "metadata": {} + }, + { + "text": "preprint arXiv: Arxiv-2305.16291 , 2023.\n- [49] Wikipedia. Max-min fairness. https://en. wikipedia.org/wiki/Max-min_fairness .", + "metadata": {} + }, + { + "text": "- [50] An Yang, Baosong Yang, Binyuan Hui, Bo Zheng, Bowen Yu, Chang Zhou, Chengpeng Li, Chengyuan Li, Dayiheng Liu, Fei Huang, et al. Qwen2 technical report. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2407.10671 , 2024.", + "metadata": {} + }, + { + "text": "- [51] Shunyu Yao, Dian Yu, Jeffrey Zhao, Izhak Shafran, Tom Griffiths, Yuan Cao, and Karthik Narasimhan. Tree of thoughts: Deliberate problem solving with large language models. Advances in Neural Information Processing Systems ,", + "metadata": {} + }, + { + "text": "36, 2024.", + "metadata": {} + }, + { + "text": "- [52] Gyeong-In Yu, Joo Seong Jeong, Geon-Woo Kim, Soojeong Kim, and Byung-Gon Chun. Orca: A distributed serving system for transformer-based generative models. In 16th USENIX Symposium on Operating", + "metadata": {} + }, + { + "text": "Systems Design and Implementation (OSDI 22) , pages 521-538, 2022.", + "metadata": {} + }, + { + "text": "- [53] Matei Zaharia, Dhruba Borthakur, Joydeep Sen Sarma, Khaled Elmeleegy, Scott Shenker, and Ion Stoica. Delay Scheduling: a Simple Technique for Achieving Locality and Fairness in Cluster Scheduling. In", + "metadata": {} + }, + { + "text": "Proceedings of the 5th European conference on Computer systems , pages 265-278, 2010.", + "metadata": {} + }, + { + "text": "- [54] Dan Zhang, Sining Zhoubian, Ziniu Hu, Yisong Yue, Yuxiao Dong, and Jie Tang. Rest-mcts*: Llm selftraining via process reward guided tree search. arXiv preprint", + "metadata": {} + }, + { + "text": "arXiv:2406.03816 , 2024.", + "metadata": {} + }, + { + "text": "- [55] Yilong Zhao, Shuo Yang, Kan Zhu, Lianmin Zheng, Baris Kasikci, Yang Zhou, Jiarong Xing, and Ion Stoica. BlendServe: Optimizing Offline Inference for Autoregressive Large Models with Resource-aware Batching.", + "metadata": {} + }, + { + "text": "arXiv preprint arXiv:2411.16102 , 2024.", + "metadata": {} + }, + { + "text": "- [56] Lianmin Zheng, Wei-Lin Chiang, Ying Sheng, Siyuan Zhuang, Zhanghao Wu, Yonghao Zhuang, Zi Lin, Zhuohan Li, Dacheng Li, Eric. P Xing, Hao Zhang, Joseph E.", + "metadata": {} + }, + { + "text": "Gonzalez, and Ion Stoica. Judging llm-as-a-judge with mt-bench and chatbot arena, 2023.", + "metadata": {} + }, + { + "text": "- [57] Lianmin Zheng, Liangsheng Yin, Zhiqiang Xie, Jeff Huang, Chuyue Sun, Cody Hao Yu, Shiyi Cao, Christos Kozyrakis, Ion Stoica, Joseph E Gonzalez, et al. Efficiently programming", + "metadata": {} + }, + { + "text": "large language models using sglang. arXiv preprint arXiv:2312.07104 , 2023.", + "metadata": {} + }, + { + "text": "Theorem A.1 ( Service Bound ) . Consider any execution of the DLPM scheme in which client i is backlogged. After any Ki rounds (where qi is replenished Ki times) from t 1 to t 2 , the difference between Ki \u00b7 Q u", + "metadata": {} + }, + { + "text": "(i.e., the service that client i should have sent) and Wi ( t 1 , t 2 ) (i.e., the service that client i actually received) is bounded by max ( Q u , U ) , where U = we \u00b7 Linput +", + "metadata": {} + }, + { + "text": "wq \u00b7 M.\nProof. Let qi ( t ) denote the deficit counter value of client i at time t . Since the deficit counter will only be refilled when qi \u2264 0 (line 7) by Q u , we have", + "metadata": {} + }, + { + "text": "\nNow we prove through induction:\n", + "metadata": {} + }, + { + "text": "- \u00b7 At the beginning, all qi ( 0 ) = 0. Equation (2) holds.\n- \u00b7 We then prove if at time t , Equation (2) holds, then for t \u2032 > t , Equation (2) also holds.", + "metadata": {} + }, + { + "text": "- \u00b7 At line 7, qi ( t \u2032 ) = qi + Q u > qi > -U . Equation (2) holds.", + "metadata": {} + }, + { + "text": "- \u00b7 Since line 24 will be reached only when qi > 0, qi ( t \u2032 ) = qi -we \u00b7 extend _ length ( r ) > -we \u00b7 Linput . Equation (2) holds.", + "metadata": {} + }, + { + "text": "- \u00b7 At line 27, since qi ( t \u2032 ) = qi -wq \u00b7 |{ r | client ( r ) = i , r \u2208 B }| will be repeated for n steps until some requests are finished. Therefore, we have qi (", + "metadata": {} + }, + { + "text": "t \u2032 ) \u2265 qi -n \u00b7 wq \u00b7 |{ r | client ( r ) = i , r \u2208 B }| . Since the number of decoded tokens cannot exceed the server's maximum token capacity M , n \u00b7 |{ r | client ( r )", + "metadata": {} + }, + { + "text": "= i , r \u2208 B }| \u2264 M . We then have qi ( t \u2032 ) = qi -wq \u00b7 M > -U . Equation (2) holds.", + "metadata": {} + }, + { + "text": "Therefore, we have Wi ( t 1 , t 2 ) = Ki \u00b7 Q u -qi ( t 2 ) . Combining Equation (2) and Equation (1), we have:\n", + "metadata": {} + }, + { + "text": "Theorem A.2 ( Latency Bound ) . Let A ( r ) and D ( r ) denote the arrival time and dispatch time of a request r. Assume there are in total n clients, \u2200 t 1 , t 2 , if at t 1", + "metadata": {} + }, + { + "text": ", a client f is not backlogged and has no requests in the running batch, then the next request r f with t 1 < A ( r f ) < t 2 will have its response time bounded: D ( r f ) -A ( r f )", + "metadata": {} + }, + { + "text": "\u2264 2 \u00b7 ( n -1 ) \u00b7 Q u + U a , where a is the lower bound of the server capacity.\nProof. \u00b7 Since there is no running batch of f in the system, r f will be selected for the next request for f .", + "metadata": {} + }, + { + "text": "- \u00b7 Earlier, we have shown that the service bound for backlogged clients compared to either backlogged or nonbacklogged clients is 2 \u00b7 ( Q u + U ) .", + "metadata": {} + }, + { + "text": "- \u00b7 From t 1 to D ( r f ) , Wf ( t 1 , D ( r f )) will be within 2 \u00b7 ( Q u + U ) of service received by other clients.", + "metadata": {} + }, + { + "text": "- \u00b7 Since at Line 12, qf is set to 0 when f rejoins, the maximum number of tokens served before f is served again is: 2 \u00b7 ( n -1 ) \u00b7 ( Q u + U ) , where n -1 is", + "metadata": {} + }, + { + "text": "the n -1 other clients.", + "metadata": {} + }, + { + "text": "- \u00b7 Given that a is the lower bound of the server capacity, the dispatch time for f is therefore bounded: D ( r f ) -A ( r f ) \u2264 2 \u00b7 ( n -1 ) \u00b7 Q u + U a .", + "metadata": {} + }, + { + "text": "Theorem A.3 ( Service Bound ) . Consider any execution of the DoubleQ Scheduling scheme in which client i is backlogged. The difference between \u2211 w \u2208 W ki , w \u00b7 Q u (i.e., the service that client i should have", + "metadata": {} + }, + { + "text": "sent) and Wi (i.e., the service that client i actually received) is bounded by max ( Q u , U ) \u00d7| W | , where U = we \u00b7 Linput + wq \u00b7 M. Let ki , w is the number of times client", + "metadata": {} + }, + { + "text": "i has been replenished at worker w.\nProof. Let ki , w be the number of times the client i has replenished quantum locally at worker w . We want to show for a client i :\n", + "metadata": {} + }, + { + "text": "Let q u i , w ( t ) denote the deficit counter value for worker w of client i at time t . Since the deficit counter will only be refilled when q u i , w ( t ) \u2264 0 (line 7) by Q u ,", + "metadata": {} + }, + { + "text": "we have\n\nNow we prove through induction:\n\n- \u00b7 At the beginning, all q u i , w ( t ) = 0. Equation (5) holds.", + "metadata": {} + }, + { + "text": "- \u00b7 We then prove if at time t , Equation (5) holds, then for t \u2032 > t , Equation (5) also holds.", + "metadata": {} + }, + { + "text": "- \u00b7 At line 7, q u i , w ( t \u2032 ) = q u i , w ( t ) + Q u > q u i , w ( t ) > -U . Equation (5) holds.", + "metadata": {} + }, + { + "text": "- \u00b7 Since line 24 will be reached only when q u i , w ( t ) > 0, q u i , w ( t \u2032 ) = q u i , w ( t ) -we \u00b7 Linput > -we \u00b7 Linput", + "metadata": {} + }, + { + "text": ". Equation (5) holds.", + "metadata": {} + }, + { + "text": "- \u00b7 At line 23, since q u i , w ( t \u2032 ) = q u i , w ( t ) -wq \u00b7 |{ r | client ( r ) = i , r \u2208 B }| will be repeated for n steps", + "metadata": {} + }, + { + "text": "until some requests are finished. Therefore, we have q u i , w ( t \u2032 ) = q u i , w ( t ) -n \u00b7 wq \u00b7 |{ r | client ( r ) = i , r \u2208 B }| . Since the", + "metadata": {} + }, + { + "text": "number of decoded tokens cannot exceed the server's maximum token capacity M , n \u00b7 |{ r | client ( r ) = i , r \u2208 B }| \u2264 M . We then have q u i , w = q u i , w ( t )", + "metadata": {} + }, + { + "text": "-wq \u00b7 M > -we \u00b7 Linput -wq \u00b7 M . Equation (5) holds.", + "metadata": {} + }, + { + "text": "Wehave Wi ( t 1 , t 2 ) = \u2211 w \u2208 W ( ki , w \u00b7 Q u -q u i , w ( t 2 )) . Combining Equation (5) and Equation (4), we have:", + "metadata": {} + }, + { + "text": "", + "metadata": {} + }, + { + "text": "Theorem 5.1 ( Service bound between backlogged clients ) . At any time interval [ t 1 , t 2 ) , max iWi ( t 1 , t 2 ) -min iWi ( t 1 , t 2 )", + "metadata": {} + }, + { + "text": "\u2264 2 \u00b7 | W | \u00b7 ( U + Q u ) . The difference between the maximum service among all backlogged clients and the minimum service among all backlogged clients is bounded by 2 \u00b7 | W | \u00b7 ( U + Q u ) , where |", + "metadata": {} + }, + { + "text": "W | is the number of workers.\nProof. \u00b7 From Theorem 4.1, the service bound for each worker is: 2 \u00b7 ( U + Q u ) .", + "metadata": {} + }, + { + "text": "- \u00b7 Since if a client is backlogged, it will have a request and hence be backlogged in all workers. This is because from Line 3, requests will be distributed to all workers and credit for each worker is exhausted, before replenishing the credits for all", + "metadata": {} + }, + { + "text": "workers.\n- \u00b7 Therefore, the service bound for DoubleQ is 2 \u00b7 | W | ( U + Q u ) .", + "metadata": {} + }, + { + "text": "Theorem 5.2 ( Service bound between backlogged and non-backlogged clients ) . Consider any execution of the DoubleQ scheme. Client f that is continuously backlogged during time interval [ t 1 , t 2 ) should not receive less service than another", + "metadata": {} + }, + { + "text": "client, g, that is not continuously backlogged during the same time interval, where Wg ( t 1 , t 2 ) -Wf ( t 1 , t 2 ) \u2264 2 \u00b7 ( U + Q u ) \u00b7 | W |", + "metadata": {} + }, + { + "text": ".\nProof. \u00b7 f is continuously backlogged in all workers.", + "metadata": {} + }, + { + "text": "- \u00b7 g is not continuously backlogged in at least one worker.\n- \u00b7 From Lemma 4.2, the service bound is | W | \u00b7 ( 2 U + 2 Q u ) between backlogged and either backlogged or non-backlogged clients.", + "metadata": {} + }, + { + "text": "Theorem A.4 ( Latency Bound ) . Let A ( r ) and D ( r ) denote the arrival time and dispatch time of a request r. Assume there are in total n clients, \u2200 t 1 , t 2 , if at t", + "metadata": {} + }, + { + "text": "1 , a client f is not backlogged and has no requests in the running batch, then the next request r f with t 1 < A ( r f ) < t 2 will have its response time bounded: D ( r f ) -A ( r", + "metadata": {} + }, + { + "text": "f ) \u2264 ( n -1 ) | W | \u00b7 2 U + 2 Q u a , where a is the lower bound of the server capacity.", + "metadata": {} + }, + { + "text": "Proof. \u00b7 Since there is no running batch of f in the system, r f will be selected for the next request for f .", + "metadata": {} + }, + { + "text": "- \u00b7 Earlier, we have shown that the bound between a backlogged client and a non-backlogged client in DoubleQ to be max iWi -min iWi \u2264 ( 2 U + 2 Q u ) | W | .", + "metadata": {} + }, + { + "text": "- \u00b7 Therefore the maximum number of tokens served before f is served again is: ( n -1 ) \u00b7 ( 2 U + 2 Q u ) | W | , where n -1 is the n -1 other client.", + "metadata": {} + }, + { + "text": "- \u00b7 Given that a is the lower bound of the server capacity, the dispatch time for f is therefore bounded: D ( r f ) -A ( r f ) \u2264 ( n -1 ) | W | \u00b7 2 U + 2 Q u a .", + "metadata": {} + }, + { + "text": "Theorem A.5 ( Infinite Qw is not fair ) . Consider any execution of the DoubleQ Scheduling scheme in which client Qw is infinite. Such scheduling scheme is not fair.\nProof. \u00b7 The requests will not be perfectly load balanced to all workers.", + "metadata": {} + }, + { + "text": "- \u00b7 Proof by counterexample: client f sends requests with large prefix matching. Requests from that client will be sent to the same worker hosting the prefix.", + "metadata": {} + }, + { + "text": "- \u00b7 Another client g sends requests with zero prefix matching, the requests will be load-balanced to all workers because of Line 8.", + "metadata": {} + }, + { + "text": "- \u00b7 Client g will be able to get unboundedly more service compared to f as it is replenished more, due to being scheduled to more workers, despite both being backlogged.", + "metadata": {} + }, + { + "text": "Theorem A.6 ( Service between backlogged or non-backlogged clients is unbounded ) . In any interval [ t 1 , t 2 ) , The difference between the maximum service among all backlogged clients and the minimum service", + "metadata": {} + }, + { + "text": "among all backlogged or non-backlogged clients is bounded by a constant independent of the time interval t 2 -t 1 .\nProof. \u00b7 The client requests will be load-balanced to all workers.", + "metadata": {} + }, + { + "text": "- \u00b7 Therefore, when a client is backlogged, it is backlogged on all workers.\n- \u00b7 We can apply the bound derived in DoubleQ, multiplied by the number of workers | W | , similar to \u00a7A.2.", "metadata": {} } ]