diff --git a/.gitignore b/.gitignore index e21c3643..2e741a46 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ NOTES.md results/* tools/custom/data.json + +*.png +venv/ diff --git a/Dockerfile b/Dockerfile index 53f5bcc5..de3ad063 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,9 @@ ENV PYTHONFAULTHANDLER=1 \ PIP_DEFAULT_TIMEOUT=100 \ POETRY_VERSION=1.5.1 +RUN apt update +RUN apt install -y wget + RUN pip install "poetry==$POETRY_VERSION" # Copy only requirements to cache them in docker layer @@ -21,5 +24,7 @@ RUN poetry config virtualenvs.create false \ # Creating folders, and files for a project: COPY . /code +RUN pip install "boto3" + CMD ["python"] diff --git a/README.md b/README.md index beda23ae..1419a120 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,21 @@ scenario against which it should be tested. A specific scenario may assume running the server in a single or distributed mode, a different client implementation and the number of client instances. +## Data sets + +We have a number of precomputed data sets. All data sets have been pre-split into train/test and include ground truth data for the top-100 nearest neighbors. + +| Dataset | Dimensions | Train size | Test size | Neighbors | Distance | +| ----------------------------------------------------------------------------------------------------------- | ---------: | ---------: | --------: | --------: | --------- | +| [LAION-1M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 1,000,000 | 10,000 | 100 | Angular | +| [LAION-10M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 10,000,000 | 10,000 | 100 | Angular | +| [LAION-20M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 20,000,000 | 10,000 | 100 | Angular | +| [LAION-40M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 40,000,000 | 10,000 | 100 | Angular | +| [LAION-100M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 100,000,000 | 10,000 | 100 | Angular | +| [LAION-200M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 200,000,000 | 10,000 | 100 | Angular | +| [LAION-400M: from LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 400,000,000 | 10,000 | 100 | Angular | + + ## How to run a benchmark? Benchmarks are implemented in server-client mode, meaning that the server is diff --git a/benchmark/dataset.py b/benchmark/dataset.py index d2793f04..c71b19af 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -3,13 +3,17 @@ import tarfile import urllib.request from dataclasses import dataclass, field -from typing import Dict, Optional - +from typing import Dict, List, Optional, Union +import boto3 +import botocore.exceptions from benchmark import DATASETS_DIR from dataset_reader.ann_compound_reader import AnnCompoundReader from dataset_reader.ann_h5_reader import AnnH5Reader +from dataset_reader.ann_h5_multi_reader import AnnH5MultiReader from dataset_reader.base_reader import BaseReader from dataset_reader.json_reader import JSONReader +from tqdm import tqdm +from pathlib import Path @dataclass @@ -18,59 +22,236 @@ class DatasetConfig: distance: str name: str type: str - path: str - link: Optional[str] = None + path: Dict[ + str, List[Dict[str, str]] + ] # Now path is expected to handle multi-file structure for h5-multi + link: Optional[Dict[str, List[Dict[str, str]]]] = None schema: Optional[Dict[str, str]] = field(default_factory=dict) -READER_TYPE = {"h5": AnnH5Reader, "jsonl": JSONReader, "tar": AnnCompoundReader} +READER_TYPE = { + "h5": AnnH5Reader, + "h5-multi": AnnH5MultiReader, + "jsonl": JSONReader, + "tar": AnnCompoundReader, +} + + +# Progress bar for urllib downloads +def show_progress(block_num, block_size, total_size): + percent = round(block_num * block_size / total_size * 100, 2) + print(f"{percent} %", end="\r") + + +# Progress handler for S3 downloads +class S3Progress(tqdm): + def __init__(self, total_size): + super().__init__( + total=total_size, unit="B", unit_scale=True, desc="Downloading from S3" + ) + + def __call__(self, bytes_amount): + self.update(bytes_amount) class Dataset: - def __init__(self, config: dict): + def __init__( + self, + config: dict, + skip_upload: bool, + skip_search: bool, + upload_start_idx: int, + upload_end_idx: int, + ): self.config = DatasetConfig(**config) + self.skip_upload = skip_upload + self.skip_search = skip_search + self.upload_start_idx = upload_start_idx + self.upload_end_idx = upload_end_idx def download(self): - target_path = DATASETS_DIR / self.config.path + if isinstance(self.config.path, dict): # Handle multi-file datasets + if self.skip_search is False: + # Download query files + for query in self.config.path.get("queries", []): + self._download_file(query["path"], query["link"]) + else: + print( + f"skipping to download query file given skip_search={self.skip_search}" + ) + if self.skip_upload is False: + # Download data files + for data in self.config.path.get("data", []): + start_idx = data["start_idx"] + end_idx = data["end_idx"] + data_path = data["path"] + data_link = data["link"] + if self.upload_start_idx >= end_idx: + print( + f"skipping downloading {data_path} from {data_link} given {self.upload_start_idx}>{end_idx}" + ) + continue + if self.upload_end_idx < start_idx: + print( + f"skipping downloading {data_path} from {data_link} given {self.upload_end_idx}<{start_idx}" + ) + continue + self._download_file(data["path"], data["link"]) + else: + print( + f"skipping to download data/upload files given skip_upload={self.skip_upload}" + ) + + else: # Handle single-file datasets + target_path = DATASETS_DIR / self.config.path + if target_path.exists(): + print(f"{target_path} already exists") + return + + if self.config.link: + downloaded_withboto = False + if is_s3_link(self.config.link): + print("Use boto3 to download from S3. Faster!") + try: + self._download_from_s3(self.config.link, target_path) + downloaded_withboto = True + except botocore.exceptions.NoCredentialsError: + print("Credentials not found, downloading without boto3") + if not downloaded_withboto: + print(f"Downloading from URL {self.config.link}...") + tmp_path, _ = urllib.request.urlretrieve( + self.config.link, None, show_progress + ) + self._extract_or_move_file(tmp_path, target_path) + + def _download_file(self, relative_path: str, url: str): + target_path = DATASETS_DIR / relative_path if target_path.exists(): print(f"{target_path} already exists") return - if self.config.link: - print(f"Downloading {self.config.link}...") - tmp_path, _ = urllib.request.urlretrieve(self.config.link) + print(f"Downloading from {url} to {target_path}") + tmp_path, _ = urllib.request.urlretrieve(url, None, show_progress) + self._extract_or_move_file(tmp_path, target_path) - if self.config.link.endswith(".tgz") or self.config.link.endswith( - ".tar.gz" - ): - print(f"Extracting: {tmp_path} -> {target_path}") - (DATASETS_DIR / self.config.path).mkdir(exist_ok=True, parents=True) - file = tarfile.open(tmp_path) + def _extract_or_move_file(self, tmp_path, target_path): + if tmp_path.endswith(".tgz") or tmp_path.endswith(".tar.gz"): + print(f"Extracting: {tmp_path} -> {target_path}") + (DATASETS_DIR / self.config.path).mkdir(exist_ok=True, parents=True) + with tarfile.open(tmp_path) as file: file.extractall(target_path) - file.close() - os.remove(tmp_path) - else: - print(f"Moving: {tmp_path} -> {target_path}") - (DATASETS_DIR / self.config.path).parent.mkdir(exist_ok=True) - shutil.copy2(tmp_path, target_path) - os.remove(tmp_path) + os.remove(tmp_path) + else: + print(f"Moving: {tmp_path} -> {target_path}") + Path(target_path).parent.mkdir(exist_ok=True) + shutil.copy2(tmp_path, target_path) + os.remove(tmp_path) + + def _download_from_s3(self, link, target_path): + s3 = boto3.client("s3") + bucket_name, s3_key = parse_s3_url(link) + tmp_path = f"/tmp/{os.path.basename(s3_key)}" + + print( + f"Downloading from S3: {link}... bucket_name={bucket_name}, s3_key={s3_key}" + ) + object_info = s3.head_object(Bucket=bucket_name, Key=s3_key) + total_size = object_info["ContentLength"] + + with open(tmp_path, "wb") as f: + progress = S3Progress(total_size) + s3.download_fileobj(bucket_name, s3_key, f, Callback=progress) + + self._extract_or_move_file(tmp_path, target_path) def get_reader(self, normalize: bool) -> BaseReader: reader_class = READER_TYPE[self.config.type] - return reader_class(DATASETS_DIR / self.config.path, normalize=normalize) + + if self.config.type == "h5-multi": + # For h5-multi, we need to pass both data files and query file + data_files = self.config.path["data"] + for data_file_dict in data_files: + data_file_dict["path"] = DATASETS_DIR / data_file_dict["path"] + query_file = DATASETS_DIR / self.config.path["queries"][0]["path"] + return reader_class( + data_files=data_files, + query_file=query_file, + normalize=normalize, + skip_upload=self.skip_upload, + skip_search=self.skip_search, + ) + else: + # For single-file datasets + return reader_class(DATASETS_DIR / self.config.path, normalize=normalize) + + +def is_s3_link(link): + return link.startswith("s3://") or "s3.amazonaws.com" in link + + +def parse_s3_url(s3_url): + if s3_url.startswith("s3://"): + s3_parts = s3_url.replace("s3://", "").split("/", 1) + bucket_name = s3_parts[0] + s3_key = s3_parts[1] if len(s3_parts) > 1 else "" + else: + s3_parts = s3_url.replace("http://", "").replace("https://", "").split("/", 1) + + if ".s3.amazonaws.com" in s3_parts[0]: + bucket_name = s3_parts[0].split(".s3.amazonaws.com")[0] + s3_key = s3_parts[1] if len(s3_parts) > 1 else "" + else: + bucket_name = s3_parts[0] + s3_key = s3_parts[1] if len(s3_parts) > 1 else "" + + return bucket_name, s3_key if __name__ == "__main__": - dataset = Dataset( + dataset_s3_split = Dataset( { - "name": "glove-25-angular", - "vector_size": 25, - "distance": "Cosine", - "type": "h5", - "path": "glove-25-angular/glove-25-angular.hdf5", - "link": "http://ann-benchmarks.com/glove-25-angular.hdf5", - } + "name": "laion-img-emb-768d-1Billion-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5-multi", + "path": { + "data": [ + { + "file_number": 1, + "path": "laion-1b/data/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "vector_range": "0-10000000", + "file_size": "30.7 GB", + }, + { + "file_number": 2, + "path": "laion-1b/data/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "vector_range": "90000000-100000000", + "file_size": "30.7 GB", + }, + { + "file_number": 3, + "path": "laion-1b/data/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "vector_range": "990000000-1000000000", + "file_size": "30.7 GB", + }, + ], + "queries": [ + { + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "file_size": "38.7 MB", + }, + ], + }, + }, + skip_upload=True, + skip_search=False, ) - dataset.download() + dataset_s3_split.download() + reader = dataset_s3_split.get_reader(normalize=False) + print(reader) # Outputs the AnnH5MultiReader instance diff --git a/chart.py b/chart.py new file mode 100644 index 00000000..c2346147 --- /dev/null +++ b/chart.py @@ -0,0 +1,178 @@ +import json +import os + +import matplotlib.pyplot as plt +import argparse + + +x_metrics = {"mean_precisions": {"human_label": "Precision"}} +y_metrics = { + "rps": {"mode": "higher-better", "human_label": "Search Queries per second"}, + "mean_time": { + "mode": "lower-better", + "human_label": "Search avg. latency including RTT (seconds)", + }, + "p50_time": { + "mode": "lower-better", + "human_label": "Search p50 latency including RTT (seconds)", + }, + "p99_time": { + "mode": "lower-better", + "human_label": "Search p99 latency including RTT (seconds)", + }, +} + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--dataset", default="glove-100-angular") + parser.add_argument("-o", "--output", default=None) + parser.add_argument( + "-x", + "--x-axis", + help="Which metric to use on the X-axis", + choices=x_metrics.keys(), + default="mean_precisions", + ) + parser.add_argument( + "--x-axis-left", + default=None, + ) + parser.add_argument( + "--x-axis-right", + default=None, + ) + parser.add_argument( + "--x-axis-label", + default=None, + ) + + parser.add_argument( + "-y", + "--y-axis", + help="Which metric to use on the Y-axis", + choices=y_metrics.keys(), + default="rps", + ) + parser.add_argument( + "--y-axis-label", + default=None, + ) + + parser.add_argument( + "--y-axis-bottom", + default=None, + ) + parser.add_argument( + "--y-axis-top", + default=None, + ) + + parser.add_argument( + "--legend", + default="Redis", + ) + + parser.add_argument( + "--results", type=str, help="results folder to process", default="results" + ) + parser.add_argument( + "--clients", type=int, help="consider results from this client count", default=1 + ) + args = parser.parse_args() + final_results_map = {} + x_axis = [] + y_axis = [] + fig, ax = plt.subplots() + + if os.path.exists(args.results): + print(f"working on dir: {args.results}") + print("reading first the upload data") + for filename in os.listdir(args.results): + f = os.path.join(args.results, filename) + setup_name = filename.split(args.dataset)[0] + setup_name = setup_name[0 : len(setup_name) - 1] + + with open(f, "r") as fd: + try: + json_res = json.load(fd) + except json.decoder.JSONDecodeError as e: + error_str = e.__str__() + print( + f"skipping {filename} given here as an error while processing the file {error_str})" + ) + continue + parallel = 1 + if "parallel" in json_res["params"]: + parallel = json_res["params"]["parallel"] + + if args.clients != parallel: + print( + f"skipping {filename} given the client count ({parallel}) is different than the one we wish to plot ({args.clients})" + ) + continue + # query + if ( + args.x_axis in json_res["results"] + and args.y_axis in json_res["results"] + ): + x_val = json_res["results"][args.x_axis] + y_val = json_res["results"][args.y_axis] + x_axis.append(x_val) + y_axis.append(y_val) + + color = "tab:red" + ax.scatter( + x_axis, y_axis, c=color, label=args.legend, marker="^", edgecolors="none" + ) + + ax.legend() + ax.grid(True) + + x_axis_label = args.x_axis + if args.x_axis in x_metrics: + if "human_label" in x_metrics[args.x_axis]: + x_axis_label = x_metrics[args.x_axis]["human_label"] + if args.x_axis_label is not None: + x_axis_label = args.x_axis_label + plt.xlabel(x_axis_label) + + y_axis_label = args.y_axis + y_axis_mode = "higher-better" + if args.y_axis in y_metrics: + if "human_label" in y_metrics[args.y_axis]: + y_axis_label = y_metrics[args.y_axis]["human_label"] + if "mode" in y_metrics[args.y_axis]: + y_axis_mode = y_metrics[args.y_axis]["mode"] + if args.y_axis_label is not None: + y_axis_label = args.y_axis_label + plt.ylabel(y_axis_label) + title_string = ( + f"{x_axis_label} vs {y_axis_label} ({y_axis_mode}).\nclients={args.clients}" + ) + plt.title(title_string) + + x_axis_left, x_axis_right = plt.xlim() + _, y_axis_top = plt.ylim() + y_axis_bottom = 0 + if args.y_axis_bottom is not None: + y_axis_bottom = float(args.y_axis_bottom) + if args.y_axis_top is not None: + y_axis_top = float(args.y_axis_top) + + plt.ylim(y_axis_bottom, y_axis_top) + + if args.x_axis_left is not None: + x_axis_left = float(args.x_axis_left) + if args.x_axis_right is not None: + x_axis_right = float(args.x_axis_right) + + plt.xlim(x_axis_left, x_axis_right) + + output_file = f"{args.y_axis}.png" + + if args.output is not None: + output_file = args.output + + print(f"writing output to {output_file}") + + plt.savefig(output_file) diff --git a/dataset_reader/ann_h5_multi_reader.py b/dataset_reader/ann_h5_multi_reader.py new file mode 100644 index 00000000..64dfd7f9 --- /dev/null +++ b/dataset_reader/ann_h5_multi_reader.py @@ -0,0 +1,140 @@ +from typing import Iterator, List +import h5py +import numpy as np +import os +from benchmark import DATASETS_DIR +from dataset_reader.base_reader import BaseReader, Query, Record + + +class AnnH5MultiReader(BaseReader): + def __init__( + self, + data_files: str, + query_file: str, + normalize: bool = False, + skip_upload: bool = False, + skip_search: bool = False, + ): + """ + Args: + data_dir (str): Directory containing the HDF5 data files. + query_file (str): Path to the HDF5 query file. + normalize (bool): Whether to normalize the vectors. + """ + self.data_files = data_files + self.query_file = query_file + self.normalize = normalize + self.skip_upload = skip_upload + self.skip_search = skip_search + + # # Load the list of data files (assumes they're named in a consistent format) + # self.data_files = sorted( + # [ + # os.path.join(self.data_dir, f) + # for f in os.listdir(self.data_dir) + # if f.endswith(".hdf5") + # ] + # ) + + def read_queries(self) -> Iterator[Query]: + """Reads the queries from the query file.""" + with h5py.File(self.query_file, "r") as data: + for vector, expected_result, expected_scores in zip( + data["test"], data["neighbors"], data["distances"] + ): + if self.normalize: + vector /= np.linalg.norm(vector) + yield Query( + vector=vector.tolist(), + meta_conditions=None, + expected_result=expected_result.tolist(), + expected_scores=expected_scores.tolist(), + ) + + def read_data( + self, start_idx: int = 0, end_idx: int = None, chunk_size: int = 10_000, *args, **kwargs + ) -> Iterator[Record]: + """ + Reads the 'train' data vectors from multiple HDF5 files based on the specified range. + + Args: + start_idx (int): Start index for the range of vectors. + end_idx (int): End index for the range of vectors. + + Yields: + Record: A Record object for each vector in the specified range. + """ + if end_idx is None: + raise ValueError("You must specify an end index.") + + current_idx = start_idx + vectors_yielded = 0 + + for data_file in self.data_files: + # Extract the range of vectors covered by this file from the filename + file_start = data_file["start_idx"] + file_end = data_file["end_idx"] + path = data_file["path"] + + if current_idx >= end_idx: + break + + # Only read the file if it overlaps with the requested range + if file_start < end_idx and file_end > start_idx: + with h5py.File(path, "r") as data: + train_vectors = data["train"] + # Determine the slice to read from the current file + file_data_start = max(file_start, start_idx) - file_start + file_data_end = min(file_end, end_idx) - file_start + + # Read in chunks instead of the whole slice + for chunk_start in range( + file_data_start, file_data_end, chunk_size + ): + chunk_end = min(chunk_start + chunk_size, file_data_end) + vectors_chunk = train_vectors[chunk_start:chunk_end] + + for vector in vectors_chunk: + if self.normalize: + vector /= np.linalg.norm(vector) + yield Record( + id=current_idx + vectors_yielded, + vector=vector.tolist(), + metadata=None, + ) + vectors_yielded += 1 + + +if __name__ == "__main__": + # Directory containing the data split into multiple parts + data_dir = os.path.join(DATASETS_DIR, "laion-1b", "data") + + data_files = sorted( + [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith(".hdf5")] + ) + + # Path to the query file + query_file = os.path.join( + DATASETS_DIR, "laion-1b", "laion-img-emb-768d-1Billion-cosine-queries.hdf5" + ) + + reader = AnnH5MultiReader(data_dir, query_file, normalize=False) + + # Example of reading queries and counting them + print("Reading queries...") + query_count = sum(1 for _ in reader.read_queries()) + print(f"Number of queries: {query_count}") + + # Example of reading vectors from 10M to 30M and asserting the length + start_idx = 15_000_000 + end_idx = 16_000_001 + print(f"Reading vectors from {start_idx} to {end_idx}...") + data_vectors = list(reader.read_data(start_idx, end_idx)) + + # Assert the length matches the expected range + expected_length = end_idx - start_idx + actual_length = len(data_vectors) + assert ( + actual_length == expected_length + ), f"Expected {expected_length} vectors, but got {actual_length}" + print(f"Successfully read {actual_length} vectors.") diff --git a/dataset_reader/ann_h5_reader.py b/dataset_reader/ann_h5_reader.py index 1d47bdd3..1bc984ac 100644 --- a/dataset_reader/ann_h5_reader.py +++ b/dataset_reader/ann_h5_reader.py @@ -27,7 +27,7 @@ def read_queries(self) -> Iterator[Query]: expected_scores=expected_scores.tolist(), ) - def read_data(self) -> Iterator[Record]: + def read_data(self, *args, **kwargs) -> Iterator[Record]: data = h5py.File(self.path) for idx, vector in enumerate(data["train"]): diff --git a/dataset_reader/base_reader.py b/dataset_reader/base_reader.py index 0a2617e3..e4c3ee60 100644 --- a/dataset_reader/base_reader.py +++ b/dataset_reader/base_reader.py @@ -18,7 +18,7 @@ class Query: class BaseReader: - def read_data(self) -> Iterator[Record]: + def read_data(self, *args, **kwargs) -> Iterator[Record]: raise NotImplementedError() def read_queries(self) -> Iterator[Query]: diff --git a/dataset_reader/json_reader.py b/dataset_reader/json_reader.py index 77a2eeb9..e6bab83e 100644 --- a/dataset_reader/json_reader.py +++ b/dataset_reader/json_reader.py @@ -60,7 +60,7 @@ def read_queries(self) -> Iterator[Query]: yield Query(vector=vector, meta_conditions=None, expected_result=neighbours) - def read_data(self) -> Iterator[Record]: + def read_data(self, *args, **kwargs) -> Iterator[Record]: for idx, (vector, payload) in enumerate( zip(self.read_vectors(), self.read_payloads()) ): diff --git a/dataset_reader/splitter.py b/dataset_reader/splitter.py new file mode 100644 index 00000000..6df62257 --- /dev/null +++ b/dataset_reader/splitter.py @@ -0,0 +1,94 @@ +import os +import h5py +import numpy as np +from tqdm import tqdm +import argparse + +CHUNK_SIZE = 20000 # Number of records to process at a time + + +def split_hdf5_file( + input_path, data_output_dir, start_idx, end_idx, part, normalize=False +): + """ + Split a specified range of the 'train' dataset from the HDF5 file into a single file. + + Args: + input_path (str): Path to the input HDF5 file. + data_output_dir (str): Directory where the output file will be saved. + start_idx (int): Start index of the dataset. + end_idx (int): End index of the dataset. + part (int): Part number for the output file naming. + normalize (bool): Whether to normalize the dataset or not. + """ + with h5py.File(input_path, "r") as data_file: + train_shape = data_file["train"].shape + print(f"Processing train data part {part}: elements {start_idx} to {end_idx}") + + # Define the output path for this part + data_output_path = os.path.join( + data_output_dir, + f"laion-img-emb-768d-1Billion-cosine-data-part{part}-{start_idx}_to_{end_idx}.hdf5", + ) + + with h5py.File(data_output_path, "w") as data_output: + train_dset = data_output.create_dataset( + "train", + shape=(end_idx - start_idx, train_shape[1]), + dtype=data_file["train"].dtype, + ) + + # Create a progress bar for the data splitting process + with tqdm( + total=end_idx - start_idx, + unit="vectors", + desc=f"Processing train data part {part}", + ) as pbar: + for i in range(start_idx, end_idx, CHUNK_SIZE): + chunk_end = min(i + CHUNK_SIZE, end_idx) + train_dset[i - start_idx : chunk_end - start_idx] = data_file[ + "train" + ][i:chunk_end] + pbar.update(chunk_end - i) + + print( + f"Train data part {part} (elements {start_idx} to {end_idx}) saved to {data_output_path}" + ) + + +if __name__ == "__main__": + # Parse command-line arguments + parser = argparse.ArgumentParser( + description="Split HDF5 train dataset into specified parts." + ) + parser.add_argument( + "--input_path", + required=False, + type=str, + default="laion-img-emb-768d-1Billion-cosine.hdf5", + help="Path to the input HDF5 file", + ) + parser.add_argument( + "--data_output_dir", + type=str, + required=False, + default="data", + help="Directory where the split dataset will be saved", + ) + parser.add_argument( + "--start_idx", type=int, help="Start index for the dataset range to process" + ) + parser.add_argument( + "--end_idx", type=int, help="End index for the dataset range to process" + ) + parser.add_argument("--part", type=int, help="Part number for the output file") + + args = parser.parse_args() + + # Ensure the output directory exists + os.makedirs(args.data_output_dir, exist_ok=True) + + # Split the dataset into the specified range + split_hdf5_file( + args.input_path, args.data_output_dir, args.start_idx, args.end_idx, args.part + ) diff --git a/dataset_reader/verify.py b/dataset_reader/verify.py new file mode 100644 index 00000000..80555699 --- /dev/null +++ b/dataset_reader/verify.py @@ -0,0 +1,53 @@ +import os +import h5py + +EXPECTED_VECTORS = 10_000_000 # Expected number of vectors per file + + +def verify_hdf5_files(directory): + """ + Verifies that each HDF5 file in the given directory contains 10 million vectors in the 'train' dataset. + + Args: + directory (str): Directory containing the HDF5 files to check. + """ + hdf_files = [f for f in os.listdir(directory) if f.endswith(".hdf5")] + + if not hdf_files: + print("No HDF5 files found in the directory.") + return + + all_verified = True + + for hdf_file in sorted(hdf_files): + file_path = os.path.join(directory, hdf_file) + + with h5py.File(file_path, "r") as data_file: + if "train" in data_file: + train_shape = data_file["train"].shape + num_vectors = train_shape[0] + print(f"Checking {hdf_file}: contains {num_vectors} vectors.") + + if num_vectors != EXPECTED_VECTORS: + print( + f"ERROR: {hdf_file} contains {num_vectors} vectors, expected {EXPECTED_VECTORS}." + ) + all_verified = False + else: + print(f"ERROR: 'train' dataset not found in {hdf_file}.") + all_verified = False + + if all_verified: + print( + "All HDF5 files verified successfully, each containing 10 million vectors." + ) + else: + print("Some files contain discrepancies. Please check the log above.") + + +if __name__ == "__main__": + # Define the path to the directory containing the HDF5 files + directory = "./data" # Replace with your actual directory + + # Verify the HDF5 files + verify_hdf5_files(directory) diff --git a/datasets/datasets.json b/datasets/datasets.json index 7a165eb6..784cab9b 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -39,6 +39,895 @@ "path": "gist-960-euclidean/gist-960-euclidean.hdf5", "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5" }, + { + "name": "laion-img-emb-512-1M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-1M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-10M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-10M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-20M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-20M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-40M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-40M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-100M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-100M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-200M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-200M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-400M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-400M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-cosine.hdf5" + }, + { + "name": "laion-img-emb-768-1G-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-768/laion-img-emb-768-1G-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1G-cosine.hdf5" + }, + { + "name": "laion-img-emb-768-1M-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-768/laion-img-emb-768-1M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1M-cosine.hdf5" + }, + { + "name": "laion-img-emb-768d-1Billion-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5-multi", + "path": { + "data": [ + { + "file_number": "1", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "start_idx": 0, + "end_idx": 10000000, + "file_size": "30.7 GB" + }, + { + "file_number": "10", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "start_idx": 90000000, + "end_idx": 100000000, + "file_size": "30.7 GB" + }, + { + "file_number": "100", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "start_idx": 990000000, + "end_idx": 1000000000, + "file_size": "30.7 GB" + }, + { + "file_number": "11", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", + "start_idx": 100000000, + "end_idx": 110000000, + "file_size": "30.7 GB" + }, + { + "file_number": "12", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", + "start_idx": 110000000, + "end_idx": 120000000, + "file_size": "30.7 GB" + }, + { + "file_number": "13", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", + "start_idx": 120000000, + "end_idx": 130000000, + "file_size": "30.7 GB" + }, + { + "file_number": "14", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", + "start_idx": 130000000, + "end_idx": 140000000, + "file_size": "30.7 GB" + }, + { + "file_number": "15", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", + "start_idx": 140000000, + "end_idx": 150000000, + "file_size": "30.7 GB" + }, + { + "file_number": "16", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", + "start_idx": 150000000, + "end_idx": 160000000, + "file_size": "30.7 GB" + }, + { + "file_number": "17", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", + "start_idx": 160000000, + "end_idx": 170000000, + "file_size": "30.7 GB" + }, + { + "file_number": "18", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", + "start_idx": 170000000, + "end_idx": 180000000, + "file_size": "30.7 GB" + }, + { + "file_number": "19", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", + "start_idx": 180000000, + "end_idx": 190000000, + "file_size": "30.7 GB" + }, + { + "file_number": "2", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", + "start_idx": 10000000, + "end_idx": 20000000, + "file_size": "30.7 GB" + }, + { + "file_number": "20", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", + "start_idx": 190000000, + "end_idx": 200000000, + "file_size": "30.7 GB" + }, + { + "file_number": "21", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", + "start_idx": 200000000, + "end_idx": 210000000, + "file_size": "30.7 GB" + }, + { + "file_number": "22", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", + "start_idx": 210000000, + "end_idx": 220000000, + "file_size": "30.7 GB" + }, + { + "file_number": "23", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", + "start_idx": 220000000, + "end_idx": 230000000, + "file_size": "30.7 GB" + }, + { + "file_number": "24", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", + "start_idx": 230000000, + "end_idx": 240000000, + "file_size": "30.7 GB" + }, + { + "file_number": "25", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", + "start_idx": 240000000, + "end_idx": 250000000, + "file_size": "30.7 GB" + }, + { + "file_number": "26", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", + "start_idx": 250000000, + "end_idx": 260000000, + "file_size": "30.7 GB" + }, + { + "file_number": "27", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", + "start_idx": 260000000, + "end_idx": 270000000, + "file_size": "30.7 GB" + }, + { + "file_number": "28", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", + "start_idx": 270000000, + "end_idx": 280000000, + "file_size": "30.7 GB" + }, + { + "file_number": "29", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", + "start_idx": 280000000, + "end_idx": 290000000, + "file_size": "30.7 GB" + }, + { + "file_number": "3", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", + "start_idx": 20000000, + "end_idx": 30000000, + "file_size": "30.7 GB" + }, + { + "file_number": "30", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", + "start_idx": 290000000, + "end_idx": 300000000, + "file_size": "30.7 GB" + }, + { + "file_number": "31", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", + "start_idx": 300000000, + "end_idx": 310000000, + "file_size": "30.7 GB" + }, + { + "file_number": "32", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", + "start_idx": 310000000, + "end_idx": 320000000, + "file_size": "30.7 GB" + }, + { + "file_number": "33", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", + "start_idx": 320000000, + "end_idx": 330000000, + "file_size": "30.7 GB" + }, + { + "file_number": "34", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", + "start_idx": 330000000, + "end_idx": 340000000, + "file_size": "30.7 GB" + }, + { + "file_number": "35", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", + "start_idx": 340000000, + "end_idx": 350000000, + "file_size": "30.7 GB" + }, + { + "file_number": "36", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", + "start_idx": 350000000, + "end_idx": 360000000, + "file_size": "30.7 GB" + }, + { + "file_number": "37", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", + "start_idx": 360000000, + "end_idx": 370000000, + "file_size": "30.7 GB" + }, + { + "file_number": "38", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", + "start_idx": 370000000, + "end_idx": 380000000, + "file_size": "30.7 GB" + }, + { + "file_number": "39", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", + "start_idx": 380000000, + "end_idx": 390000000, + "file_size": "30.7 GB" + }, + { + "file_number": "4", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", + "start_idx": 30000000, + "end_idx": 40000000, + "file_size": "30.7 GB" + }, + { + "file_number": "40", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", + "start_idx": 390000000, + "end_idx": 400000000, + "file_size": "30.7 GB" + }, + { + "file_number": "41", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", + "start_idx": 400000000, + "end_idx": 410000000, + "file_size": "30.7 GB" + }, + { + "file_number": "42", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", + "start_idx": 410000000, + "end_idx": 420000000, + "file_size": "30.7 GB" + }, + { + "file_number": "43", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", + "start_idx": 420000000, + "end_idx": 430000000, + "file_size": "30.7 GB" + }, + { + "file_number": "44", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", + "start_idx": 430000000, + "end_idx": 440000000, + "file_size": "30.7 GB" + }, + { + "file_number": "45", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", + "start_idx": 440000000, + "end_idx": 450000000, + "file_size": "30.7 GB" + }, + { + "file_number": "46", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", + "start_idx": 450000000, + "end_idx": 460000000, + "file_size": "30.7 GB" + }, + { + "file_number": "47", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", + "start_idx": 460000000, + "end_idx": 470000000, + "file_size": "30.7 GB" + }, + { + "file_number": "48", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", + "start_idx": 470000000, + "end_idx": 480000000, + "file_size": "30.7 GB" + }, + { + "file_number": "49", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", + "start_idx": 480000000, + "end_idx": 490000000, + "file_size": "30.7 GB" + }, + { + "file_number": "5", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", + "start_idx": 40000000, + "end_idx": 50000000, + "file_size": "30.7 GB" + }, + { + "file_number": "50", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", + "start_idx": 490000000, + "end_idx": 500000000, + "file_size": "30.7 GB" + }, + { + "file_number": "51", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", + "start_idx": 500000000, + "end_idx": 510000000, + "file_size": "30.7 GB" + }, + { + "file_number": "52", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", + "start_idx": 510000000, + "end_idx": 520000000, + "file_size": "30.7 GB" + }, + { + "file_number": "53", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", + "start_idx": 520000000, + "end_idx": 530000000, + "file_size": "30.7 GB" + }, + { + "file_number": "54", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", + "start_idx": 530000000, + "end_idx": 540000000, + "file_size": "30.7 GB" + }, + { + "file_number": "55", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", + "start_idx": 540000000, + "end_idx": 550000000, + "file_size": "30.7 GB" + }, + { + "file_number": "56", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", + "start_idx": 550000000, + "end_idx": 560000000, + "file_size": "30.7 GB" + }, + { + "file_number": "57", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", + "start_idx": 560000000, + "end_idx": 570000000, + "file_size": "30.7 GB" + }, + { + "file_number": "58", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", + "start_idx": 570000000, + "end_idx": 580000000, + "file_size": "30.7 GB" + }, + { + "file_number": "59", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", + "start_idx": 580000000, + "end_idx": 590000000, + "file_size": "30.7 GB" + }, + { + "file_number": "6", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", + "start_idx": 50000000, + "end_idx": 60000000, + "file_size": "30.7 GB" + }, + { + "file_number": "60", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", + "start_idx": 590000000, + "end_idx": 600000000, + "file_size": "30.7 GB" + }, + { + "file_number": "61", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", + "start_idx": 600000000, + "end_idx": 610000000, + "file_size": "30.7 GB" + }, + { + "file_number": "62", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", + "start_idx": 610000000, + "end_idx": 620000000, + "file_size": "30.7 GB" + }, + { + "file_number": "63", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", + "start_idx": 620000000, + "end_idx": 630000000, + "file_size": "30.7 GB" + }, + { + "file_number": "64", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", + "start_idx": 630000000, + "end_idx": 640000000, + "file_size": "30.7 GB" + }, + { + "file_number": "65", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", + "start_idx": 640000000, + "end_idx": 650000000, + "file_size": "30.7 GB" + }, + { + "file_number": "66", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", + "start_idx": 650000000, + "end_idx": 660000000, + "file_size": "30.7 GB" + }, + { + "file_number": "67", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", + "start_idx": 660000000, + "end_idx": 670000000, + "file_size": "30.7 GB" + }, + { + "file_number": "68", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", + "start_idx": 670000000, + "end_idx": 680000000, + "file_size": "30.7 GB" + }, + { + "file_number": "69", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", + "start_idx": 680000000, + "end_idx": 690000000, + "file_size": "30.7 GB" + }, + { + "file_number": "7", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", + "start_idx": 60000000, + "end_idx": 70000000, + "file_size": "30.7 GB" + }, + { + "file_number": "70", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", + "start_idx": 690000000, + "end_idx": 700000000, + "file_size": "30.7 GB" + }, + { + "file_number": "71", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", + "start_idx": 700000000, + "end_idx": 710000000, + "file_size": "30.7 GB" + }, + { + "file_number": "72", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", + "start_idx": 710000000, + "end_idx": 720000000, + "file_size": "30.7 GB" + }, + { + "file_number": "73", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", + "start_idx": 720000000, + "end_idx": 730000000, + "file_size": "30.7 GB" + }, + { + "file_number": "74", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", + "start_idx": 730000000, + "end_idx": 740000000, + "file_size": "30.7 GB" + }, + { + "file_number": "75", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", + "start_idx": 740000000, + "end_idx": 750000000, + "file_size": "30.7 GB" + }, + { + "file_number": "76", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", + "start_idx": 750000000, + "end_idx": 760000000, + "file_size": "30.7 GB" + }, + { + "file_number": "77", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", + "start_idx": 760000000, + "end_idx": 770000000, + "file_size": "30.7 GB" + }, + { + "file_number": "78", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", + "start_idx": 770000000, + "end_idx": 780000000, + "file_size": "30.7 GB" + }, + { + "file_number": "79", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", + "start_idx": 780000000, + "end_idx": 790000000, + "file_size": "30.7 GB" + }, + { + "file_number": "8", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", + "start_idx": 70000000, + "end_idx": 80000000, + "file_size": "30.7 GB" + }, + { + "file_number": "80", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", + "start_idx": 790000000, + "end_idx": 800000000, + "file_size": "30.7 GB" + }, + { + "file_number": "81", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", + "start_idx": 800000000, + "end_idx": 810000000, + "file_size": "30.7 GB" + }, + { + "file_number": "82", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", + "start_idx": 810000000, + "end_idx": 820000000, + "file_size": "30.7 GB" + }, + { + "file_number": "83", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", + "start_idx": 820000000, + "end_idx": 830000000, + "file_size": "30.7 GB" + }, + { + "file_number": "84", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", + "start_idx": 830000000, + "end_idx": 840000000, + "file_size": "30.7 GB" + }, + { + "file_number": "85", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", + "start_idx": 840000000, + "end_idx": 850000000, + "file_size": "30.7 GB" + }, + { + "file_number": "86", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", + "start_idx": 850000000, + "end_idx": 860000000, + "file_size": "30.7 GB" + }, + { + "file_number": "87", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", + "start_idx": 860000000, + "end_idx": 870000000, + "file_size": "30.7 GB" + }, + { + "file_number": "88", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", + "start_idx": 870000000, + "end_idx": 880000000, + "file_size": "30.7 GB" + }, + { + "file_number": "89", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", + "start_idx": 880000000, + "end_idx": 890000000, + "file_size": "30.7 GB" + }, + { + "file_number": "9", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", + "start_idx": 80000000, + "end_idx": 90000000, + "file_size": "30.7 GB" + }, + { + "file_number": "90", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", + "start_idx": 890000000, + "end_idx": 900000000, + "file_size": "30.7 GB" + }, + { + "file_number": "91", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", + "start_idx": 900000000, + "end_idx": 910000000, + "file_size": "30.7 GB" + }, + { + "file_number": "92", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", + "start_idx": 910000000, + "end_idx": 920000000, + "file_size": "30.7 GB" + }, + { + "file_number": "93", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", + "start_idx": 920000000, + "end_idx": 930000000, + "file_size": "30.7 GB" + }, + { + "file_number": "94", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", + "start_idx": 930000000, + "end_idx": 940000000, + "file_size": "30.7 GB" + }, + { + "file_number": "95", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", + "start_idx": 940000000, + "end_idx": 950000000, + "file_size": "30.7 GB" + }, + { + "file_number": "96", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", + "start_idx": 950000000, + "end_idx": 960000000, + "file_size": "30.7 GB" + }, + { + "file_number": "97", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", + "start_idx": 960000000, + "end_idx": 970000000, + "file_size": "30.7 GB" + }, + { + "file_number": "98", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", + "start_idx": 970000000, + "end_idx": 980000000, + "file_size": "30.7 GB" + }, + { + "file_number": "99", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", + "start_idx": 980000000, + "end_idx": 990000000, + "file_size": "30.7 GB" + } + ], + "queries": [ + { + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "link": "https://s3.amazonaws.com/benchmarks.redislabs/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "file_size": "38.7 MB" + } + ] + } +}, { "name": "gist-960-angular", "vector_size": 960, @@ -66,6 +955,14 @@ "path": "dbpedia-openai-1M-1536-angular/dbpedia_openai_1M", "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/dbpedia_openai_1M.tgz" }, + { + "name": "dbpedia-openai-1M-1536-angular-100neighbors", + "vector_size": 1536, + "distance": "cosine", + "type": "tar", + "path": "dbpedia-openai-1M-1536-angular-100neighbors/dbpedia_openai_1M", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/dbpedia_openai_1M.tgz" + }, { "name": "h-and-m-2048-angular-filters", "vector_size": 2048, diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 0f262d34..4f097bfc 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -3,10 +3,13 @@ from datetime import datetime from pathlib import Path from typing import List +import warnings from benchmark import ROOT_DIR from benchmark.dataset import Dataset +from dataset_reader.base_reader import BaseReader from engine.base_client.configure import BaseConfigurator +from engine.base_client.distances import Distance from engine.base_client.search import BaseSearcher from engine.base_client.upload import BaseUploader @@ -14,6 +17,9 @@ RESULTS_DIR.mkdir(exist_ok=True) DETAILED_RESULTS = bool(int(os.getenv("DETAILED_RESULTS", False))) +REPETITIONS = int(os.getenv("REPETITIONS", 3)) + +warnings.filterwarnings("ignore", category=DeprecationWarning) class BaseClient: @@ -36,8 +42,9 @@ def save_search_results( ): now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") + pid = os.getpid() # Get the current process ID experiments_file = ( - f"{self.name}-{dataset_name}-search-{search_id}-{timestamp}.json" + f"{self.name}-{dataset_name}-search-{search_id}-{pid}-{timestamp}.json" ) result_path = RESULTS_DIR / experiments_file with open(result_path, "w") as out: @@ -58,17 +65,19 @@ def save_search_results( return result_path def save_upload_results( - self, dataset_name: str, results: dict, upload_params: dict + self, dataset_name: str, results: dict, upload_params: dict,upload_start_idx:int,upload_end_idx:int, ): now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") - experiments_file = f"{self.name}-{dataset_name}-upload-{timestamp}.json" + experiments_file = f"{self.name}-{dataset_name}-upload-{upload_start_idx}-{upload_end_idx}-{timestamp}.json" with open(RESULTS_DIR / experiments_file, "w") as out: upload_stats = { "params": { "experiment": self.name, "engine": self.engine, "dataset": dataset_name, + "start_idx": upload_start_idx, + "end_idx": upload_end_idx, **upload_params, }, "results": results, @@ -81,15 +90,20 @@ def run_experiment( skip_upload: bool = False, skip_search: bool = False, skip_if_exists: bool = True, + parallels: [int] = [], + upload_start_idx: int = 0, + upload_end_idx: int = -1, + num_queries: int = -1, + ef_runtime: List[int] = [], ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size ) - reader = dataset.get_reader(execution_params.get("normalize", False)) if skip_if_exists: - glob_pattern = f"{self.name}-{dataset.config.name}-search-*-*.json" + pid = os.getpid() # Get the current process ID + glob_pattern = f"{self.name}-{dataset.config.name}-search-*-{pid}-*.json" existing_results = list(RESULTS_DIR.glob(glob_pattern)) if len(existing_results) == len(self.searchers): print( @@ -100,10 +114,12 @@ def run_experiment( if not skip_upload: print("Experiment stage: Configure") self.configurator.configure(dataset) - - print("Experiment stage: Upload") + range_max_str = ":" + if upload_end_idx > 0: + range_max_str += f"{upload_end_idx}" + print(f"Experiment stage: Upload. Vector range [{upload_start_idx}{range_max_str}]") upload_stats = self.uploader.upload( - distance=dataset.config.distance, records=reader.read_data() + distance=dataset.config.distance, records=reader.read_data(upload_start_idx,upload_end_idx) ) if not DETAILED_RESULTS: @@ -117,15 +133,17 @@ def run_experiment( **self.uploader.upload_params, **self.configurator.collection_params, }, + upload_start_idx=upload_start_idx, + upload_end_idx=upload_end_idx, ) if not skip_search: print("Experiment stage: Search") for search_id, searcher in enumerate(self.searchers): - if skip_if_exists: + pid = os.getpid() # Get the current process ID glob_pattern = ( - f"{self.name}-{dataset.config.name}-search-{search_id}-*.json" + f"{self.name}-{dataset.config.name}-search-{search_id}-{pid}-*.json" ) existing_results = list(RESULTS_DIR.glob(glob_pattern)) print("Pattern", glob_pattern, "Results:", existing_results) @@ -136,17 +154,58 @@ def run_experiment( continue search_params = {**searcher.search_params} - search_stats = searcher.search_all( - dataset.config.distance, reader.read_queries() - ) - if not DETAILED_RESULTS: - # Remove verbose stats from search results - search_stats.pop("latencies", None) - search_stats.pop("precisions", None) + ef = "default" + if "search_params" in search_params: + ef = search_params["search_params"].get("ef", "default") + client_count = search_params.get("parallel", 1) + + # Filter by client count if parallels is specified + filter_client_count = len(parallels) > 0 + if filter_client_count and (client_count not in parallels): + print(f"\tSkipping ef runtime: {ef}; #clients {client_count}") + continue + + # Filter by ef runtime if ef_runtime is specified + filter_ef_runtime = len(ef_runtime) > 0 + if filter_ef_runtime and isinstance(ef, int) and (ef not in ef_runtime): + print(f"\tSkipping ef runtime: {ef}; #clients {client_count} (not in ef_runtime filter)") + continue + + if (precision := search_params.get("calibration_precision", None)) is not None: + top = search_params["top"] + calibration_param = search_params["calibration_param"] + calibration_value, calibration_precision = calibrate( + searcher, + calibration_param, + top, + precision, + dataset.config.distance, + reader, + ) + print( + f"Calibrated {top=} {precision=} {calibration_value=} {calibration_precision=!s}" + ) + searcher.search_params["search_params"][calibration_param] = calibration_value + + for repetition in range(1, REPETITIONS + 1): + print( + f"\tRunning repetition {repetition} ef runtime: {ef}; #clients {client_count}" + ) + + search_stats = searcher.search_all( + dataset.config.distance, reader.read_queries(), num_queries + ) + # ensure we specify the client count in the results + search_params["parallel"] = client_count + if not DETAILED_RESULTS: + # Remove verbose stats from search results + search_stats.pop("latencies", None) + search_stats.pop("precisions", None) + + self.save_search_results( + dataset.config.name, search_stats, search_id, search_params + ) - self.save_search_results( - dataset.config.name, search_stats, search_id, search_params - ) print("Experiment stage: Done") print("Results saved to: ", RESULTS_DIR) @@ -156,3 +215,52 @@ def delete_client(self): for s in self.searchers: s.delete_client() + +def calibrate( + searcher: BaseSearcher, + calibration_param: str, + min_value: int, + precision: float, + distance: Distance, + reader: BaseReader, + max_value: int = 1000, +) -> tuple[int, float]: + """Calibrate searcher for a given precision.""" + if min_value > max_value: + raise ValueError( + f"{min_value=} cannot be greater than {max_value=}" + ) + lower_bound = min_value + upper_bound = max_value + lower_bound_visited = False + upper_bound_visited = False + current = (lower_bound + upper_bound) // 2 + previous = current + current_precision = 0 + while True: + searcher.search_params["search_params"][calibration_param] = current + search_stats = searcher.search_all(distance, reader.read_queries()) + previous_precision = current_precision + current_precision = search_stats["mean_precisions"] + if current_precision == precision: + return current, current_precision + elif current_precision > precision: + upper_bound = current + upper_bound_visited = True + else: + lower_bound = current + lower_bound_visited = True + next_value = (lower_bound + upper_bound) // 2 + if ( + (lower_bound_visited and next_value == lower_bound) + or (upper_bound_visited and next_value == upper_bound) + ): + if abs(previous_precision - precision) < abs(current_precision - precision): + final_precision = previous_precision + final_value = previous + else: + final_precision = current_precision + final_value = current + return final_value, final_precision + previous = current + current = next_value diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 93368a3f..c50b3391 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -1,14 +1,18 @@ import functools import time -from multiprocessing import get_context +from multiprocessing import Process, Queue from typing import Iterable, List, Optional, Tuple +from itertools import islice import numpy as np import tqdm +import os from dataset_reader.base_reader import Query DEFAULT_TOP = 10 +MAX_QUERIES = int(os.getenv("MAX_QUERIES", -1)) + class BaseSearcher: @@ -52,17 +56,16 @@ def _search_one(cls, query, top: Optional[int] = None): if query.expected_result: ids = set(x[0] for x in search_res) precision = len(ids.intersection(query.expected_result[:top])) / top - return precision, end - start def search_all( self, distance, queries: Iterable[Query], + num_queries: int = -1, ): parallel = self.search_params.get("parallel", 1) top = self.search_params.get("top", None) - # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params @@ -71,32 +74,123 @@ def search_all( search_one = functools.partial(self.__class__._search_one, top=top) + # Convert queries to a list for potential reuse + queries_list = list(queries) + + # Handle MAX_QUERIES environment variable + if MAX_QUERIES > 0: + queries_list = queries_list[:MAX_QUERIES] + print(f"Limiting queries to [0:{MAX_QUERIES-1}]") + + # Handle num_queries parameter + if num_queries > 0: + # If we need more queries than available, use a cycling generator + if num_queries > len(queries_list) and len(queries_list) > 0: + print(f"Requested {num_queries} queries but only {len(queries_list)} are available.") + print(f"Using a cycling generator to efficiently process queries.") + + # Create a cycling generator function + def cycling_query_generator(queries, total_count): + """Generate queries by cycling through the available ones.""" + count = 0 + while count < total_count: + for query in queries: + if count < total_count: + yield query + count += 1 + else: + break + + # Use the generator instead of creating a full list + used_queries = cycling_query_generator(queries_list, num_queries) + # We need to know the total count for the progress bar + total_query_count = num_queries + else: + used_queries = queries_list[:num_queries] + total_query_count = len(used_queries) + print(f"Using {num_queries} queries") + else: + used_queries = queries_list + total_query_count = len(used_queries) + if parallel == 1: + # Single-threaded execution start = time.perf_counter() - precisions, latencies = list( - zip(*[search_one(query) for query in tqdm.tqdm(queries)]) - ) - else: - ctx = get_context(self.get_mp_start_method()) - with ctx.Pool( - processes=parallel, - initializer=self.__class__.init_client, - initargs=( + # Create a progress bar with the correct total + pbar = tqdm.tqdm(total=total_query_count, desc="Processing queries", unit="queries") + + # Process queries with progress updates + results = [] + for query in used_queries: + results.append(search_one(query)) + pbar.update(1) + + # Close the progress bar + pbar.close() + + total_time = time.perf_counter() - start + else: + # Dynamically calculate chunk size based on total_query_count + chunk_size = max(1, total_query_count // parallel) + + # If used_queries is a generator, we need to handle it differently + if hasattr(used_queries, '__next__'): + # For generators, we'll create chunks on-the-fly + query_chunks = [] + remaining = total_query_count + while remaining > 0: + current_chunk_size = min(chunk_size, remaining) + chunk = [next(used_queries) for _ in range(current_chunk_size)] + query_chunks.append(chunk) + remaining -= current_chunk_size + else: + # For lists, we can use the chunked_iterable function + query_chunks = list(chunked_iterable(used_queries, chunk_size)) + + # Function to be executed by each worker process + def worker_function(chunk, result_queue): + self.__class__.init_client( self.host, distance, self.connection_params, self.search_params, - ), - ) as pool: - if parallel > 10: - time.sleep(15) # Wait for all processes to start - start = time.perf_counter() - precisions, latencies = list( - zip(*pool.imap_unordered(search_one, iterable=tqdm.tqdm(queries))) ) + self.setup_search() + results = process_chunk(chunk, search_one) + result_queue.put(results) + + # Create a queue to collect results + result_queue = Queue() - total_time = time.perf_counter() - start + # Create worker processes + processes = [] + for chunk in query_chunks: + process = Process(target=worker_function, args=(chunk, result_queue)) + processes.append(process) + + # Start measuring time for the critical work + start = time.perf_counter() + + # Start worker processes + for process in processes: + process.start() + + # Collect results from all worker processes + results = [] + for _ in processes: + chunk_results = result_queue.get() + results.extend(chunk_results) + + # Stop measuring time for the critical work + total_time = time.perf_counter() - start + + # Wait for all worker processes to finish + for process in processes: + process.join() + + # Extract precisions and latencies (outside the timed section) + precisions, latencies = zip(*results) self.__class__.delete_client() @@ -108,6 +202,7 @@ def search_all( "min_time": np.min(latencies), "max_time": np.max(latencies), "rps": len(latencies) / total_time, + "p50_time": np.percentile(latencies, 50), "p95_time": np.percentile(latencies, 95), "p99_time": np.percentile(latencies, 99), "precisions": precisions, @@ -123,3 +218,21 @@ def post_search(self): @classmethod def delete_client(cls): pass + + +def chunked_iterable(iterable, size): + """Yield successive chunks of a given size from an iterable.""" + it = iter(iterable) + while chunk := list(islice(it, size)): + yield chunk + + +def process_chunk(chunk, search_one): + """Process a chunk of queries using the search_one function.""" + # No progress bar in worker processes to avoid cluttering the output + return [search_one(query) for query in chunk] + + +def process_chunk_wrapper(chunk, search_one): + """Wrapper to process a chunk of queries.""" + return process_chunk(chunk, search_one) diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index d9d53d94..2bda5479 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -53,12 +53,15 @@ def upload( self.upload_params, ), ) as pool: - latencies = list( - pool.imap( - self.__class__._upload_batch, - iter_batches(tqdm.tqdm(records), batch_size), + try: + latencies = list( + pool.imap( + self.__class__._upload_batch, + iter_batches(tqdm.tqdm(records), batch_size), + ) ) - ) + except Exception as e: + raise e upload_time = time.perf_counter() - start @@ -70,6 +73,7 @@ def upload( print(f"Total import time: {total_time}") + memory_usage = self.get_memory_usage() self.delete_client() return { @@ -77,6 +81,9 @@ def upload( "upload_time": upload_time, "total_time": total_time, "latencies": latencies, + "parallel": parallel, + "batch_size": batch_size, + "memory_usage": memory_usage, } @classmethod @@ -92,6 +99,10 @@ def _upload_batch( def post_upload(cls, distance): return {} + @classmethod + def get_memory_usage(cls): + return {} + @classmethod def upload_batch( cls, ids: List[int], vectors: List[list], metadata: List[Optional[dict]] diff --git a/engine/clients/client_factory.py b/engine/clients/client_factory.py index a74df2ab..e92bd7af 100644 --- a/engine/clients/client_factory.py +++ b/engine/clients/client_factory.py @@ -1,5 +1,6 @@ from abc import ABC -from typing import List, Type +import importlib +from typing import Dict, List, Type from engine.base_client.client import ( BaseClient, @@ -7,59 +8,52 @@ BaseSearcher, BaseUploader, ) -from engine.clients.elasticsearch import ( - ElasticConfigurator, - ElasticSearcher, - ElasticUploader, -) -from engine.clients.milvus import MilvusConfigurator, MilvusSearcher, MilvusUploader -from engine.clients.opensearch import ( - OpenSearchConfigurator, - OpenSearchSearcher, - OpenSearchUploader, -) -from engine.clients.pgvector import ( - PgVectorConfigurator, - PgVectorSearcher, - PgVectorUploader, -) -from engine.clients.qdrant import QdrantConfigurator, QdrantSearcher, QdrantUploader -from engine.clients.redis import RedisConfigurator, RedisSearcher, RedisUploader -from engine.clients.weaviate import ( - WeaviateConfigurator, - WeaviateSearcher, - WeaviateUploader, -) -ENGINE_CONFIGURATORS = { - "qdrant": QdrantConfigurator, - "weaviate": WeaviateConfigurator, - "milvus": MilvusConfigurator, - "elasticsearch": ElasticConfigurator, - "opensearch": OpenSearchConfigurator, - "redis": RedisConfigurator, - "pgvector": PgVectorConfigurator, -} - -ENGINE_UPLOADERS = { - "qdrant": QdrantUploader, - "weaviate": WeaviateUploader, - "milvus": MilvusUploader, - "elasticsearch": ElasticUploader, - "opensearch": OpenSearchUploader, - "redis": RedisUploader, - "pgvector": PgVectorUploader, -} - -ENGINE_SEARCHERS = { - "qdrant": QdrantSearcher, - "weaviate": WeaviateSearcher, - "milvus": MilvusSearcher, - "elasticsearch": ElasticSearcher, - "opensearch": OpenSearchSearcher, - "redis": RedisSearcher, - "pgvector": PgVectorSearcher, -} +# Dictionary to store dynamically imported client classes +_engine_classes = {} + +def _import_engine_classes(engine_name: str) -> Dict[str, Type]: + """ + Dynamically import client classes for a specific engine. + + Args: + engine_name: The name of the engine (e.g., 'redis', 'qdrant') + + Returns: + Dictionary with configurator, uploader, and searcher classes + """ + if engine_name in _engine_classes: + return _engine_classes[engine_name] + + # Handle special case for vectorsets which uses redis prefix + if engine_name == "vectorsets": + module_name = f"engine.clients.vectorsets" + class_prefix = "RedisVset" + else: + module_name = f"engine.clients.{engine_name}" + # Convert first letter to uppercase for class name + class_prefix = engine_name[0].upper() + engine_name[1:] + + try: + module = importlib.import_module(module_name) + configurator_class = getattr(module, f"{class_prefix}Configurator") + uploader_class = getattr(module, f"{class_prefix}Uploader") + searcher_class = getattr(module, f"{class_prefix}Searcher") + + _engine_classes[engine_name] = { + "configurator": configurator_class, + "uploader": uploader_class, + "searcher": searcher_class + } + + return _engine_classes[engine_name] + except (ImportError, AttributeError) as e: + raise ImportError(f"Failed to import classes for engine '{engine_name}': {e}") + +# Empty dictionaries that will be populated on demand +ENGINE_CONFIGURATORS = {} +ENGINE_UPLOADERS = {} +ENGINE_SEARCHERS = {} class ClientFactory(ABC): @@ -69,7 +63,17 @@ def __init__(self, host): def _create_configurator(self, experiment) -> BaseConfigurator: self.engine = experiment["engine"] - engine_configurator_class = ENGINE_CONFIGURATORS[experiment["engine"]] + engine_name = experiment["engine"] + + # Dynamically import engine classes if not already imported + if engine_name not in _engine_classes: + _import_engine_classes(engine_name) + # Add to the global dictionaries for compatibility + ENGINE_CONFIGURATORS[engine_name] = _engine_classes[engine_name]["configurator"] + ENGINE_UPLOADERS[engine_name] = _engine_classes[engine_name]["uploader"] + ENGINE_SEARCHERS[engine_name] = _engine_classes[engine_name]["searcher"] + + engine_configurator_class = _engine_classes[engine_name]["configurator"] engine_configurator = engine_configurator_class( self.host, collection_params={**experiment.get("collection_params", {})}, @@ -78,7 +82,8 @@ def _create_configurator(self, experiment) -> BaseConfigurator: return engine_configurator def _create_uploader(self, experiment) -> BaseUploader: - engine_uploader_class = ENGINE_UPLOADERS[experiment["engine"]] + engine_name = experiment["engine"] + engine_uploader_class = _engine_classes[engine_name]["uploader"] engine_uploader = engine_uploader_class( self.host, connection_params={**experiment.get("connection_params", {})}, @@ -87,9 +92,8 @@ def _create_uploader(self, experiment) -> BaseUploader: return engine_uploader def _create_searchers(self, experiment) -> List[BaseSearcher]: - engine_searcher_class: Type[BaseSearcher] = ENGINE_SEARCHERS[ - experiment["engine"] - ] + engine_name = experiment["engine"] + engine_searcher_class: Type[BaseSearcher] = _engine_classes[engine_name]["searcher"] engine_searchers = [ engine_searcher_class( diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 19b59d74..183284d2 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,4 +1,59 @@ -ELASTIC_PORT = 9200 -ELASTIC_INDEX = "bench" -ELASTIC_USER = "elastic" -ELASTIC_PASSWORD = "passwd" +import os +import urllib3 +import time +from elasticsearch import Elasticsearch + +ELASTIC_PORT = int(os.getenv("ELASTIC_PORT", 9200)) +ELASTIC_INDEX = os.getenv("ELASTIC_INDEX", "bench") +ELASTIC_USER = os.getenv("ELASTIC_USER", "elastic") +ELASTIC_PASSWORD = os.getenv("ELASTIC_PASSWORD", "passwd") +ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) +ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 300)) +ELASTIC_INDEX_TIMEOUT = os.getenv("ELASTIC_INDEX_TIMEOUT", "30m") +ELASTIC_INDEX_REFRESH_INTERVAL = os.getenv("ELASTIC_INDEX_REFRESH_INTERVAL", "10s") +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + +def get_es_client(host, connection_params): + client: Elasticsearch = None + init_params = { + **{ + "verify_certs": False, + "request_timeout": ELASTIC_TIMEOUT, + "retry_on_timeout": True, + "ssl_show_warn": False, + }, + **connection_params, + } + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{ELASTIC_PORT}" + if ELASTIC_API_KEY is None: + client = Elasticsearch( + url, + basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), + **init_params, + ) + else: + client = Elasticsearch( + url, + api_key=ELASTIC_API_KEY, + **init_params, + ) + assert client.ping() + return client + + +def _wait_for_es_status(client, status="yellow"): + print(f"waiting for ES {status} status...") + for _ in range(100): + try: + client.cluster.health(wait_for_status=status) + return client + except ConnectionError: + time.sleep(0.1) + else: + # timeout + raise Exception("Elasticsearch failed to start.") diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index 76f64eb8..7db91382 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -6,9 +6,10 @@ from engine.base_client.distances import Distance from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, + ELASTIC_TIMEOUT, + ELASTIC_INDEX_TIMEOUT, + ELASTIC_INDEX_REFRESH_INTERVAL, ) @@ -25,27 +26,19 @@ class ElasticConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - self.client = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + self.client = get_es_client(host, connection_params) def clean(self): + print("Ensuring the index does not exist...") try: self.client.indices.delete( - index=ELASTIC_INDEX, timeout="5m", master_timeout="5m" + index=ELASTIC_INDEX, + timeout=ELASTIC_INDEX_TIMEOUT, + master_timeout=ELASTIC_INDEX_TIMEOUT, ) except NotFoundError: pass + print("Finished ensuring the index does not exist...") def recreate(self, dataset: Dataset, collection_params): if dataset.config.distance == Distance.DOT: @@ -56,11 +49,14 @@ def recreate(self, dataset: Dataset, collection_params): self.client.indices.create( index=ELASTIC_INDEX, + timeout=ELASTIC_INDEX_TIMEOUT, + master_timeout=ELASTIC_INDEX_TIMEOUT, + wait_for_active_shards="all", settings={ "index": { "number_of_shards": 1, "number_of_replicas": 0, - "refresh_interval": -1, + "refresh_interval": ELASTIC_INDEX_REFRESH_INTERVAL, } }, mappings={ diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index 29d20ec5..b7b09e2f 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -1,3 +1,4 @@ +import copy import multiprocessing as mp import uuid from typing import List, Tuple @@ -5,12 +6,7 @@ from elasticsearch import Elasticsearch from engine.base_client.search import BaseSearcher -from engine.clients.elasticsearch.config import ( - ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client from engine.clients.elasticsearch.parser import ElasticConditionParser @@ -38,12 +34,10 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic }, **connection_params, } - cls.client: Elasticsearch = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) - cls.search_params = search_params + cls.client = get_es_client(host, connection_params) + cls.search_params = copy.deepcopy(search_params) + # pop parallel + cls.search_params.pop("parallel", "1") @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 0d5c6f2b..e295cb5e 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -2,14 +2,14 @@ import uuid from typing import List, Optional -from elasticsearch import Elasticsearch +import elastic_transport +from elasticsearch import Elasticsearch, ApiError from engine.base_client.upload import BaseUploader from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, + _wait_for_es_status, ) @@ -28,19 +28,7 @@ def get_mp_start_method(cls): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - cls.client = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + cls.client = get_es_client(host, connection_params) cls.upload_params = upload_params @classmethod @@ -65,7 +53,23 @@ def upload_batch( @classmethod def post_upload(cls, _distance): - cls.client.indices.forcemerge( - index=ELASTIC_INDEX, wait_for_completion=True, max_num_segments=1 - ) + print("forcing the merge into 1 segment...") + tries = 30 + for i in range(tries + 1): + try: + cls.client.indices.forcemerge( + index=ELASTIC_INDEX, wait_for_completion=True, max_num_segments=1 + ) + except (elastic_transport.TlsError, ApiError) as e: + if i < tries: # i is zero indexed + print( + "Received the following error during retry {}/{} while waiting for ES index to be ready... {}".format( + i, tries, e.__str__() + ) + ) + continue + else: + raise + _wait_for_es_status(cls.client) + break return {} diff --git a/engine/clients/milvus/config.py b/engine/clients/milvus/config.py index 793ecfb7..df5acd3d 100644 --- a/engine/clients/milvus/config.py +++ b/engine/clients/milvus/config.py @@ -1,10 +1,13 @@ -from pymilvus import DataType - +from pymilvus import DataType, connections +import os from engine.base_client.distances import Distance MILVUS_COLLECTION_NAME = "Benchmark" MILVUS_DEFAULT_ALIAS = "bench" MILVUS_DEFAULT_PORT = "19530" +MILVUS_PASS = os.getenv("MILVUS_PASS", "") +MILVUS_USER = os.getenv("MILVUS_USER", "") +MILVUS_PORT = os.getenv("MILVUS_PORT", MILVUS_DEFAULT_PORT) DISTANCE_MAPPING = { Distance.L2: "L2", @@ -24,3 +27,22 @@ DataType.VARCHAR: "---MILVUS DOES NOT ACCEPT EMPTY STRINGS---", DataType.FLOAT: 0.0, } + + +def get_milvus_client(connection_params: dict, host: str, alias: str): + h = "" + uri = "" + if host.startswith("http"): + uri = host + else: + h = host + client = connections.connect( + alias=alias, + host=h, + uri=uri, + port=MILVUS_PORT, + user=MILVUS_USER, + password=MILVUS_PASS, + **connection_params + ) + return client diff --git a/engine/clients/milvus/configure.py b/engine/clients/milvus/configure.py index 85f2c774..b8fea571 100644 --- a/engine/clients/milvus/configure.py +++ b/engine/clients/milvus/configure.py @@ -17,7 +17,7 @@ DTYPE_EXTRAS, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, + get_milvus_client, ) @@ -32,20 +32,18 @@ class MilvusConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - self.client = connections.connect( - alias=MILVUS_DEFAULT_ALIAS, - host=host, - port=str(connection_params.get("port", MILVUS_DEFAULT_PORT)), - **connection_params, - ) + self.client = get_milvus_client(connection_params, host, MILVUS_DEFAULT_ALIAS) print("established connection") def clean(self): - try: + if utility.has_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS): + print("dropping collection named {MILVUS_COLLECTION_NAME}...") utility.drop_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) + print("dropped collection named {MILVUS_COLLECTION_NAME}...") + assert ( utility.has_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) - except MilvusException: - pass + is False + ) def recreate(self, dataset: Dataset, collection_params): idx = FieldSchema( diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index 9b155f7b..f93a8fea 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -8,7 +8,7 @@ DISTANCE_MAPPING, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, + get_milvus_client, ) from engine.clients.milvus.parser import MilvusConditionParser @@ -22,12 +22,7 @@ class MilvusSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - cls.client = connections.connect( - alias=MILVUS_DEFAULT_ALIAS, - host=host, - port=str(connection_params.get("port", MILVUS_DEFAULT_PORT)), - **connection_params - ) + cls.client = get_milvus_client(connection_params, host, MILVUS_DEFAULT_ALIAS) cls.collection = Collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) cls.search_params = search_params cls.distance = DISTANCE_MAPPING[distance] diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 8f897a45..6d0749ca 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -1,5 +1,7 @@ +import logging import multiprocessing as mp from typing import List, Optional +import backoff from pymilvus import ( Collection, @@ -14,7 +16,7 @@ DTYPE_DEFAULT, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, + get_milvus_client, ) @@ -30,12 +32,7 @@ def get_mp_start_method(cls): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - cls.client = connections.connect( - alias=MILVUS_DEFAULT_ALIAS, - host=host, - port=str(connection_params.get("port", MILVUS_DEFAULT_PORT)), - **connection_params - ) + cls.client = get_milvus_client(connection_params, host, MILVUS_DEFAULT_ALIAS) cls.collection = Collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) cls.upload_params = upload_params cls.distance = DISTANCE_MAPPING[distance] @@ -55,6 +52,13 @@ def upload_batch( ] else: field_values = [] + cls.upload_with_backoff(field_values, ids, vectors) + + @classmethod + @backoff.on_exception( + backoff.expo, MilvusException, max_time=600, backoff_log_level=logging.WARN + ) + def upload_with_backoff(cls, field_values, ids, vectors): cls.collection.insert([ids, vectors] + field_values) @classmethod diff --git a/engine/clients/opensearch/config.py b/engine/clients/opensearch/config.py index 57001884..85af5959 100644 --- a/engine/clients/opensearch/config.py +++ b/engine/clients/opensearch/config.py @@ -1,4 +1,34 @@ -OPENSEARCH_PORT = 9200 -OPENSEARCH_INDEX = "bench" -OPENSEARCH_USER = "opensearch" -OPENSEARCH_PASSWORD = "passwd" +import os + +from opensearchpy import OpenSearch + +OPENSEARCH_PORT = int(os.getenv("OPENSEARCH_PORT", 9200)) +OPENSEARCH_INDEX = os.getenv("OPENSEARCH_INDEX", "bench") +OPENSEARCH_USER = os.getenv("OPENSEARCH_USER", "opensearch") +OPENSEARCH_PASSWORD = os.getenv("OPENSEARCH_PASSWORD", "passwd") +OPENSEARCH_TIMEOUT = int(os.getenv("OPENSEARCH_TIMEOUT", 300)) +OPENSEARCH_INDEX_TIMEOUT = int(os.getenv("OPENSEARCH_INDEX_TIMEOUT", 300)) + + +def get_opensearch_client(host, connection_params): + init_params = { + **{ + "verify_certs": False, + "request_timeout": OPENSEARCH_TIMEOUT, + "retry_on_timeout": True, + }, + **connection_params, + } + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{OPENSEARCH_PORT}" + + client = OpenSearch( + f"http://{host}:{OPENSEARCH_PORT}", + basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), + **init_params, + ) + assert client.ping() + return client diff --git a/engine/clients/opensearch/configure.py b/engine/clients/opensearch/configure.py index bd550917..d4541e1b 100644 --- a/engine/clients/opensearch/configure.py +++ b/engine/clients/opensearch/configure.py @@ -6,9 +6,8 @@ from engine.base_client.distances import Distance from engine.clients.opensearch.config import ( OPENSEARCH_INDEX, - OPENSEARCH_PASSWORD, - OPENSEARCH_PORT, - OPENSEARCH_USER, + OPENSEARCH_INDEX_TIMEOUT, + get_opensearch_client, ) @@ -25,26 +24,14 @@ class OpenSearchConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - self.client = OpenSearch( - f"http://{host}:{OPENSEARCH_PORT}", - basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), - **init_params, - ) + self.client = get_opensearch_client(host, connection_params) def clean(self): try: self.client.indices.delete( index=OPENSEARCH_INDEX, params={ - "timeout": 300, + "timeout": OPENSEARCH_INDEX_TIMEOUT, }, ) except NotFoundError: @@ -53,7 +40,7 @@ def clean(self): def recreate(self, dataset: Dataset, collection_params): if dataset.config.distance == Distance.DOT: raise IncompatibilityError - if dataset.config.vector_size > 1024: + if dataset.config.vector_size > 2048: raise IncompatibilityError self.client.indices.create( diff --git a/engine/clients/opensearch/search.py b/engine/clients/opensearch/search.py index 8f388380..0a46c5b0 100644 --- a/engine/clients/opensearch/search.py +++ b/engine/clients/opensearch/search.py @@ -5,12 +5,7 @@ from opensearchpy import OpenSearch from engine.base_client.search import BaseSearcher -from engine.clients.opensearch.config import ( - OPENSEARCH_INDEX, - OPENSEARCH_PASSWORD, - OPENSEARCH_PORT, - OPENSEARCH_USER, -) +from engine.clients.opensearch.config import OPENSEARCH_INDEX, get_opensearch_client from engine.clients.opensearch.parser import OpenSearchConditionParser @@ -30,19 +25,7 @@ def get_mp_start_method(cls): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - cls.client: OpenSearch = OpenSearch( - f"http://{host}:{OPENSEARCH_PORT}", - basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), - **init_params, - ) + cls.client = get_opensearch_client(host, connection_params) cls.search_params = search_params @classmethod diff --git a/engine/clients/opensearch/upload.py b/engine/clients/opensearch/upload.py index 46a7151d..590242cc 100644 --- a/engine/clients/opensearch/upload.py +++ b/engine/clients/opensearch/upload.py @@ -5,12 +5,7 @@ from opensearchpy import OpenSearch from engine.base_client.upload import BaseUploader -from engine.clients.opensearch.config import ( - OPENSEARCH_INDEX, - OPENSEARCH_PASSWORD, - OPENSEARCH_PORT, - OPENSEARCH_USER, -) +from engine.clients.opensearch.config import OPENSEARCH_INDEX, get_opensearch_client class ClosableOpenSearch(OpenSearch): @@ -28,19 +23,7 @@ def get_mp_start_method(cls): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - cls.client = OpenSearch( - f"http://{host}:{OPENSEARCH_PORT}", - basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), - **init_params, - ) + cls.client = get_opensearch_client(host, connection_params) cls.upload_params = upload_params @classmethod diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index 31d34007..b879b13a 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -1,3 +1,65 @@ import os +import random +import time + +import requests QDRANT_COLLECTION_NAME = os.getenv("QDRANT_COLLECTION_NAME", "benchmark") +QDRANT_API_KEY = os.getenv("QDRANT_API_KEY", None) +QDRANT_URL = os.getenv("QDRANT_URL", None) +QDRANT_ACCOUNT_ID = os.getenv("QDRANT_ACCOUNT_ID", None) +QDRANT_CLUSTER_ID = os.getenv("QDRANT_CLUSTER_ID", None) +QDRANT_AUTH_TOKEN = os.getenv("QDRANT_AUTH_TOKEN", None) +QDRANT_MAX_OPTIMIZATION_THREADS = os.getenv("QDRANT_MAX_OPTIMIZATION_THREADS", None) + + +def get_collection_info(endpoint, collection, api_key): + result = {} + url = f"{endpoint}/collections/{collection}" + headers = {"api-key": f"{api_key}"} + + try: + response = requests.get(url, headers=headers) + # Raise an error for bad status codes + response.raise_for_status() + result = response.json() + except requests.exceptions.RequestException as e: + print(f"An error occurred: {e}") + result = {"error": str(e)} + + return result + + +def get_qdrant_cloud_usage(account_id, cluster_id, token): + result = {} + url = f"https://cloud.qdrant.io/api/v1/accounts/{account_id}/clusters/{cluster_id}/metrics" + headers = {"authorization": f"Bearer {token}"} + + try: + response = requests.get(url, headers=headers) + # Raise an error for bad status codes + response.raise_for_status() + result = response.json() + except requests.exceptions.RequestException as e: + print(f"An error occurred: {e}") + result = {"error": str(e)} + + return result + + +def retry_with_exponential_backoff( + func, *args, max_retries=10, base_delay=1, max_delay=90, **kwargs +): + retries = 0 + while retries < max_retries: + try: + return func(*args, **kwargs) + except Exception as e: + delay = min(base_delay * 2**retries + random.uniform(0, 1), max_delay) + time.sleep(delay) + retries += 1 + print(f"received the following exception on try #{retries}: {e.__str__}") + if retries == max_retries: + raise e + else: + print("retrying...") diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 36e4f007..6a0b8161 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -4,7 +4,12 @@ from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME +from engine.clients.qdrant.config import ( + QDRANT_API_KEY, + QDRANT_COLLECTION_NAME, + QDRANT_URL, + retry_with_exponential_backoff, +) class QdrantConfigurator(BaseConfigurator): @@ -23,14 +28,21 @@ class QdrantConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - - self.client = QdrantClient(host=host, **connection_params) + if QDRANT_URL is None: + self.client = QdrantClient( + host=host, api_key=QDRANT_API_KEY, **connection_params + ) + else: + self.client = QdrantClient( + url=QDRANT_URL, api_key=QDRANT_API_KEY, **connection_params + ) def clean(self): - self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) + res = self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) def recreate(self, dataset: Dataset, collection_params): - self.client.recreate_collection( + retry_with_exponential_backoff( + self.client.recreate_collection, collection_name=QDRANT_COLLECTION_NAME, vectors_config=rest.VectorParams( size=dataset.config.vector_size, diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 591a91b1..6ff38e25 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -7,7 +7,11 @@ from qdrant_client.http import models as rest from engine.base_client.search import BaseSearcher -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME +from engine.clients.qdrant.config import ( + QDRANT_API_KEY, + QDRANT_COLLECTION_NAME, + QDRANT_URL, +) from engine.clients.qdrant.parser import QdrantConditionParser @@ -20,12 +24,23 @@ class QdrantSearcher(BaseSearcher): def init_client(cls, host, distance, connection_params: dict, search_params: dict): os.environ["GRPC_ENABLE_FORK_SUPPORT"] = "true" os.environ["GRPC_POLL_STRATEGY"] = "epoll,poll" - cls.client: QdrantClient = QdrantClient( - host, - prefer_grpc=True, - limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), - **connection_params - ) + if QDRANT_URL is None: + cls.client: QdrantClient = QdrantClient( + host, + api_key=QDRANT_API_KEY, + prefer_grpc=True, + limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), + **connection_params + ) + else: + cls.client: QdrantClient = QdrantClient( + url=QDRANT_URL, + api_key=QDRANT_API_KEY, + prefer_grpc=True, + limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), + **connection_params + ) + cls.search_params = search_params # Uncomment for gRPC diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 32b1a26f..e280f45e 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -1,3 +1,4 @@ +import json import os import time from typing import List, Optional @@ -6,7 +7,17 @@ from qdrant_client.http.models import Batch, CollectionStatus, OptimizersConfigDiff from engine.base_client.upload import BaseUploader -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME +from engine.clients.qdrant.config import ( + QDRANT_ACCOUNT_ID, + QDRANT_API_KEY, + QDRANT_AUTH_TOKEN, + QDRANT_CLUSTER_ID, + QDRANT_COLLECTION_NAME, + QDRANT_MAX_OPTIMIZATION_THREADS, + QDRANT_URL, + get_collection_info, + get_qdrant_cloud_usage, +) class QdrantUploader(BaseUploader): @@ -17,7 +28,17 @@ class QdrantUploader(BaseUploader): def init_client(cls, host, distance, connection_params, upload_params): os.environ["GRPC_ENABLE_FORK_SUPPORT"] = "true" os.environ["GRPC_POLL_STRATEGY"] = "epoll,poll" - cls.client = QdrantClient(host=host, prefer_grpc=True, **connection_params) + if QDRANT_URL is None: + cls.client = QdrantClient( + host=host, api_key=QDRANT_API_KEY, prefer_grpc=True, **connection_params + ) + else: + cls.client = QdrantClient( + url=QDRANT_URL, + api_key=QDRANT_API_KEY, + prefer_grpc=True, + **connection_params, + ) cls.upload_params = upload_params @classmethod @@ -36,11 +57,14 @@ def upload_batch( @classmethod def post_upload(cls, _distance): + max_optimization_threads = QDRANT_MAX_OPTIMIZATION_THREADS + if max_optimization_threads is not None: + max_optimization_threads = int(max_optimization_threads) cls.client.update_collection( collection_name=QDRANT_COLLECTION_NAME, optimizer_config=OptimizersConfigDiff( # indexing_threshold=10_000, - max_optimization_threads=1, + max_optimization_threads=max_optimization_threads, ), ) @@ -67,3 +91,24 @@ def wait_collection_green(cls): def delete_client(cls): if cls.client is not None: del cls.client + + def get_memory_usage(cls): + collection_info = get_collection_info( + QDRANT_URL, QDRANT_COLLECTION_NAME, QDRANT_API_KEY + ) + used_memory = {} + # Extract memory usage information + if ( + QDRANT_ACCOUNT_ID is not None + and QDRANT_CLUSTER_ID is not None + and QDRANT_AUTH_TOKEN is not None + ): + print(f"Tring to fetch Qdrant cloud usage from Cluster {QDRANT_CLUSTER_ID}") + used_memory = get_qdrant_cloud_usage( + QDRANT_ACCOUNT_ID, QDRANT_CLUSTER_ID, QDRANT_AUTH_TOKEN + ) + + return { + "used_memory": used_memory, + "collection_info": collection_info, + } diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index e9ef6075..2bf68fc2 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -4,6 +4,14 @@ REDIS_AUTH = os.getenv("REDIS_AUTH", None) REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) +# One of BATCHES and ADHOC_BF +# check https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/vectors/#pre-filter-query-attributes-hybrid-approach +REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", "") +REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 0)) +REDIS_JUST_INDEX = bool(os.getenv("REDIS_JUST_INDEX", 0)) +GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) +GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) -# 90 seconds timeout + +# 60 seconds timeout REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index ccf3776c..20544c3d 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -1,21 +1,23 @@ import redis +import time from redis import Redis, RedisCluster from redis.commands.search.field import ( GeoField, NumericField, - TagField, TextField, VectorField, + TagField, ) from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance from engine.clients.redis.config import ( - REDIS_AUTH, - REDIS_CLUSTER, REDIS_PORT, + REDIS_AUTH, REDIS_USER, + REDIS_CLUSTER, + REDIS_KEEP_DOCUMENTS, ) @@ -51,10 +53,24 @@ def clean(self): for conn in conns: index = conn.ft() try: - index.dropindex(delete_documents=True) + index.dropindex(delete_documents=(not REDIS_KEEP_DOCUMENTS)) except redis.ResponseError as e: - if "Unknown Index name" not in e.__str__(): - print(e) + str_err = e.__str__() + if ( + "Unknown Index name" not in str_err + and "Index does not exist" not in str_err + and "no such index" not in str_err + ): + # google memorystore does not support the DD argument. + # in that case we can flushall + if "wrong number of arguments for FT.DROPINDEX command" in str_err: + print( + "Given the FT.DROPINDEX command failed, we're flushing the entire DB..." + ) + if REDIS_KEEP_DOCUMENTS is False: + conn.flushall() + else: + raise e def recreate(self, dataset: Dataset, collection_params): self.clean() @@ -76,15 +92,21 @@ def recreate(self, dataset: Dataset, collection_params): for field_name, field_type in dataset.config.schema.items() if field_type == "keyword" ] + algorithm_config = {} + # by default we use hnsw + algo = collection_params.get("algorithm", "hnsw") + data_type = collection_params.get("data_type", "float32") + algorithm_config = collection_params.get(f"{algo}_config", {}) + print(f"Using algorithm {algo} with config {algorithm_config}") index_fields = [ VectorField( name="vector", - algorithm="HNSW", + algorithm=algo, attributes={ - "TYPE": "FLOAT32", + "TYPE": data_type, "DIM": dataset.config.vector_size, "DISTANCE_METRIC": self.DISTANCE_MAPPING[dataset.config.distance], - **self.collection_params.get("hnsw_config", {}), + **algorithm_config, }, ) ] + payload_fields diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index dca31919..31cf27bd 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -1,18 +1,19 @@ import random from typing import List, Tuple - +from ml_dtypes import bfloat16 import numpy as np from redis import Redis, RedisCluster from redis.commands.search.query import Query - from engine.base_client.search import BaseSearcher from engine.clients.redis.config import ( - REDIS_AUTH, - REDIS_CLUSTER, REDIS_PORT, REDIS_QUERY_TIMEOUT, + REDIS_AUTH, REDIS_USER, + REDIS_CLUSTER, + REDIS_HYBRID_POLICY, ) + from engine.clients.redis.parser import RedisConditionParser @@ -28,8 +29,30 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) cls.search_params = search_params - cls.knn_conditions = "EF_RUNTIME $EF" + cls.knn_conditions = "" + cls.algorithm = cls.search_params.get("algorithm", "hnsw").upper() + cls.hybrid_policy = REDIS_HYBRID_POLICY + + if cls.algorithm == "HNSW": + # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy + if cls.hybrid_policy != "ADHOC_BF": + cls.knn_conditions = "EF_RUNTIME $EF" + elif cls.algorithm == "SVS-VAMANA": + cls.knn_conditions = "WS_SEARCH $WS_SEARCH" + cls.data_type = "FLOAT32" + if "search_params" in cls.search_params: + cls.data_type = ( + cls.search_params["search_params"].get("data_type", "FLOAT32").upper() + ) + cls.np_data_type = np.float32 + if cls.data_type == "FLOAT64": + cls.np_data_type = np.float64 + if cls.data_type == "FLOAT16": + cls.np_data_type = np.float16 + if cls.data_type == "BFLOAT16": + cls.np_data_type = bfloat16 cls._is_cluster = True if REDIS_CLUSTER else False + # In the case of CLUSTER API enabled we randomly select the starting primary shard # when doing the client initialization to evenly distribute the load among the cluster cls.conns = [cls.client] @@ -43,6 +66,9 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) + hybrid_policy = "" + if cls.hybrid_policy != "": + hybrid_policy = '=>{$HYBRID_POLICY: '+ cls.hybrid_policy + ' }' if conditions is None: prefilter_condition = "*" params = {} @@ -51,7 +77,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: q = ( Query( - f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]" + f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]{hybrid_policy}" ) .sort_by("vector_score", asc=True) .paging(0, top) @@ -62,11 +88,16 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: .timeout(REDIS_QUERY_TIMEOUT) ) params_dict = { - "vec_param": np.array(vector).astype(np.float32).tobytes(), + "vec_param": np.array(vector).astype(cls.np_data_type).tobytes(), "K": top, - "EF": cls.search_params["search_params"]["ef"], **params, } + if cls.algorithm == "HNSW": + # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy + if cls.hybrid_policy != "ADHOC_BF": + params_dict["EF"] = cls.search_params["search_params"]["ef"] + if cls.algorithm == "SVS-VAMANA": + params_dict["WS_SEARCH"] = cls.search_params["search_params"]["WS_SEARCH"] results = cls._ft.search(q, query_params=params_dict) return [(int(result.id), float(result.vector_score)) for result in results.docs] diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 89bc0a3b..2022290c 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -1,20 +1,28 @@ +import time from typing import List, Optional - +from ml_dtypes import bfloat16 +import requests +import json +import random import numpy as np from redis import Redis, RedisCluster - from engine.base_client.upload import BaseUploader from engine.clients.redis.config import ( - REDIS_AUTH, - REDIS_CLUSTER, REDIS_PORT, + REDIS_AUTH, REDIS_USER, + REDIS_CLUSTER, + GPU_STATS, + GPU_STATS_ENDPOINT, + REDIS_JUST_INDEX, ) from engine.clients.redis.helper import convert_to_redis_coords class RedisUploader(BaseUploader): client = None + host = None + client_decode = None upload_params = {} @classmethod @@ -23,15 +31,35 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) + cls.host = host + cls.client_decode = redis_constructor( + host=host, + port=REDIS_PORT, + password=REDIS_AUTH, + username=REDIS_USER, + decode_responses=True, + ) cls.upload_params = upload_params + cls.algorithm = cls.upload_params.get("algorithm", "hnsw").upper() + cls.data_type = cls.upload_params.get("data_type", "FLOAT32").upper() + cls.np_data_type = np.float32 + if cls.data_type == "FLOAT64": + cls.np_data_type = np.float64 + if cls.data_type == "FLOAT16": + cls.np_data_type = np.float16 + if cls.data_type == "BFLOAT16": + cls.np_data_type = bfloat16 + cls._is_cluster = True if REDIS_CLUSTER else False @classmethod def upload_batch( cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] ): - p = cls.client.pipeline(transaction=False) + if REDIS_JUST_INDEX: + return for i in range(len(ids)): idx = ids[i] + vector_key = str(idx) vec = vectors[i] meta = metadata[i] if metadata else {} geopoints = {} @@ -56,15 +84,78 @@ def upload_batch( if isinstance(v, dict) } cls.client.hset( - str(idx), + vector_key, mapping={ - "vector": np.array(vec).astype(np.float32).tobytes(), + "vector": np.array(vec).astype(cls.np_data_type).tobytes(), **payload, **geopoints, }, ) - p.execute() + @classmethod def post_upload(cls, _distance): + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS-VAMANA": + print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") + return {} + index_info = cls.client.ft().info() + # redisearch / memorystore for redis + if "percent_indexed" in index_info: + percent_index = float(index_info["percent_indexed"]) + while percent_index < 1.0: + print( + "waiting for index to be fully processed. current percent index: {}".format( + percent_index * 100.0 + ) + ) + time.sleep(1) + percent_index = float(cls.client.ft().info()["percent_indexed"]) + # memorydb + if "current_lag" in index_info: + current_lag = float(index_info["current_lag"]) + while current_lag > 0: + print( + "waiting for index to be fully processed. current current_lag: {}".format( + current_lag + ) + ) + time.sleep(1) + current_lag = int(cls.client.ft().info()["current_lag"]) return {} + + def get_memory_usage(cls): + used_memory = [] + conns = [cls.client_decode] + if cls._is_cluster: + conns = [ + cls.client_decode.get_redis_connection(node) + for node in cls.client_decode.get_primaries() + ] + for conn in conns: + used_memory_shard = conn.info("memory")["used_memory"] + used_memory.append(used_memory_shard) + index_info = {} + device_info = {} + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS-VAMANA": + print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") + else: + index_info = cls.client_decode.ft().info() + if GPU_STATS: + url = f"http://{cls.host}:5000/" + if GPU_STATS_ENDPOINT is not None: + url = GPU_STATS_ENDPOINT + try: + print(f"Quering GPU stats from endpoint {url}...") + # Send GET request to the server + response = requests.get(url) + device_info = json.loads(response.text) + print("Retrieved device info:", device_info) + except requests.exceptions.RequestException as e: + # Handle any exceptions that may occur + print("An error occurred while querying gpu stats:", e) + + return { + "used_memory": used_memory, + "index_info": index_info, + "device_info": device_info, + } diff --git a/engine/clients/vectorsets/__init__.py b/engine/clients/vectorsets/__init__.py new file mode 100644 index 00000000..c21498cb --- /dev/null +++ b/engine/clients/vectorsets/__init__.py @@ -0,0 +1,3 @@ +from engine.clients.vectorsets.configure import RedisVsetConfigurator +from engine.clients.vectorsets.search import RedisVsetSearcher +from engine.clients.vectorsets.upload import RedisVsetUploader diff --git a/engine/clients/vectorsets/config.py b/engine/clients/vectorsets/config.py new file mode 100644 index 00000000..e9ef6075 --- /dev/null +++ b/engine/clients/vectorsets/config.py @@ -0,0 +1,9 @@ +import os + +REDIS_PORT = int(os.getenv("REDIS_PORT", 6379)) +REDIS_AUTH = os.getenv("REDIS_AUTH", None) +REDIS_USER = os.getenv("REDIS_USER", None) +REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) + +# 90 seconds timeout +REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) diff --git a/engine/clients/vectorsets/configure.py b/engine/clients/vectorsets/configure.py new file mode 100644 index 00000000..95d111ba --- /dev/null +++ b/engine/clients/vectorsets/configure.py @@ -0,0 +1,42 @@ +import redis +from redis import Redis, RedisCluster + +from benchmark.dataset import Dataset +from engine.base_client.configure import BaseConfigurator +from engine.clients.vectorsets.config import ( + REDIS_AUTH, + REDIS_CLUSTER, + REDIS_PORT, + REDIS_USER, +) + + +class RedisVsetConfigurator(BaseConfigurator): + + def __init__(self, host, collection_params: dict, connection_params: dict): + super().__init__(host, collection_params, connection_params) + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + self._is_cluster = True if REDIS_CLUSTER else False + self.client = redis_constructor( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) + + def clean(self): + conns = [self.client] + if self._is_cluster: + conns = [ + self.client.get_redis_connection(node) + for node in self.client.get_primaries() + ] + for conn in conns: + try: + conn.flushall() + except redis.ResponseError as e: + print(e) + + def recreate(self, dataset: Dataset, collection_params): + pass + + +if __name__ == "__main__": + pass diff --git a/engine/clients/vectorsets/search.py b/engine/clients/vectorsets/search.py new file mode 100644 index 00000000..836a128d --- /dev/null +++ b/engine/clients/vectorsets/search.py @@ -0,0 +1,53 @@ +import random +from typing import List, Tuple + +import numpy as np +from redis import Redis, RedisCluster + + +from engine.base_client.search import BaseSearcher +from engine.clients.vectorsets.config import ( + REDIS_AUTH, + REDIS_CLUSTER, + REDIS_PORT, + REDIS_QUERY_TIMEOUT, + REDIS_USER, +) +from engine.clients.redis.parser import RedisConditionParser + + +class RedisVsetSearcher(BaseSearcher): + search_params = {} + client = None + parser = RedisConditionParser() + + @classmethod + def init_client(cls, host, distance, connection_params: dict, search_params: dict): + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + cls.client = redis_constructor( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) + cls.search_params = search_params + cls._is_cluster = True if REDIS_CLUSTER else False + # In the case of CLUSTER API enabled we randomly select the starting primary shard + # when doing the client initialization to evenly distribute the load among the cluster + cls.conns = [cls.client] + if cls._is_cluster: + cls.conns = [ + cls.client.get_redis_connection(node) + for node in cls.client.get_primaries() + ] + cls._ft = cls.conns[random.randint(0, len(cls.conns)) - 1].ft() + + @classmethod + def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: + ef = cls.search_params["search_params"]["ef"] + response = cls.client.execute_command("VSIM", "idx", "FP32", np.array(vector).astype(np.float32).tobytes(), "WITHSCORES", "COUNT", top, "EF", ef) + # decode responses + # every even cell is id, every odd is the score + # scores needs to be 1 - scores since on vector sets 1 is identical, 0 is opposite vector + ids = [int(response[i]) for i in range(0, len(response), 2)] + scores = [1 - float(response[i]) for i in range(1, len(response), 2)] + # we need to return a list of tuples + # where the first element is the id and the second is the score + return list(zip(ids, scores)) diff --git a/engine/clients/vectorsets/upload.py b/engine/clients/vectorsets/upload.py new file mode 100644 index 00000000..aec62dfb --- /dev/null +++ b/engine/clients/vectorsets/upload.py @@ -0,0 +1,71 @@ +from typing import List, Optional + +import numpy as np +from redis import Redis, RedisCluster + +from engine.base_client.upload import BaseUploader +from engine.clients.vectorsets.config import ( + REDIS_AUTH, + REDIS_CLUSTER, + REDIS_PORT, + REDIS_USER, +) +from engine.clients.redis.helper import convert_to_redis_coords + + +class RedisVsetUploader(BaseUploader): + client = None + upload_params = {} + + @classmethod + def init_client(cls, host, distance, connection_params, upload_params): + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + cls.client = redis_constructor( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) + cls.client_decode = redis_constructor( + host=host, + port=REDIS_PORT, + password=REDIS_AUTH, + username=REDIS_USER, + decode_responses=True, + ) + cls.upload_params = upload_params + cls._is_cluster = True if REDIS_CLUSTER else False + + @classmethod + def upload_batch( + cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] + ): + upload_params = cls.upload_params + hnsw_params = upload_params.get("hnsw_config") + M = hnsw_params.get("M", 16) + efc = hnsw_params.get("EF_CONSTRUCTION", 200) + quant = hnsw_params.get("quant", "NOQUANT") + + p = cls.client.pipeline(transaction=False) + for i in range(len(ids)): + idx = ids[i] + vec = vectors[i] + vec = np.array(vec).astype(np.float32).tobytes() + p.execute_command("VADD", "idx", "FP32", vec, idx, quant, "M", M, "EF", efc, "CAS") + p.execute() + + @classmethod + def post_upload(cls, _distance): + return {} + + def get_memory_usage(cls): + used_memory = [] + conns = [cls.client_decode] + if cls._is_cluster: + conns = [ + cls.client_decode.get_redis_connection(node) + for node in cls.client_decode.get_primaries() + ] + for conn in conns: + used_memory_shard = conn.info("memory")["used_memory"] + used_memory.append(used_memory_shard) + + return {"used_memory": sum(used_memory), + "shards": len(used_memory)} diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index b1192734..b317fc5b 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -1,2 +1,25 @@ +import os +from weaviate import WeaviateClient, ConnectionParams + WEAVIATE_CLASS_NAME = "Benchmark" -WEAVIATE_DEFAULT_PORT = 8090 +WEAVIATE_DEFAULT_HTTP_PORT = 8080 +WEAVIATE_DEFAULT_GRPC_PORT = 50051 +WEAVIATE_API_KEY = os.getenv("WEAVIATE_API_KEY", None) +WEAVIATE_HTTP_PORT = os.getenv("WEAVIATE_HTTP_PORT", WEAVIATE_DEFAULT_HTTP_PORT) +WEAVIATE_GRPC_PORT = os.getenv("WEAVIATE_GRPC_PORT", WEAVIATE_DEFAULT_GRPC_PORT) + + +def setup_client(connection_params, host): + port = connection_params.get("port", WEAVIATE_HTTP_PORT) + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{port}" + c = WeaviateClient( + ConnectionParams.from_url(url, WEAVIATE_GRPC_PORT), skip_init_checks=True + ) + c.connect() + # Ping Weaviate's live state. + assert c.is_live() is True + return c diff --git a/engine/clients/weaviate/configure.py b/engine/clients/weaviate/configure.py index 938ad691..cd2575a4 100644 --- a/engine/clients/weaviate/configure.py +++ b/engine/clients/weaviate/configure.py @@ -1,13 +1,15 @@ -from weaviate import WeaviateClient -from weaviate.connect import ConnectionParams - from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT +from engine.clients.weaviate.config import ( + WEAVIATE_CLASS_NAME, + setup_client, +) +from weaviate import WeaviateClient class WeaviateConfigurator(BaseConfigurator): + client: WeaviateClient = None DISTANCE_MAPPING = { Distance.L2: "l2-squared", Distance.COSINE: "cosine", @@ -23,12 +25,7 @@ class WeaviateConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - url = f"http://{host}:{connection_params.get('port', WEAVIATE_DEFAULT_PORT)}" - client = WeaviateClient( - ConnectionParams.from_url(url, 50051), skip_init_checks=True - ) - client.connect() - self.client = client + self.client = setup_client(connection_params, host) def clean(self): self.client.collections.delete(WEAVIATE_CLASS_NAME) @@ -60,5 +57,5 @@ def recreate(self, dataset: Dataset, collection_params): self.client.close() def __del__(self): - if self.client.is_connected(): - self.client.close() + if hasattr(self, "client") and self.client.is_connected(): + self.client.close() \ No newline at end of file diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 4218be92..08011f60 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -8,7 +8,7 @@ from weaviate.connect import ConnectionParams from engine.base_client.search import BaseSearcher -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client from engine.clients.weaviate.parser import WeaviateConditionParser @@ -20,16 +20,10 @@ class WeaviateSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - url = f"http://{host}:{connection_params.get('port', WEAVIATE_DEFAULT_PORT)}" - client = WeaviateClient( - ConnectionParams.from_url(url, 50051), skip_init_checks=True - ) - client.connect() - cls.collection = client.collections.get( - WEAVIATE_CLASS_NAME, skip_argument_validation=True - ) + cls.client = setup_client(connection_params, host) cls.search_params = search_params - cls.client = client + # Ping Weaviate's ready state + assert cls.client.is_ready() is True @classmethod def search_one(self, vector, meta_conditions, top) -> List[Tuple[int, float]]: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index ad52f64f..362a6eda 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,13 +1,10 @@ import uuid from typing import List, Optional - from weaviate import WeaviateClient -from weaviate.classes.data import DataObject -from weaviate.connect import ConnectionParams from engine.base_client.upload import BaseUploader -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT - +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client +from weaviate.classes.data import DataObject class WeaviateUploader(BaseUploader): client: WeaviateClient = None @@ -16,11 +13,7 @@ class WeaviateUploader(BaseUploader): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - url = f"http://{host}:{connection_params.get('port', WEAVIATE_DEFAULT_PORT)}" - cls.client = WeaviateClient( - ConnectionParams.from_url(url, 50051), skip_init_checks=True - ) - cls.client.connect() + cls.client = setup_client(connection_params, host) cls.upload_params = upload_params cls.connection_params = connection_params cls.collection = cls.client.collections.get( @@ -32,10 +25,14 @@ def upload_batch( cls, ids: List[int], vectors: List[list], metadata: List[Optional[dict]] ): objects = [] - for i in range(len(ids)): - id = uuid.UUID(int=ids[i]) - property = metadata[i] or {} - objects.append(DataObject(properties=property, vector=vectors[i], uuid=id)) + for pos, vector in enumerate(vectors): + _id = uuid.UUID(ids[pos]) + _property = {} + if metadata is not None and len(metadata) >= pos: + _property = metadata[pos] + objects.append( + DataObject(properties=_property, vector=vector, uuid=_id) + ) if len(objects) > 0: cls.collection.data.insert_many(objects) diff --git a/experiments/configurations/create-intel-ce-edition.py b/experiments/configurations/create-intel-ce-edition.py new file mode 100644 index 00000000..61dcbf2c --- /dev/null +++ b/experiments/configurations/create-intel-ce-edition.py @@ -0,0 +1,39 @@ +import json + +ms = [4, 8, 16, 32] +ef_constructs = [4, 8, 16, 32] +ef_runtimes = [4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768] +data_type = "FLOAT16" +for algo in ["hnsw"]: + configs = [] + for m in ms: + for ef_construct in ef_constructs: + config = { + "name": f"redis-intel-{data_type.lower()}-{algo}-m-{m}-ef-{ef_construct}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + "data_type": data_type, + f"{algo}_config": {"M": m, "EF_CONSTRUCTION": ef_construct}, + }, + "search_params": [], + "upload_params": { + "parallel":10, + "batch_size": 1, + "algorithm": algo, + "data_type": data_type, + }, + } + for client in [1, 50, 100, 200]: + for ef_runtime in ef_runtimes: + test_config = { + "parallel": client, + "search_params": {"ef": ef_runtime, "data_type": data_type}, + } + config["search_params"].append(test_config) + configs.append(config) + fname = f"redis-intel-{algo}-single-node.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/create-intel.py b/experiments/configurations/create-intel.py new file mode 100644 index 00000000..d9233f49 --- /dev/null +++ b/experiments/configurations/create-intel.py @@ -0,0 +1,38 @@ +import json + +ms = [4, 8, 16, 32] +ef_constructs = [4, 8, 16, 32] +ef_runtimes = [4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192] +data_type = "FLOAT16" +for algo in ["hnsw"]: + configs = [] + for m in ms: + for ef_construct in ef_constructs: + config = { + "name": f"redis-intel-{data_type.lower()}-{algo}-m-{m}-ef-{ef_construct}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + "data_type": data_type, + f"{algo}_config": {"M": m, "EF_CONSTRUCTION": ef_construct}, + }, + "search_params": [], + "upload_params": { + "parallel": 128, + "algorithm": algo, + "data_type": data_type, + }, + } + for client in [1, 50, 100, 200]: + for ef_runtime in ef_runtimes: + test_config = { + "parallel": client, + "search_params": {"ef": ef_runtime, "data_type": data_type}, + } + config["search_params"].append(test_config) + configs.append(config) + fname = f"redis-intel-{algo}-single-node.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/create-ivf.py b/experiments/configurations/create-ivf.py new file mode 100644 index 00000000..1b945e01 --- /dev/null +++ b/experiments/configurations/create-ivf.py @@ -0,0 +1,35 @@ +import json + +n_lists = [256, 512, 1024, 1536] +n_probes = [16, 20, 32, 64, 128, 256] + + +for algo in ["raft_ivf_pq", "raft_ivf_flat"]: + configs = [] + for lists in n_lists: + for probes in n_probes: + config = { + "name": f"redis-{algo}-n_lists-{lists}-n_probes-{probes}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + f"{algo}_config": {"N_LISTS": lists, "N_PROBES": probes}, + }, + "search_params": [ + { + "parallel": 1, + "algorithm": algo, + }, + { + "parallel": 100, + "algorithm": algo, + }, + ], + "upload_params": {"parallel": 16, "algorithm": algo}, + } + configs.append(config) + fname = f"redis-{algo}-single-node.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/create-redis-same-azureai.py b/experiments/configurations/create-redis-same-azureai.py new file mode 100644 index 00000000..0290f598 --- /dev/null +++ b/experiments/configurations/create-redis-same-azureai.py @@ -0,0 +1,29 @@ +import json + +experiments = [] + +for m in [4, 10]: + for efConstruction in [100, 500, 1000]: + search_params = [] + config = { + "name": f"redis-m-{m}-ef-{efConstruction}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": {"M": m, "EF_CONSTRUCTION": efConstruction} + }, + "search_params": [], + "upload_params": {"parallel": 16}, + } + + for efSearch in [100, 500, 1000]: + single_client_config = {"parallel": 1, "search_params": {"ef": efSearch}} + multi_client_config = {"parallel": 50, "search_params": {"ef": efSearch}} + search_params.append(single_client_config) + search_params.append(multi_client_config) + config["search_params"] = search_params + + experiments.append(config) + +with open("redis-vs-azure-ai-search.json", "w") as fd: + json.dump(experiments, fd) diff --git a/experiments/configurations/create-redis-vector-types.py b/experiments/configurations/create-redis-vector-types.py new file mode 100644 index 00000000..493ff5f0 --- /dev/null +++ b/experiments/configurations/create-redis-vector-types.py @@ -0,0 +1,38 @@ +import json + +experiments = [] + +for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32", "FLOAT64"]: + for m in [8, 16, 32, 64]: + # for efConstruction in [32, 64]: + for efConstruction in [16, 32, 64, 128, 256, 512]: + search_params = [] + config = { + "name": f"redis-{data_type.lower()}-m-{m}-ef-{efConstruction}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": data_type, + "hnsw_config": {"M": m, "EF_CONSTRUCTION": efConstruction}, + }, + "search_params": [], + "upload_params": {"parallel": 16, "data_type": data_type}, + } + # for efSearch in [16, 32, 1024]: + for efSearch in [8, 16, 32, 64, 128, 256, 512, 1024]: + single_client_config = { + "parallel": 1, + "search_params": {"ef": efSearch, "data_type": data_type}, + } + multi_client_config = { + "parallel": 100, + "search_params": {"ef": efSearch, "data_type": data_type}, + } + search_params.append(single_client_config) + search_params.append(multi_client_config) + config["search_params"] = search_params + + experiments.append(config) + +with open("redis-vector-types.json", "w") as fd: + json.dump(experiments, fd) diff --git a/experiments/configurations/create-svs.py b/experiments/configurations/create-svs.py new file mode 100644 index 00000000..b904de3b --- /dev/null +++ b/experiments/configurations/create-svs.py @@ -0,0 +1,51 @@ +import json + +threads = [16] +ws_constructs = [200] +ws_search = [177] +#ws_search = [48] +graph_degree = [32] +#quantization = ["LVQ4X4", "LVQ4x8", "LVQ8", "LVQ4"] +quantization = ["LVQ4X4"] +topKs = [100] +data_types = ["FLOAT16", "FLOAT32"] + +for algo in ["svs-vamana"]: + for data_type in data_types: + for ws_construct in ws_constructs: + for graph_d in graph_degree: + for quant in quantization: + configs = [] + for thread in threads: + config = { + "name": f"svs-{algo}-quant-{quant}-dt-{data_type}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + "data_type": data_type, + f"{algo}_config": {"NUM_THREADS": thread, "GRAPH_MAX_DEGREE": graph_d, "CONSTRUCTION_WINDOW_SIZE": ws_construct, "compression": quant}, + }, + "search_params": [], + "upload_params": { + "parallel": 100, + "data_type": data_type, + "algorithm": algo, + }, + } + for client in [100]: + for ws_s in ws_search: + for top in topKs: + test_config = { + "algorithm": algo, + "parallel": client, + "top": top, + "search_params": {"WS_SEARCH": ws_s, "data_type": data_type}, + } + config["search_params"].append(test_config) + configs.append(config) + + fname = f"svs-{algo}-quant-{quant}-dt-{data_type}.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"Created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/create-vectorsets.py b/experiments/configurations/create-vectorsets.py new file mode 100644 index 00000000..70393e7e --- /dev/null +++ b/experiments/configurations/create-vectorsets.py @@ -0,0 +1,41 @@ +import json + +ms = [16] +ef_constructs = [100] +ef_runtimes = [40, 80] +# qants = ["NOQUANT", "Q8", "BIN"] +qants = ["NOQUANT"] +configs = [] +topKs = [10] +for m in ms: + for ef_construct in ef_constructs: + for quant in qants: + config = { + "name": f"redis-intel-vectorsets-m-{m}-ef-{ef_construct}-quant-{quant}", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [], + "upload_params": { + "parallel": 128, + "hnsw_config": { + "M": m, + "EF_CONSTRUCTION": ef_construct, + "quant": quant, + }, + }, + } + for client in [1, 8]: + for top in topKs: + for ef_runtime in ef_runtimes: + test_config = { + "top": top, + "parallel": client, + "search_params": {"ef": ef_runtime}, + } + config["search_params"].append(test_config) + configs.append(config) + fname = f"redis-intel-vectorsets.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/dbpedia-calibration.json b/experiments/configurations/dbpedia-calibration.json new file mode 100644 index 00000000..a315de2e --- /dev/null +++ b/experiments/configurations/dbpedia-calibration.json @@ -0,0 +1,324 @@ +[ + { + "name": "dbpedia-cal-hnsw-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "DISTANCE_METRIC": "L2", + "EF_CONSTRUCTION": 200 + } + }, + "search_params": [ + { + "parallel": 100, + "top": 100, + "calibration_param": "ef", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "dbpedia-cal-hnsw-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "DISTANCE_METRIC": "L2", + "EF_CONSTRUCTION": 200 + } + }, + "search_params": [ + { + "parallel": 100, + "top": 100, + "calibration_param": "ef", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "algorithm": "hnsw", + "data_type": "FLOAT32" + } + }, +{ + "name": "dbpedia-cal-svs-noquant-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200 + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-noquant-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200 + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X8-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X8-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X4-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X4" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X4-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X4" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LeanVec4x8-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LeanVec4x8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LeanVec4x8-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LeanVec4x8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + } +] \ No newline at end of file diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index 229cd068..175965ef 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -5,19 +5,30 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 100, "M": 16 } } }, + { + "name": "milvus-m-16-ef-64", + "engine": "milvus", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 64, "M": 16 } } + }, { "name": "milvus-m-16-ef-128", "engine": "milvus", "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 16 } } }, @@ -27,8 +38,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 32 } } }, @@ -38,8 +49,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 32 } } }, @@ -49,8 +60,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 32 } } }, @@ -60,8 +71,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 64 } } }, @@ -71,8 +82,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 64 } } } diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 3b46f9f3..f4e1ca47 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -2,9 +2,10 @@ { "name": "qdrant-default", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 } + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 } }, "search_params": [ { "parallel": 8, "search_params": { "hnsw_ef": 128 } } @@ -14,8 +15,9 @@ { "name": "qdrant-continuous-benchmark", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "hnsw_config": { "m": 32, "ef_construct": 256 @@ -29,7 +31,7 @@ "optimizers_config": { "max_segment_size": 1000000, "default_segment_number": 3, - "memmap_threshold": 10000000 + "memmap_threshold": 25000000 } }, "search_params": [ @@ -50,6 +52,7 @@ "engine": "qdrant", "connection_params": { "timeout": 30 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 10000000 } }, "search_params": [ @@ -62,9 +65,10 @@ { "name": "qdrant-m-16-ef-128", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ @@ -73,12 +77,43 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "qdrant-m-16-ef-256", + "engine": "qdrant", + "connection_params": { "timeout": 300 }, + "collection_params": { + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, + "hnsw_config": { "m": 16, "ef_construct": 256 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "qdrant-m-16-ef-512", + "engine": "qdrant", + "connection_params": { "timeout": 300 }, + "collection_params": { + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, + "hnsw_config": { "m": 16, "ef_construct": 512 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "qdrant-m-32-ef-128", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ @@ -90,9 +125,10 @@ { "name": "qdrant-m-32-ef-256", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ @@ -104,9 +140,10 @@ { "name": "qdrant-m-32-ef-512", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ @@ -115,12 +152,28 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "qdrant-m-64-ef-128", + "engine": "qdrant", + "connection_params": { "timeout": 300 }, + "collection_params": { + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, + "hnsw_config": { "m": 64, "ef_construct": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "qdrant-m-64-ef-256", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ @@ -132,9 +185,10 @@ { "name": "qdrant-m-64-ef-512", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ diff --git a/experiments/configurations/redis-hnsw-single-node.json b/experiments/configurations/redis-hnsw-single-node.json new file mode 100644 index 00000000..9ae5e233 --- /dev/null +++ b/experiments/configurations/redis-hnsw-single-node.json @@ -0,0 +1,99 @@ +[ + { + "name": "redis-test", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-16-ef-128", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-32-ef-128", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-32-ef-256", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 256 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-32-ef-512", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 512 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-64-ef-256", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 256 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-64-ef-512", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 512 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16 } + } +] diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json new file mode 100644 index 00000000..d791e289 --- /dev/null +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -0,0 +1,6610 @@ +[ + { + "name": "redis-intel-float16-hnsw-m-4-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-4-ef-8", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 8 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-4-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-4-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-8", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 8 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-8", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 8 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-8", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 8 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 10, + "batch_size": 1, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + } +] \ No newline at end of file diff --git a/experiments/configurations/redis-raft_ivf_flat-single-node.json b/experiments/configurations/redis-raft_ivf_flat-single-node.json new file mode 100644 index 00000000..ca05c042 --- /dev/null +++ b/experiments/configurations/redis-raft_ivf_flat-single-node.json @@ -0,0 +1,626 @@ +[ + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_flat" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_flat" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + } +] \ No newline at end of file diff --git a/experiments/configurations/redis-raft_ivf_pq-single-node.json b/experiments/configurations/redis-raft_ivf_pq-single-node.json new file mode 100644 index 00000000..099063db --- /dev/null +++ b/experiments/configurations/redis-raft_ivf_pq-single-node.json @@ -0,0 +1,626 @@ +[ + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "algorithm": "raft_ivf_pq" + }, + { + "parallel": 100, + "algorithm": "raft_ivf_pq" + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + } +] \ No newline at end of file diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index 3b351edc..30632555 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -1,15 +1,68 @@ [ { - "name": "redis-default", + "name": "redis-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 64 } }, "search_params": [ { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 1024 } + "upload_params": { "parallel": 32 } + }, + { + "name": "redis-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } + }, + { + "name": "redis-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 256 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } + }, + { + "name": "redis-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 512 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } + }, + { + "name": "redis-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 64 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-128", @@ -22,7 +75,7 @@ { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-256", @@ -35,7 +88,7 @@ { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-512", @@ -48,7 +101,33 @@ { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } + }, + { + "name": "redis-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 64 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } + }, + { + "name": "redis-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } }, { "name": "redis-m-64-ef-256", @@ -61,7 +140,7 @@ { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-64-ef-512", @@ -74,6 +153,6 @@ { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } } ] diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json new file mode 100644 index 00000000..92a00604 --- /dev/null +++ b/experiments/configurations/redis-vector-types.json @@ -0,0 +1,12482 @@ +[ + { + "name": "redis-float16-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-float32-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float64-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + } +] \ No newline at end of file diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json new file mode 100644 index 00000000..94f6b213 --- /dev/null +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -0,0 +1 @@ +[{"name": "redis-m-16-ef-100", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 100}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-500", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 500}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-1000", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 1000}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-32-ef-100", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 32, "EF_CONSTRUCTION": 100}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-32-ef-500", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 32, "EF_CONSTRUCTION": 500}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-32-ef-1000", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 32, "EF_CONSTRUCTION": 1000}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}] \ No newline at end of file diff --git a/experiments/configurations/vectorsets-NOQUANT.json b/experiments/configurations/vectorsets-NOQUANT.json new file mode 100644 index 00000000..31b48676 --- /dev/null +++ b/experiments/configurations/vectorsets-NOQUANT.json @@ -0,0 +1,385 @@ +[ + { + "name": "vectorsets-fp32-default", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "batch_size": 1024, + "hnsw_config": { + "quant": "NOQUANT" + } + } + }, + { + "name": "vectorsets-fp32-m-32-ef-128", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "NOQUANT", + "M": 32, + "EF_CONSTRUCTION": 128 + } + } + }, + { + "name": "vectorsets-fp32-m-32-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "NOQUANT", + "M": 32, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-fp32-m-32-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "NOQUANT", + "M": 32, + "EF_CONSTRUCTION": 512 + } + } + }, + { + "name": "vectorset-fp32s-m-64-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "NOQUANT", + "M": 64, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-fp32-m-64-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "NOQUANT", + "M": 64, + "EF_CONSTRUCTION": 512 + } + } + } +] \ No newline at end of file diff --git a/experiments/configurations/vectorsets-Q8.json b/experiments/configurations/vectorsets-Q8.json new file mode 100644 index 00000000..9c19e7fe --- /dev/null +++ b/experiments/configurations/vectorsets-Q8.json @@ -0,0 +1,385 @@ +[ + { + "name": "vectorsets-q8-default", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "batch_size": 1024, + "hnsw_config": { + "quant": "Q8" + } + } + }, + { + "name": "vectorsets-q8-m-32-ef-128", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "Q8", + "M": 32, + "EF_CONSTRUCTION": 128 + } + } + }, + { + "name": "vectorsets-q8-m-32-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "Q8", + "M": 32, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-q8-m-32-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "Q8", + "M": 32, + "EF_CONSTRUCTION": 512 + } + } + }, + { + "name": "vectorsets-q8-m-64-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "Q8", + "M": 64, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-q8-m-64-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "Q8", + "M": 64, + "EF_CONSTRUCTION": 512 + } + } + } +] \ No newline at end of file diff --git a/experiments/configurations/vectorsets-bin.json b/experiments/configurations/vectorsets-bin.json new file mode 100644 index 00000000..4638976c --- /dev/null +++ b/experiments/configurations/vectorsets-bin.json @@ -0,0 +1,385 @@ +[ + { + "name": "vectorsets-bin-default", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "batch_size": 1024, + "hnsw_config": { + "quant": "BIN" + } + } + }, + { + "name": "vectorsets-bin-m-32-ef-128", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "BIN", + "M": 32, + "EF_CONSTRUCTION": 128 + } + } + }, + { + "name": "vectorsets-bin-m-32-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "BIN", + "M": 32, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-bin-m-32-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "BIN", + "M": 32, + "EF_CONSTRUCTION": 512 + } + } + }, + { + "name": "vectorsets-bin-m-64-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "BIN", + "M": 64, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-bin-m-64-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512 + } + } + ], + "upload_params": { + "parallel": 32, + "hnsw_config": { + "quant": "BIN", + "M": 64, + "EF_CONSTRUCTION": 512 + } + } + } +] \ No newline at end of file diff --git a/experiments/configurations/weaviate-single-node.json b/experiments/configurations/weaviate-single-node.json index bf9ab23e..5fb53d87 100644 --- a/experiments/configurations/weaviate-single-node.json +++ b/experiments/configurations/weaviate-single-node.json @@ -3,7 +3,7 @@ "name": "weaviate-default", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 256, "maxConnections": 16 } }, "search_params": [ @@ -15,7 +15,7 @@ "name": "weaviate-m-16-ef-128", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 128, "maxConnections": 16 } }, "search_params": [ @@ -28,7 +28,7 @@ "name": "weaviate-m-32-ef-128", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 128, "maxConnections": 32 } }, "search_params": [ @@ -41,7 +41,7 @@ "name": "weaviate-m-32-ef-256", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 256, "maxConnections": 32 } }, "search_params": [ @@ -54,7 +54,7 @@ "name": "weaviate-m-32-ef-512", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 512, "maxConnections": 32 } }, "search_params": [ @@ -67,7 +67,7 @@ "name": "weaviate-m-64-ef-256", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 256, "maxConnections": 64 } }, "search_params": [ @@ -80,7 +80,7 @@ "name": "weaviate-m-64-ef-512", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "efConstruction": 512, "maxConnections": 64 } }, "search_params": [ diff --git a/monitoring/gpu_wrapper.py b/monitoring/gpu_wrapper.py new file mode 100644 index 00000000..347ac3b0 --- /dev/null +++ b/monitoring/gpu_wrapper.py @@ -0,0 +1,41 @@ +from http.server import BaseHTTPRequestHandler, HTTPServer +import subprocess + + +class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): + def do_GET(self): + # Parse the query string + command = "gpustat --json --no-header" + + try: + # Execute the command + result = subprocess.run( + command, + shell=True, + check=True, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + # Send response status code + self.send_response(200) + # Send headers + self.send_header("Content-type", "text/plain") + self.end_headers() + # Write the output to the response + self.wfile.write(result.stdout.encode()) + except subprocess.CalledProcessError as e: + self.send_response(400) + self.end_headers() + self.wfile.write(e.stderr.encode()) + + +def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler, port=8000): + server_address = ("", port) + httpd = server_class(server_address, handler_class) + print(f"Server running on port {port}...") + httpd.serve_forever() + + +if __name__ == "__main__": + run() diff --git a/poetry.lock b/poetry.lock index a16f1a2c..c35d4fd8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -11,9 +11,6 @@ files = [ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} - [[package]] name = "anyio" version = "4.3.0" @@ -198,33 +195,16 @@ files = [ ] [[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7,<4.0" files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] -[package.extras] -tzdata = ["tzdata"] - [[package]] name = "certifi" version = "2024.2.2" @@ -1084,6 +1064,42 @@ pycryptodome = "*" typing-extensions = "*" urllib3 = "*" +[[package]] +name = "ml-dtypes" +version = "0.4.0" +description = "" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ml_dtypes-0.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93afe37f3a879d652ec9ef1fc47612388890660a2657fbb5747256c3b818fd81"}, + {file = "ml_dtypes-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb83fd064db43e67e67d021e547698af4c8d5c6190f2e9b1c53c09f6ff5531d"}, + {file = "ml_dtypes-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03e7cda6ef164eed0abb31df69d2c00c3a5ab3e2610b6d4c42183a43329c72a5"}, + {file = "ml_dtypes-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:a15d96d090aebb55ee85173d1775ae325a001aab607a76c8ea0b964ccd6b5364"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bdf689be7351cc3c95110c910c1b864002f113e682e44508910c849e144f3df1"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c83e4d443962d891d51669ff241d5aaad10a8d3d37a81c5532a45419885d591c"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e2f4237b459a63c97c2c9f449baa637d7e4c20addff6a9bac486f22432f3b6"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:75b4faf99d0711b81f393db36d210b4255fd419f6f790bc6c1b461f95ffb7a9e"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ee9f91d4c4f9959a7e1051c141dc565f39e54435618152219769e24f5e9a4d06"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad6849a2db386b38e4d54fe13eb3293464561780531a918f8ef4c8169170dd49"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa32979ebfde3a0d7c947cafbf79edc1ec77ac05ad0780ee86c1d8df70f2259"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:3b67ec73a697c88c1122038e0de46520e48dc2ec876d42cf61bc5efe3c0b7675"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:41affb38fdfe146e3db226cf2953021184d6f0c4ffab52136613e9601706e368"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43cf4356a0fe2eeac6d289018d0734e17a403bdf1fd911953c125dd0358edcc0"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1724ddcdf5edbaf615a62110af47407f1719b8d02e68ccee60683acb5f74da1"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:723af6346447268a3cf0b7356e963d80ecb5732b5279b2aa3fa4b9fc8297c85e"}, + {file = "ml_dtypes-0.4.0.tar.gz", hash = "sha256:eaf197e72f4f7176a19fe3cb8b61846b38c6757607e7bf9cd4b1d84cd3e74deb"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">1.20", markers = "python_version < \"3.10\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + [[package]] name = "nodeenv" version = "1.8.0" @@ -1206,9 +1222,9 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1403,7 +1419,6 @@ files = [ ] [package.dependencies] -"backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} psycopg-binary = {version = "3.1.18", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = ">=4.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} @@ -1756,7 +1771,6 @@ azure-storage-blob = "*" environs = "<=9.5.0" grpcio = ">=1.49.1,<=1.60.0" minio = ">=7.0.0" -numpy = {version = "<1.25.0", markers = "python_version <= \"3.8\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" pyarrow = ">=12.0.0" @@ -1860,6 +1874,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1867,8 +1882,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1885,6 +1908,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1892,6 +1916,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2294,5 +2319,5 @@ validators = "0.22.0" [metadata] lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "66b915f6915c79f83165dc5fb39f363ca53c493668ff87bb5b4953fb712cd4cc" +python-versions = ">=3.9,<3.12" +content-hash = "2cd84469db2650a089454f7537304f184f3e7df8b60e32f53e33cd98f1921b4a" diff --git a/pyproject.toml b/pyproject.toml index 129a5828..7b245e57 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "" authors = ["Kacper Ɓukawski "] [tool.poetry.dependencies] -python = ">=3.8,<3.12" +python = ">=3.9,<3.12" qdrant-client = "^1.8.0" typer = "^0.6.1" jsons = "^1.6.3" @@ -18,8 +18,10 @@ ipdb = "^0.13.9" stopit = "^1.1.2" opensearch-py = "^2.3.2" tqdm = "^4.66.1" +backoff = "^2.2.1" psycopg = {extras = ["binary"], version = "^3.1.17"} pgvector = "^0.2.4" +ml-dtypes = "^0.4.0" [tool.poetry.dev-dependencies] diff --git a/run.py b/run.py index 5e947a8d..5a33d288 100644 --- a/run.py +++ b/run.py @@ -17,12 +17,17 @@ def run( engines: List[str] = typer.Option(["*"]), datasets: List[str] = typer.Option(["*"]), + parallels: List[int] = typer.Option([]), host: str = "localhost", skip_upload: bool = False, skip_search: bool = False, skip_if_exists: bool = True, exit_on_error: bool = True, timeout: float = 86400.0, + upload_start_idx: int = 0, + upload_end_idx: int = -1, + queries: int = typer.Option(-1, help="Number of queries to run. If the available queries are fewer, they will be reused."), + ef_runtime: List[int] = typer.Option([], help="Filter search experiments by ef runtime values. Only experiments with these ef values will be run."), ): """ Example: @@ -36,6 +41,7 @@ def run( for name, config in all_engines.items() if any(fnmatch.fnmatch(name, engine) for engine in engines) } + selected_datasets = { name: config for name, config in all_datasets.items() @@ -46,12 +52,26 @@ def run( for dataset_name, dataset_config in selected_datasets.items(): print(f"Running experiment: {engine_name} - {dataset_name}") client = ClientFactory(host).build_client(engine_config) - dataset = Dataset(dataset_config) + dataset = Dataset( + dataset_config, + skip_upload, + skip_search, + upload_start_idx, + upload_end_idx, + ) dataset.download() try: with stopit.ThreadingTimeout(timeout) as tt: client.run_experiment( - dataset, skip_upload, skip_search, skip_if_exists + dataset, + skip_upload, + skip_search, + skip_if_exists, + parallels, + upload_start_idx, + upload_end_idx, + queries, + ef_runtime, ) client.delete_client() diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh new file mode 100644 index 00000000..7c3bc7da --- /dev/null +++ b/run_laion_1b_upload.sh @@ -0,0 +1,36 @@ +#!/bin/bash + + +part_size=10000000 # 10 million elements per part +max_screens=100 # Maximum number of screens running simultaneously +engine=redis-intel-float16-hnsw-m-4-ef-4 + +# Function to wait until the number of running screens is below the limit +wait_for_available_screen_slot() { + echo "waiting for available screen." + while [ "$(screen -ls | grep -c loader_)" -ge "$max_screens" ]; do + sleep 15 # Wait for 15 seconds before checking again + done +} + +# Create the output directory if it doesn't exist +mkdir -p logs-new + +for i in {0..99}; do + # Wait until there's an available screen slot + wait_for_available_screen_slot + + # Calculate the start and end indices for each part + start_idx=$((i * part_size)) + end_idx=$(((i + 1) * part_size)) + + # Log file path + log_file="logs-new/loader_$i.log" + + # Launch each process in a new screen session and log stdout and stderr to the log file + screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_JUST_INDEX=1 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines $engine --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx &> $log_file" + + # Print progress + echo "Started screen loader_$i: uploading indices $start_idx to $end_idx" + echo "$((i+1))/100 processes started" +done diff --git a/scripts/process-benchmarks.ipynb b/scripts/process-benchmarks.ipynb index 8419a5f8..08594905 100644 --- a/scripts/process-benchmarks.ipynb +++ b/scripts/process-benchmarks.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:50.900734Z", @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:50.982398Z", @@ -42,7 +42,19 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(PosixPath('/Users/dvir/Code/vector-db-benchmark/results'),\n", + " 'vectorsets-q8-m-64-ef-512-random-100-search-2-2025-03-18-23-31-46.json')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "DATA_DIR = Path().resolve().parent / \"results\"\n", "DATA_DIR, list(DATA_DIR.glob(\"*.json\"))[0].name" @@ -50,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:51.482299Z", @@ -64,6 +76,7 @@ "source": [ "PATH_REGEX = re.compile(r\"(?P(\"\n", " r\"?P[a-z\\-]+)\"\n", + " r\"\\-(?P[a-zA-Z0-9\\-]+)\"\n", " r\"\\-m\\-(?P[0-9]+)\"\n", " r\"\\-ef\\-(?P[0-9]+)\"\n", " r\")\"\n", @@ -85,7 +98,185 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '2',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 256}},\n", + " {'total_time': 0.0025846249773167074,\n", + " 'mean_time': 0.00020889558945782482,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00012517310030909733,\n", + " 'min_time': 0.00012079102452844381,\n", + " 'max_time': 0.0005068749887868762,\n", + " 'rps': 3869.033259278392,\n", + " 'p95_time': 0.0004580310720484703,\n", + " 'p99_time': 0.000497106205439195}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '5',\n", + " '2025-03-18-23-32-25',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 128}},\n", + " {'total_time': 4.754267499956768,\n", + " 'mean_time': 0.0019451417960226537,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.0037093798096747236,\n", + " 'min_time': 0.0004131249734200537,\n", + " 'max_time': 0.013048959022853523,\n", + " 'rps': 2.103373442931205,\n", + " 'p95_time': 0.007698571513174089,\n", + " 'p99_time': 0.011978881520917641}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '4',\n", + " '2025-03-18-23-32-05',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 64}},\n", + " {'total_time': 2.0294713340117596,\n", + " 'mean_time': 0.03196047500241548,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.08439925765507372,\n", + " 'min_time': 0.00027545803459361196,\n", + " 'max_time': 0.2835138339432888,\n", + " 'rps': 4.927391598201336,\n", + " 'p95_time': 0.1706198027444768,\n", + " 'p99_time': 0.26093502770352645}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '3',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 512}},\n", + " {'total_time': 0.002255416999105364,\n", + " 'mean_time': 0.0001831832982134074,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00013853265792410592,\n", + " 'min_time': 0.00010545901022851467,\n", + " 'max_time': 0.000520500005222857,\n", + " 'rps': 4433.769898855338,\n", + " 'p95_time': 0.0004601064021699129,\n", + " 'p99_time': 0.0005084212846122682}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '7',\n", + " '2025-03-18-23-33-03',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 512}},\n", + " {'total_time': 3.4431491250288673,\n", + " 'mean_time': 0.03187979999929667,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.06949698412336956,\n", + " 'min_time': 0.0003655419568531215,\n", + " 'max_time': 0.23800891602877527,\n", + " 'rps': 2.9043180056617968,\n", + " 'p95_time': 0.14553500411275289,\n", + " 'p99_time': 0.21951413364557087}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '6',\n", + " '2025-03-18-23-32-44',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 256}},\n", + " {'total_time': 2.7904384169960395,\n", + " 'mean_time': 0.000987829192308709,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.0018635207020379135,\n", + " 'min_time': 0.0002573750098235905,\n", + " 'max_time': 0.006563208997249603,\n", + " 'rps': 3.583666257994395,\n", + " 'p95_time': 0.003952683851821342,\n", + " 'p99_time': 0.006041103968163953}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '1',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 128}},\n", + " {'total_time': 0.0023579999688081443,\n", + " 'mean_time': 0.00017647920176386834,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00012461744999991972,\n", + " 'min_time': 0.00011404202086851001,\n", + " 'max_time': 0.0005437919753603637,\n", + " 'rps': 4240.882159576329,\n", + " 'p95_time': 0.00038786699296906554,\n", + " 'p99_time': 0.0005126069788821043}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '0',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 64}},\n", + " {'total_time': 0.003914333006832749,\n", + " 'mean_time': 0.0002679917146451771,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00036875994409555664,\n", + " 'min_time': 0.00011029100278392434,\n", + " 'max_time': 0.001371125050354749,\n", + " 'rps': 2554.7136594010485,\n", + " 'p95_time': 0.0008407815796090277,\n", + " 'p99_time': 0.0012650563562056052}]]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "upload_results, search_results = [], []\n", "\n", @@ -99,7 +290,7 @@ " with open(path, \"r\") as fp:\n", " stats = json.load(fp)\n", "\n", - " entry = [match[\"engine\"], match[\"m\"], match[\"ef\"], \n", + " entry = [match[\"engine\"], match[\"m\"], match[\"ef\"], match[\"quant\"],\n", " match[\"dataset\"], match[\"search_index\"], match[\"date\"], \n", " stats[\"params\"], stats[\"results\"]]\n", " if experiment[\"operation\"] == \"search\":\n", @@ -112,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:54.157465Z", @@ -124,12 +315,12 @@ }, "outputs": [], "source": [ - "column_names = [\"engine\", \"m\", \"ef\", \"dataset\", \"search_index\", \"date\", \"params\", \"results\"]" + "column_names = [\"engine\", \"m\", \"ef\", \"quant\", \"dataset\", \"search_index\", \"date\", \"params\", \"results\"]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T11:31:17.192306Z", @@ -139,13 +330,100 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dateparamspost_uploadupload_timetotal_time
enginemefquantdataset
vectorsets64512q8random-1002025-03-18 23:31:46{'experiment': 'vectorsets-q8-m-64-ef-512', 'e...{}3.5902913.590334
\n", + "
" + ], + "text/plain": [ + " date \\\n", + "engine m ef quant dataset \n", + "vectorsets 64 512 q8 random-100 2025-03-18 23:31:46 \n", + "\n", + " params \\\n", + "engine m ef quant dataset \n", + "vectorsets 64 512 q8 random-100 {'experiment': 'vectorsets-q8-m-64-ef-512', 'e... \n", + "\n", + " post_upload upload_time total_time \n", + "engine m ef quant dataset \n", + "vectorsets 64 512 q8 random-100 {} 3.590291 3.590334 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "upload_df = pd.DataFrame(upload_results, columns=column_names) \\\n", " .drop(columns=\"search_index\")\n", "upload_df[\"date\"] = pd.to_datetime(upload_df[\"date\"], format=\"%Y-%m-%d-%H-%M-%S\")\n", "upload_df = upload_df.sort_values(\"date\", ascending=False) \\\n", - " .groupby([\"engine\", \"m\", \"ef\", \"dataset\"]) \\\n", + " .groupby([\"engine\", \"m\", \"ef\", \"quant\", \"dataset\"]) \\\n", " .last()\n", "upload_df = pd.concat([upload_df, upload_df[\"results\"].apply(pd.Series)], axis=1)\n", "upload_df = upload_df.drop(columns=\"results\")\n", @@ -167,12 +445,345 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datedatasetexperimentengineparallelsearch_paramstotal_timemean_timemean_precisionsstd_timemin_timemax_timerpsp95_timep99_time
enginemefdatasetquantsearch_index
vectorsets64512random-100q832025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 512}0.0022550.0001831.00.0001390.0001050.0005214433.7698990.0004600.000508
12025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 128}0.0023580.0001761.00.0001250.0001140.0005444240.8821600.0003880.000513
22025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 256}0.0025850.0002091.00.0001250.0001210.0005073869.0332590.0004580.000497
02025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 64}0.0039140.0002681.00.0003690.0001100.0013712554.7136590.0008410.001265
42025-03-18 23:32:05random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 64}2.0294710.0319601.00.0843990.0002750.2835144.9273920.1706200.260935
62025-03-18 23:32:44random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 256}2.7904380.0009881.00.0018640.0002570.0065633.5836660.0039530.006041
72025-03-18 23:33:03random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 512}3.4431490.0318801.00.0694970.0003660.2380092.9043180.1455350.219514
52025-03-18 23:32:25random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 128}4.7542670.0019451.00.0037090.0004130.0130492.1033730.0076990.011979
\n", + "
" + ], + "text/plain": [ + " date \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 2025-03-18 23:31:46 \n", + " 1 2025-03-18 23:31:46 \n", + " 2 2025-03-18 23:31:46 \n", + " 0 2025-03-18 23:31:46 \n", + " 4 2025-03-18 23:32:05 \n", + " 6 2025-03-18 23:32:44 \n", + " 7 2025-03-18 23:33:03 \n", + " 5 2025-03-18 23:32:25 \n", + "\n", + " dataset \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 random-100 \n", + " 1 random-100 \n", + " 2 random-100 \n", + " 0 random-100 \n", + " 4 random-100 \n", + " 6 random-100 \n", + " 7 random-100 \n", + " 5 random-100 \n", + "\n", + " experiment \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 vectorsets-q8-m-64-ef-512 \n", + " 1 vectorsets-q8-m-64-ef-512 \n", + " 2 vectorsets-q8-m-64-ef-512 \n", + " 0 vectorsets-q8-m-64-ef-512 \n", + " 4 vectorsets-q8-m-64-ef-512 \n", + " 6 vectorsets-q8-m-64-ef-512 \n", + " 7 vectorsets-q8-m-64-ef-512 \n", + " 5 vectorsets-q8-m-64-ef-512 \n", + "\n", + " engine parallel \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 vectorsets 1 \n", + " 1 vectorsets 1 \n", + " 2 vectorsets 1 \n", + " 0 vectorsets 1 \n", + " 4 vectorsets 100 \n", + " 6 vectorsets 100 \n", + " 7 vectorsets 100 \n", + " 5 vectorsets 100 \n", + "\n", + " search_params total_time \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 {'ef': 512} 0.002255 \n", + " 1 {'ef': 128} 0.002358 \n", + " 2 {'ef': 256} 0.002585 \n", + " 0 {'ef': 64} 0.003914 \n", + " 4 {'ef': 64} 2.029471 \n", + " 6 {'ef': 256} 2.790438 \n", + " 7 {'ef': 512} 3.443149 \n", + " 5 {'ef': 128} 4.754267 \n", + "\n", + " mean_time mean_precisions \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 0.000183 1.0 \n", + " 1 0.000176 1.0 \n", + " 2 0.000209 1.0 \n", + " 0 0.000268 1.0 \n", + " 4 0.031960 1.0 \n", + " 6 0.000988 1.0 \n", + " 7 0.031880 1.0 \n", + " 5 0.001945 1.0 \n", + "\n", + " std_time min_time max_time \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 0.000139 0.000105 0.000521 \n", + " 1 0.000125 0.000114 0.000544 \n", + " 2 0.000125 0.000121 0.000507 \n", + " 0 0.000369 0.000110 0.001371 \n", + " 4 0.084399 0.000275 0.283514 \n", + " 6 0.001864 0.000257 0.006563 \n", + " 7 0.069497 0.000366 0.238009 \n", + " 5 0.003709 0.000413 0.013049 \n", + "\n", + " rps p95_time \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 4433.769899 0.000460 \n", + " 1 4240.882160 0.000388 \n", + " 2 3869.033259 0.000458 \n", + " 0 2554.713659 0.000841 \n", + " 4 4.927392 0.170620 \n", + " 6 3.583666 0.003953 \n", + " 7 2.904318 0.145535 \n", + " 5 2.103373 0.007699 \n", + "\n", + " p99_time \n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 0.000508 \n", + " 1 0.000513 \n", + " 2 0.000497 \n", + " 0 0.001265 \n", + " 4 0.260935 \n", + " 6 0.006041 \n", + " 7 0.219514 \n", + " 5 0.011979 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "search_df = pd.DataFrame(search_results, columns=column_names)\n", "search_df[\"date\"] = pd.to_datetime(search_df[\"date\"], format=\"%Y-%m-%d-%H-%M-%S\")\n", "search_df = search_df.sort_values(\"date\", ascending=False) \\\n", - " .groupby([\"engine\", \"m\", \"ef\", \"dataset\", \"search_index\"]) \\\n", + " .groupby([\"engine\", \"m\", \"ef\", \"dataset\", \"quant\", \"search_index\"]) \\\n", " .first()\n", "\n", "print(len(search_df))\n", @@ -185,16 +796,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ValueError", + "evalue": "cannot insert dataset, already exists", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/4t/wcf5b_sj55lbww_8xxhhq8pr0000gp/T/ipykernel_45869/1649479656.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;31m# print(len(joined_df))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;31m# joined_df\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# Reset the indices of both dataframes to make columns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0msearch_reset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msearch_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0mupload_reset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mupload_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;31m# Join on common columns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, level, drop, inplace, col_level, col_fill, allow_duplicates, names)\u001b[0m\n\u001b[1;32m 6205\u001b[0m level_values = algorithms.take(\n\u001b[1;32m 6206\u001b[0m \u001b[0mlevel_values\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlab\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_fill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlev\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_na_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6207\u001b[0m )\n\u001b[1;32m 6208\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6209\u001b[0;31m new_obj.insert(\n\u001b[0m\u001b[1;32m 6210\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6211\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6212\u001b[0m \u001b[0mlevel_values\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, loc, column, value, allow_duplicates)\u001b[0m\n\u001b[1;32m 4768\u001b[0m \u001b[0;34m\"'self.flags.allows_duplicate_labels' is False.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4769\u001b[0m )\n\u001b[1;32m 4770\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mallow_duplicates\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcolumn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4771\u001b[0m \u001b[0;31m# Should this be a different kind of error??\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4772\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"cannot insert {column}, already exists\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4773\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4774\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"loc must be int\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4775\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: cannot insert dataset, already exists" + ] + } + ], "source": [ - "_search = search_df.reset_index()\n", - "_upload = upload_df.reset_index()\n", + "# # Option 1: Check what's in your index and columns\n", + "# print(\"search_df index name:\", search_df.index.name or search_df.index.names)\n", + "# print(\"search_df columns:\", search_df.columns.tolist())\n", + "# print(\"upload_df index name:\", upload_df.index.name or upload_df.index.names)\n", + "# print(\"upload_df columns:\", upload_df.columns.tolist())\n", + "\n", + "# # Option 2: Reset index but specify a different name for the index column\n", + "# _search = search_df.reset_index()\n", + "# _upload = upload_df.reset_index()\n", + "# print(\"search_df index name:\", _search.index.name or _search.index.names)\n", + "# print(\"search_df columns:\", _search.columns.tolist())\n", + "\n", + "# print(\"_upload index name:\", _upload.index.name or _upload.index.names)\n", + "# print(\"_upload columns:\", _upload.columns.tolist())\n", + "\n", + "# joined_df = _search.merge(_upload, how=\"left\", on=[\"engine\", \"m\", \"ef\", \"quant\", \"dataset\"], suffixes=(\"_search\", \"_upload\"))\n", + "# print(len(joined_df))\n", + "# joined_df\n", + "\n", + "# Reset the indices of both dataframes to make columns\n", + "search_reset = search_df.reset_index()\n", + "upload_reset = upload_df.reset_index()\n", + "\n", + "# Join on common columns\n", + "joined_df = search_reset.merge(upload_reset, \n", + " how=\"left\", \n", + " on=[\"engine\", \"m\", \"ef\", \"quant\", \"dataset\"],\n", + " suffixes=(\"\", \"_upload\"))\n", "\n", - "joined_df = _search.merge(_upload, on=[\"engine\", \"m\", \"ef\", \"dataset\"], how=\"left\", suffixes=(\"_search\", \"_upload\"))\n", - "print(len(joined_df))\n", - "joined_df" + "# Rename any conflicting columns to match what's expected in cell 10\n", + "joined_df = joined_df.rename(columns={\n", + " \"total_time\": \"total_time_search\",\n", + " \"total_time_upload\": \"total_time_upload\"\n", + "})\n", + "\n", + "print(f\"Joined dataframe has {len(joined_df)} rows\")\n", + "joined_df.head(2)" ] }, { @@ -202,6 +858,36 @@ "execution_count": null, "metadata": {}, "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'upload_time'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/indexes/base.py:3653\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3652\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3653\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3654\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/_libs/index.pyx:147\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/_libs/index.pyx:176\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'upload_time'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[12], line 21\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m engine_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant-rps\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m engine_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant-bq-rps\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m engine_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant-sq-rps\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 14\u001b[0m engine_name \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 16\u001b[0m json_object \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 17\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mengine_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: engine_name,\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msetup_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mengine\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-m-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mm\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-ef-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mef\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-quant-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquant\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdataset_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdataset\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 20\u001b[0m \u001b[38;5;66;03m# \"search_idx\": row['search_index'],\u001b[39;00m\n\u001b[0;32m---> 21\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupload_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[43mrow\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mupload_time\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m,\n\u001b[1;32m 22\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtotal_upload_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtotal_time_upload\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 23\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mp95_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mp95_time\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 24\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrps\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrps\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 25\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 26\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mp99_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mp99_time\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 27\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmean_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmean_time\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 28\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmean_precisions\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmean_precisions\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 29\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mengine_params\u001b[39m\u001b[38;5;124m\"\u001b[39m: engine_params,\n\u001b[1;32m 30\u001b[0m }\n\u001b[1;32m 31\u001b[0m json_all\u001b[38;5;241m.\u001b[39mappend(json_object)\n\u001b[1;32m 33\u001b[0m parallel \u001b[38;5;241m=\u001b[39m row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/series.py:1007\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[key]\n\u001b[1;32m 1006\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m key_is_scalar:\n\u001b[0;32m-> 1007\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_value\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1009\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_hashable(key):\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;66;03m# Otherwise index.get_value will raise InvalidIndexError\u001b[39;00m\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1012\u001b[0m \u001b[38;5;66;03m# For labels that don't resolve as scalars like tuples and frozensets\u001b[39;00m\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/series.py:1116\u001b[0m, in \u001b[0;36mSeries._get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m 1113\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[label]\n\u001b[1;32m 1115\u001b[0m \u001b[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001b[39;00m\n\u001b[0;32m-> 1116\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1118\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(loc):\n\u001b[1;32m 1119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[loc]\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/indexes/base.py:3655\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3653\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3654\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3655\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3656\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3657\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3658\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3659\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3660\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[0;31mKeyError\u001b[0m: 'upload_time'" + ] + } + ], "source": [ "json_all = []\n", "json_1_or_100_thread = []\n", @@ -252,7 +938,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -266,7 +952,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/test_multiprocessing.py b/test_multiprocessing.py new file mode 100644 index 00000000..341289ec --- /dev/null +++ b/test_multiprocessing.py @@ -0,0 +1,36 @@ +from engine.base_client.search import BaseSearcher +from dataset_reader.base_reader import Query +import time + +class TestSearcher(BaseSearcher): + @classmethod + def init_client(cls, host, distance, connection_params, search_params): + pass + + @classmethod + def search_one(cls, vector, meta_conditions, top): + return [] + + @classmethod + def _search_one(cls, query, top=None): + # Add a small delay to simulate real work + time.sleep(0.001) + return 1.0, 0.1 + + def setup_search(self): + pass + +# Create a small set of test queries +queries = [Query(vector=[0.1]*10, meta_conditions=None, expected_result=None) for _ in range(10)] + +# Create a searcher with parallel=10 +searcher = TestSearcher('localhost', {}, {'parallel': 10}) + +# Run the search_all method with a large num_queries parameter +start = time.perf_counter() +results = searcher.search_all('cosine', queries, num_queries=1000) +total_time = time.perf_counter() - start + +print(f'Number of queries: {len(results["latencies"])}') +print(f'Total time: {total_time:.6f} seconds') +print(f'Throughput: {results["rps"]:.2f} queries/sec') diff --git a/vectorsets.sh b/vectorsets.sh new file mode 100755 index 00000000..4be2cea7 --- /dev/null +++ b/vectorsets.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Check if hostname is provided +if [ $# -lt 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +hostname=$1 + +# Define experiments array +experiments=( + "vectorsets-bin-default" + "vectorsets-bin-m-32-ef-128" + "vectorsets-bin-m-32-ef-256" + "vectorsets-bin-m-32-ef-512" + "vectorsets-bin-m-64-ef-256" + "vectorsets-bin-m-64-ef-512" + + "vectorsets-q8-default" + "vectorsets-q8-m-32-ef-128" + "vectorsets-q8-m-32-ef-256" + "vectorsets-q8-m-32-ef-512" + "vectorsets-q8-m-64-ef-256" + "vectorsets-q8-m-64-ef-512" + + "vectorsets-fp32-default" + "vectorsets-fp32-m-32-ef-128" + "vectorsets-fp32-m-32-ef-256" + "vectorsets-fp32-m-32-ef-512" + "vectorsets-fp32-m-64-ef-256" + "vectorsets-fp32-m-64-ef-512" +) + +# Run command for each experiment +for experiment in "${experiments[@]}"; do + echo "Running experiment: $experiment" + python run.py --engines "$experiment" --datasets dbpedia-openai-1M-1536-angular --host "$hostname" + echo "Completed experiment: $experiment" + echo "-----------------------------------" +done + +echo "All experiments completed!" \ No newline at end of file