From fe1d3e427349b108f0ad270fb45978dba4b18d29 Mon Sep 17 00:00:00 2001 From: Navneet Verma Date: Thu, 19 Sep 2024 09:33:09 -0700 Subject: [PATCH] Remove benchmarks folder from k-NN repo (#2127) Signed-off-by: Navneet Verma --- CHANGELOG.md | 1 + benchmarks/README.md | 4 + benchmarks/osb/README.md | 478 --------- benchmarks/osb/__init__.py | 0 benchmarks/osb/extensions/__init__.py | 0 benchmarks/osb/extensions/data_set.py | 202 ---- benchmarks/osb/extensions/param_sources.py | 217 ---- benchmarks/osb/extensions/registry.py | 13 - benchmarks/osb/extensions/runners.py | 121 --- benchmarks/osb/extensions/util.py | 71 -- benchmarks/osb/indices/faiss-index.json | 27 - benchmarks/osb/indices/lucene-index.json | 26 - benchmarks/osb/indices/model-index.json | 17 - benchmarks/osb/indices/nmslib-index.json | 27 - benchmarks/osb/indices/train-index.json | 16 - benchmarks/osb/operations/default.json | 53 - benchmarks/osb/params/no-train-params.json | 40 - benchmarks/osb/params/train-params.json | 38 - benchmarks/osb/procedures/no-train-test.json | 73 -- benchmarks/osb/procedures/train-test.json | 127 --- benchmarks/osb/requirements.in | 4 - benchmarks/osb/requirements.txt | 96 -- benchmarks/osb/tests/__init__.py | 0 benchmarks/osb/tests/data_set_helper.py | 197 ---- benchmarks/osb/tests/test_param_sources.py | 353 ------- benchmarks/osb/workload.json | 17 - benchmarks/osb/workload.py | 18 - benchmarks/perf-tool/.pylintrc | 443 -------- benchmarks/perf-tool/.style.yapf | 10 - benchmarks/perf-tool/README.md | 449 -------- .../perf-tool/add-filters-to-dataset.py | 200 ---- .../perf-tool/add-parent-doc-id-to-dataset.py | 291 ------ benchmarks/perf-tool/dataset/data-nested.hdf5 | Bin 74496 -> 0 bytes .../dataset/data-with-attr-with-filters.hdf5 | Bin 2404096 -> 0 bytes .../perf-tool/dataset/data-with-attr.hdf5 | Bin 306896 -> 0 bytes benchmarks/perf-tool/dataset/data.hdf5 | Bin 527648 -> 0 bytes benchmarks/perf-tool/knn-perf-tool.py | 10 - benchmarks/perf-tool/okpt/__init__.py | 6 - benchmarks/perf-tool/okpt/diff/diff.py | 142 --- benchmarks/perf-tool/okpt/io/args.py | 178 ---- .../perf-tool/okpt/io/config/parsers/base.py | 67 -- .../perf-tool/okpt/io/config/parsers/test.py | 81 -- .../perf-tool/okpt/io/config/parsers/util.py | 116 -- .../perf-tool/okpt/io/config/schemas/test.yml | 35 - benchmarks/perf-tool/okpt/io/dataset.py | 222 ---- benchmarks/perf-tool/okpt/io/utils/reader.py | 84 -- benchmarks/perf-tool/okpt/io/utils/writer.py | 40 - benchmarks/perf-tool/okpt/main.py | 55 - benchmarks/perf-tool/okpt/test/__init__.py | 5 - benchmarks/perf-tool/okpt/test/profile.py | 86 -- benchmarks/perf-tool/okpt/test/runner.py | 107 -- benchmarks/perf-tool/okpt/test/steps/base.py | 60 -- .../perf-tool/okpt/test/steps/factory.py | 50 - benchmarks/perf-tool/okpt/test/steps/steps.py | 987 ------------------ benchmarks/perf-tool/okpt/test/test.py | 188 ---- .../filtering/relaxed-filter/index.json | 27 - .../relaxed-filter/relaxed-filter-spec.json | 42 - .../relaxed-filter/relaxed-filter-test.yml | 40 - .../filtering/restrictive-filter/index.json | 27 - .../restrictive-filter-spec.json | 44 - .../restrictive-filter-test.yml | 40 - .../release-configs/faiss-hnsw/index.json | 27 - .../faiss-hnsw/nested/simple/index.json | 35 - .../nested/simple/simple-nested-test.yml | 37 - .../release-configs/faiss-hnsw/test.yml | 35 - .../release-configs/faiss-hnswpq/index.json | 17 - .../faiss-hnswpq/method-spec.json | 15 - .../release-configs/faiss-hnswpq/test.yml | 59 -- .../faiss-hnswpq/train-index-spec.json | 16 - .../filtering/relaxed-filter/index.json | 17 - .../filtering/relaxed-filter/method-spec.json | 9 - .../relaxed-filter/relaxed-filter-spec.json | 42 - .../relaxed-filter/relaxed-filter-test.yml | 64 -- .../relaxed-filter/train-index-spec.json | 16 - .../filtering/restrictive-filter/index.json | 17 - .../restrictive-filter/method-spec.json | 9 - .../restrictive-filter-spec.json | 44 - .../restrictive-filter-test.yml | 64 -- .../restrictive-filter/train-index-spec.json | 16 - .../release-configs/faiss-ivf/index.json | 17 - .../faiss-ivf/method-spec.json | 9 - .../release-configs/faiss-ivf/test.yml | 59 -- .../faiss-ivf/train-index-spec.json | 16 - .../release-configs/faiss-ivfpq/index.json | 17 - .../faiss-ivfpq/method-spec.json | 16 - .../release-configs/faiss-ivfpq/test.yml | 59 -- .../faiss-ivfpq/train-index-spec.json | 16 - .../filtering/relaxed-filter/index.json | 26 - .../relaxed-filter/relaxed-filter-spec.json | 42 - .../relaxed-filter/relaxed-filter-test.yml | 38 - .../filtering/restrictive-filter/index.json | 26 - .../restrictive-filter-spec.json | 44 - .../restrictive-filter-test.yml | 38 - .../release-configs/lucene-hnsw/index.json | 26 - .../lucene-hnsw/nested/simple/index.json | 34 - .../nested/simple/simple-nested-test.yml | 37 - .../release-configs/lucene-hnsw/test.yml | 33 - .../release-configs/nmslib-hnsw/index.json | 27 - .../release-configs/nmslib-hnsw/test.yml | 35 - .../release-configs/run_all_tests.sh | 102 -- benchmarks/perf-tool/requirements.in | 7 - benchmarks/perf-tool/requirements.txt | 37 - .../faiss-sift-ivf/index-spec.json | 17 - .../faiss-sift-ivf/method-spec.json | 8 - .../sample-configs/faiss-sift-ivf/test.yml | 62 -- .../faiss-sift-ivf/train-index-spec.json | 16 - .../filter-spec/filter-1-spec.json | 24 - .../filter-spec/filter-2-spec.json | 40 - .../filter-spec/filter-3-spec.json | 30 - .../filter-spec/filter-4-spec.json | 44 - .../filter-spec/filter-5-spec.json | 42 - .../lucene-sift-hnsw-filter/index-spec.json | 27 - .../lucene-sift-hnsw-filter/test.yml | 41 - .../nmslib-sift-hnsw/index-spec.json | 28 - .../sample-configs/nmslib-sift-hnsw/test.yml | 38 - 115 files changed, 5 insertions(+), 8080 deletions(-) create mode 100644 benchmarks/README.md delete mode 100644 benchmarks/osb/README.md delete mode 100644 benchmarks/osb/__init__.py delete mode 100644 benchmarks/osb/extensions/__init__.py delete mode 100644 benchmarks/osb/extensions/data_set.py delete mode 100644 benchmarks/osb/extensions/param_sources.py delete mode 100644 benchmarks/osb/extensions/registry.py delete mode 100644 benchmarks/osb/extensions/runners.py delete mode 100644 benchmarks/osb/extensions/util.py delete mode 100644 benchmarks/osb/indices/faiss-index.json delete mode 100644 benchmarks/osb/indices/lucene-index.json delete mode 100644 benchmarks/osb/indices/model-index.json delete mode 100644 benchmarks/osb/indices/nmslib-index.json delete mode 100644 benchmarks/osb/indices/train-index.json delete mode 100644 benchmarks/osb/operations/default.json delete mode 100644 benchmarks/osb/params/no-train-params.json delete mode 100644 benchmarks/osb/params/train-params.json delete mode 100644 benchmarks/osb/procedures/no-train-test.json delete mode 100644 benchmarks/osb/procedures/train-test.json delete mode 100644 benchmarks/osb/requirements.in delete mode 100644 benchmarks/osb/requirements.txt delete mode 100644 benchmarks/osb/tests/__init__.py delete mode 100644 benchmarks/osb/tests/data_set_helper.py delete mode 100644 benchmarks/osb/tests/test_param_sources.py delete mode 100644 benchmarks/osb/workload.json delete mode 100644 benchmarks/osb/workload.py delete mode 100644 benchmarks/perf-tool/.pylintrc delete mode 100644 benchmarks/perf-tool/.style.yapf delete mode 100644 benchmarks/perf-tool/README.md delete mode 100644 benchmarks/perf-tool/add-filters-to-dataset.py delete mode 100644 benchmarks/perf-tool/add-parent-doc-id-to-dataset.py delete mode 100644 benchmarks/perf-tool/dataset/data-nested.hdf5 delete mode 100644 benchmarks/perf-tool/dataset/data-with-attr-with-filters.hdf5 delete mode 100644 benchmarks/perf-tool/dataset/data-with-attr.hdf5 delete mode 100644 benchmarks/perf-tool/dataset/data.hdf5 delete mode 100644 benchmarks/perf-tool/knn-perf-tool.py delete mode 100644 benchmarks/perf-tool/okpt/__init__.py delete mode 100644 benchmarks/perf-tool/okpt/diff/diff.py delete mode 100644 benchmarks/perf-tool/okpt/io/args.py delete mode 100644 benchmarks/perf-tool/okpt/io/config/parsers/base.py delete mode 100644 benchmarks/perf-tool/okpt/io/config/parsers/test.py delete mode 100644 benchmarks/perf-tool/okpt/io/config/parsers/util.py delete mode 100644 benchmarks/perf-tool/okpt/io/config/schemas/test.yml delete mode 100644 benchmarks/perf-tool/okpt/io/dataset.py delete mode 100644 benchmarks/perf-tool/okpt/io/utils/reader.py delete mode 100644 benchmarks/perf-tool/okpt/io/utils/writer.py delete mode 100644 benchmarks/perf-tool/okpt/main.py delete mode 100644 benchmarks/perf-tool/okpt/test/__init__.py delete mode 100644 benchmarks/perf-tool/okpt/test/profile.py delete mode 100644 benchmarks/perf-tool/okpt/test/runner.py delete mode 100644 benchmarks/perf-tool/okpt/test/steps/base.py delete mode 100644 benchmarks/perf-tool/okpt/test/steps/factory.py delete mode 100644 benchmarks/perf-tool/okpt/test/steps/steps.py delete mode 100644 benchmarks/perf-tool/okpt/test/test.py delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/simple-nested-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnsw/test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnswpq/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnswpq/method-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnswpq/test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-hnswpq/train-index-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/method-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/train-index-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/method-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/train-index-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/method-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivf/train-index-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivfpq/index.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivfpq/method-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivfpq/test.yml delete mode 100644 benchmarks/perf-tool/release-configs/faiss-ivfpq/train-index-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/index.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/index.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/index.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/index.json delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/simple-nested-test.yml delete mode 100644 benchmarks/perf-tool/release-configs/lucene-hnsw/test.yml delete mode 100644 benchmarks/perf-tool/release-configs/nmslib-hnsw/index.json delete mode 100644 benchmarks/perf-tool/release-configs/nmslib-hnsw/test.yml delete mode 100755 benchmarks/perf-tool/release-configs/run_all_tests.sh delete mode 100644 benchmarks/perf-tool/requirements.in delete mode 100644 benchmarks/perf-tool/requirements.txt delete mode 100644 benchmarks/perf-tool/sample-configs/faiss-sift-ivf/index-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/faiss-sift-ivf/method-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/faiss-sift-ivf/test.yml delete mode 100644 benchmarks/perf-tool/sample-configs/faiss-sift-ivf/train-index-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/filter-spec/filter-1-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/filter-spec/filter-2-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/filter-spec/filter-3-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/filter-spec/filter-4-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/filter-spec/filter-5-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/index-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/test.yml delete mode 100644 benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/index-spec.json delete mode 100644 benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/test.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index e8e5e6d7b..fd7182e65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,4 +24,5 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Infrastructure ### Documentation ### Maintenance +* Remove benchmarks folder from k-NN repo [#2127](https://github.com/opensearch-project/k-NN/pull/2127) ### Refactoring diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 000000000..2e642d41b --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,4 @@ +## Benchmark Folder Tools Deprecated +All benchmark workloads have been moved to [OpenSearch Benchmark Workloads](https://github.com/opensearch-project/opensearch-benchmark-workloads/tree/main/vectorsearch). Please use OSB tool to run the benchmarks. + +If you are still interested in using the old tool, the benchmarks are moved to the [branch](https://github.com/opensearch-project/k-NN/tree/old-benchmarks/benchmarks). diff --git a/benchmarks/osb/README.md b/benchmarks/osb/README.md deleted file mode 100644 index 0d0b05f8d..000000000 --- a/benchmarks/osb/README.md +++ /dev/null @@ -1,478 +0,0 @@ -# IMPORTANT NOTE: No new features will be added to this tool . This tool is currently in maintanence mode. All new features will be added to [vector search workload]( https://github.com/opensearch-project/opensearch-benchmark-workloads/tree/main/vectorsearch) -# OpenSearch Benchmarks for k-NN - -## Overview - -This directory contains code and configurations to run k-NN benchmarking -workloads using OpenSearch Benchmarks. - -The [extensions](extensions) directory contains common code shared between -procedures. The [procedures](procedures) directory contains the individual -test procedures for this workload. - -## Getting Started - -### OpenSearch Benchmarks Background - -OpenSearch Benchmark is a framework for performance benchmarking an OpenSearch -cluster. For more details, checkout their -[repo](https://github.com/opensearch-project/opensearch-benchmark/). - -Before getting into the benchmarks, it is helpful to know a few terms: -1. Workload - Top level description of a benchmark suite. A workload will have a `workload.json` file that defines different components of the tests -2. Test Procedures - A workload can have a schedule of operations that run the test. However, a workload can also have several test procedures that define their own schedule of operations. This is helpful for sharing code between tests -3. Operation - An action against the OpenSearch cluster -4. Parameter source - Producers of parameters for OpenSearch operations -5. Runners - Code that actually will execute the OpenSearch operations - -### Setup - -OpenSearch Benchmarks requires Python 3.8 or greater to be installed. One of -the easier ways to do this is through Conda, a package and environment -management system for Python. - -First, follow the -[installation instructions](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) -to install Conda on your system. - -Next, create a Python 3.8 environment: -``` -conda create -n knn-osb python=3.8 -``` - -After the environment is created, activate it: -``` -source activate knn-osb -``` - -Lastly, clone the k-NN repo and install all required python packages: -``` -git clone https://github.com/opensearch-project/k-NN.git -cd k-NN/benchmarks/osb -pip install -r requirements.txt -``` - -After all of this completes, you should be ready to run your first benchmark! - -### Running a benchmark - -Before running a benchmark, make sure you have the endpoint of your cluster and - the machine you are running the benchmarks from can access it. - Additionally, ensure that all data has been pulled to the client. - -Currently, we support 2 test procedures for the k-NN workload: train-test and -no-train-test. The train test has steps to train a model included in the -schedule, while no train does not. Both test procedures will index a data set -of vectors into an OpenSearch index and then run a set of queries against them. - -Once you have decided which test procedure you want to use, open up -[params/train-params.json](params/train-params.json) or -[params/no-train-params.json](params/no-train-params.json) and -fill out the parameters. Notice, at the bottom of `no-train-params.json` there -are several parameters that relate to training. Ignore these. They need to be -defined for the workload but not used. - -Once the parameters are set, set the URL and PORT of your cluster and run the -command to run the test procedure. - -``` -export URL= -export PORT= -export PARAMS_FILE= -export PROCEDURE={no-train-test | train-test} - -opensearch-benchmark execute_test \ - --target-hosts $URL:$PORT \ - --workload-path ./workload.json \ - --workload-params ${PARAMS_FILE} \ - --test-procedure=${PROCEDURE} \ - --pipeline benchmark-only -``` - -## Current Procedures - -### No Train Test - -The No Train Test procedure is used to test `knn_vector` indices that do not -use an algorithm that requires training. - -#### Workflow - -1. Delete old resources in the cluster if they are present -2. Create an OpenSearch index with `knn_vector` configured to use the HNSW algorithm -3. Wait for cluster to be green -4. Ingest data set into the cluster -5. Refresh the index -6. Run queries from data set against the cluster - -#### Parameters - -| Name | Description | -|-----------------------------------------|--------------------------------------------------------------------------| -| target_index_name | Name of index to add vectors to | -| target_field_name | Name of field to add vectors to | -| target_index_body | Path to target index definition | -| target_index_primary_shards | Target index primary shards | -| target_index_replica_shards | Target index replica shards | -| target_index_dimension | Dimension of target index | -| target_index_space_type | Target index space type | -| target_index_bulk_size | Target index bulk size | -| target_index_bulk_index_data_set_format | Format of vector data set | -| target_index_bulk_index_data_set_path | Path to vector data set | -| target_index_bulk_index_clients | Clients to be used for bulk ingestion (must be divisor of data set size) | -| target_index_max_num_segments | Number of segments to merge target index down to before beginning search | -| target_index_force_merge_timeout | Timeout for of force merge requests in seconds | -| hnsw_ef_search | HNSW ef search parameter | -| hnsw_ef_construction | HNSW ef construction parameter | -| hnsw_m | HNSW m parameter | -| query_k | The number of neighbors to return for the search | -| query_clients | Number of clients to use for running queries | -| query_data_set_format | Format of vector data set for queries | -| query_data_set_path | Path to vector data set for queries | - -#### Metrics - -The result metrics of this procedure will look like: -``` ------------------------------------------------------- - _______ __ _____ - / ____(_)___ ____ _/ / / ___/_________ ________ - / /_ / / __ \/ __ `/ / \__ \/ ___/ __ \/ ___/ _ \ - / __/ / / / / / /_/ / / ___/ / /__/ /_/ / / / __/ -/_/ /_/_/ /_/\__,_/_/ /____/\___/\____/_/ \___/ ------------------------------------------------------- - -| Metric | Task | Value | Unit | -|---------------------------------------------------------------:|------------------------:|------------:|-------:| -| Cumulative indexing time of primary shards | | 1.82885 | min | -| Min cumulative indexing time across primary shards | | 0.4121 | min | -| Median cumulative indexing time across primary shards | | 0.559617 | min | -| Max cumulative indexing time across primary shards | | 0.857133 | min | -| Cumulative indexing throttle time of primary shards | | 0 | min | -| Min cumulative indexing throttle time across primary shards | | 0 | min | -| Median cumulative indexing throttle time across primary shards | | 0 | min | -| Max cumulative indexing throttle time across primary shards | | 0 | min | -| Cumulative merge time of primary shards | | 5.89065 | min | -| Cumulative merge count of primary shards | | 3 | | -| Min cumulative merge time across primary shards | | 1.95945 | min | -| Median cumulative merge time across primary shards | | 1.96345 | min | -| Max cumulative merge time across primary shards | | 1.96775 | min | -| Cumulative merge throttle time of primary shards | | 0 | min | -| Min cumulative merge throttle time across primary shards | | 0 | min | -| Median cumulative merge throttle time across primary shards | | 0 | min | -| Max cumulative merge throttle time across primary shards | | 0 | min | -| Cumulative refresh time of primary shards | | 8.52517 | min | -| Cumulative refresh count of primary shards | | 29 | | -| Min cumulative refresh time across primary shards | | 2.64265 | min | -| Median cumulative refresh time across primary shards | | 2.93913 | min | -| Max cumulative refresh time across primary shards | | 2.94338 | min | -| Cumulative flush time of primary shards | | 0.00221667 | min | -| Cumulative flush count of primary shards | | 3 | | -| Min cumulative flush time across primary shards | | 0.000733333 | min | -| Median cumulative flush time across primary shards | | 0.000733333 | min | -| Max cumulative flush time across primary shards | | 0.00075 | min | -| Total Young Gen GC time | | 0.318 | s | -| Total Young Gen GC count | | 2 | | -| Total Old Gen GC time | | 0 | s | -| Total Old Gen GC count | | 0 | | -| Store size | | 1.43566 | GB | -| Translog size | | 1.53668e-07 | GB | -| Heap used for segments | | 0.00410843 | MB | -| Heap used for doc values | | 0.000286102 | MB | -| Heap used for terms | | 0.00121307 | MB | -| Heap used for norms | | 0 | MB | -| Heap used for points | | 0 | MB | -| Heap used for stored fields | | 0.00260925 | MB | -| Segment count | | 3 | | -| Min Throughput | custom-vector-bulk | 38005.8 | docs/s | -| Mean Throughput | custom-vector-bulk | 44827.9 | docs/s | -| Median Throughput | custom-vector-bulk | 40507.2 | docs/s | -| Max Throughput | custom-vector-bulk | 88967.8 | docs/s | -| 50th percentile latency | custom-vector-bulk | 29.5857 | ms | -| 90th percentile latency | custom-vector-bulk | 49.0719 | ms | -| 99th percentile latency | custom-vector-bulk | 72.6138 | ms | -| 99.9th percentile latency | custom-vector-bulk | 279.826 | ms | -| 100th percentile latency | custom-vector-bulk | 15688 | ms | -| 50th percentile service time | custom-vector-bulk | 29.5857 | ms | -| 90th percentile service time | custom-vector-bulk | 49.0719 | ms | -| 99th percentile service time | custom-vector-bulk | 72.6138 | ms | -| 99.9th percentile service time | custom-vector-bulk | 279.826 | ms | -| 100th percentile service time | custom-vector-bulk | 15688 | ms | -| error rate | custom-vector-bulk | 0 | % | -| Min Throughput | refresh-target-index | 0.01 | ops/s | -| Mean Throughput | refresh-target-index | 0.01 | ops/s | -| Median Throughput | refresh-target-index | 0.01 | ops/s | -| Max Throughput | refresh-target-index | 0.01 | ops/s | -| 100th percentile latency | refresh-target-index | 176610 | ms | -| 100th percentile service time | refresh-target-index | 176610 | ms | -| error rate | refresh-target-index | 0 | % | -| Min Throughput | knn-query-from-data-set | 444.17 | ops/s | -| Mean Throughput | knn-query-from-data-set | 601.68 | ops/s | -| Median Throughput | knn-query-from-data-set | 621.19 | ops/s | -| Max Throughput | knn-query-from-data-set | 631.23 | ops/s | -| 50th percentile latency | knn-query-from-data-set | 14.7612 | ms | -| 90th percentile latency | knn-query-from-data-set | 20.6954 | ms | -| 99th percentile latency | knn-query-from-data-set | 27.7499 | ms | -| 99.9th percentile latency | knn-query-from-data-set | 41.3506 | ms | -| 99.99th percentile latency | knn-query-from-data-set | 162.391 | ms | -| 100th percentile latency | knn-query-from-data-set | 162.756 | ms | -| 50th percentile service time | knn-query-from-data-set | 14.7612 | ms | -| 90th percentile service time | knn-query-from-data-set | 20.6954 | ms | -| 99th percentile service time | knn-query-from-data-set | 27.7499 | ms | -| 99.9th percentile service time | knn-query-from-data-set | 41.3506 | ms | -| 99.99th percentile service time | knn-query-from-data-set | 162.391 | ms | -| 100th percentile service time | knn-query-from-data-set | 162.756 | ms | -| error rate | knn-query-from-data-set | 0 | % | - - ---------------------------------- -[INFO] SUCCESS (took 618 seconds) ---------------------------------- -``` - -### Train Test - -The Train Test procedure is used to test `knn_vector` indices that do use an -algorithm that requires training. - -#### Workflow - -1. Delete old resources in the cluster if they are present -2. Create an OpenSearch index with `knn_vector` configured to load with training data -3. Wait for cluster to be green -4. Ingest data set into the training index -5. Refresh the index -6. Train a model based on user provided input parameters -7. Create an OpenSearch index with `knn_vector` configured to use the model -8. Ingest vectors into the target index -9. Refresh the target index -10. Run queries from data set against the cluster - -#### Parameters - -| Name | Description | -|-----------------------------------------|--------------------------------------------------------------------------| -| target_index_name | Name of index to add vectors to | -| target_field_name | Name of field to add vectors to | -| target_index_body | Path to target index definition | -| target_index_primary_shards | Target index primary shards | -| target_index_replica_shards | Target index replica shards | -| target_index_dimension | Dimension of target index | -| target_index_space_type | Target index space type | -| target_index_bulk_size | Target index bulk size | -| target_index_bulk_index_data_set_format | Format of vector data set for ingestion | -| target_index_bulk_index_data_set_path | Path to vector data set for ingestion | -| target_index_bulk_index_clients | Clients to be used for bulk ingestion (must be divisor of data set size) | -| target_index_max_num_segments | Number of segments to merge target index down to before beginning search | -| target_index_force_merge_timeout | Timeout for of force merge requests in seconds | -| ivf_nlists | IVF nlist parameter | -| ivf_nprobes | IVF nprobe parameter | -| pq_code_size | PQ code_size parameter | -| pq_m | PQ m parameter | -| train_model_method | Method to be used for model (ivf or ivfpq) | -| train_model_id | Model ID | -| train_index_name | Name of index to put training data into | -| train_field_name | Name of field to put training data into | -| train_index_body | Path to train index definition | -| train_search_size | Search size to use when pulling training data | -| train_timeout | Timeout to wait for training to finish | -| train_index_primary_shards | Train index primary shards | -| train_index_replica_shards | Train index replica shards | -| train_index_bulk_size | Train index bulk size | -| train_index_data_set_format | Format of vector data set for training | -| train_index_data_set_path | Path to vector data set for training | -| train_index_num_vectors | Number of vectors to use from vector data set for training | -| train_index_bulk_index_clients | Clients to be used for bulk ingestion (must be divisor of data set size) | -| query_k | The number of neighbors to return for the search | -| query_clients | Number of clients to use for running queries | -| query_data_set_format | Format of vector data set for queries | -| query_data_set_path | Path to vector data set for queries | - -#### Metrics - -The result metrics of this procedure will look like: -``` ------------------------------------------------------- - _______ __ _____ - / ____(_)___ ____ _/ / / ___/_________ ________ - / /_ / / __ \/ __ `/ / \__ \/ ___/ __ \/ ___/ _ \ - / __/ / / / / / /_/ / / ___/ / /__/ /_/ / / / __/ -/_/ /_/_/ /_/\__,_/_/ /____/\___/\____/_/ \___/ ------------------------------------------------------- - -| Metric | Task | Value | Unit | -|---------------------------------------------------------------:|------------------------:|-----------:|-----------------:| -| Cumulative indexing time of primary shards | | 2.92382 | min | -| Min cumulative indexing time across primary shards | | 0.42245 | min | -| Median cumulative indexing time across primary shards | | 0.43395 | min | -| Max cumulative indexing time across primary shards | | 1.63347 | min | -| Cumulative indexing throttle time of primary shards | | 0 | min | -| Min cumulative indexing throttle time across primary shards | | 0 | min | -| Median cumulative indexing throttle time across primary shards | | 0 | min | -| Max cumulative indexing throttle time across primary shards | | 0 | min | -| Cumulative merge time of primary shards | | 1.36293 | min | -| Cumulative merge count of primary shards | | 20 | | -| Min cumulative merge time across primary shards | | 0.263283 | min | -| Median cumulative merge time across primary shards | | 0.291733 | min | -| Max cumulative merge time across primary shards | | 0.516183 | min | -| Cumulative merge throttle time of primary shards | | 0.701683 | min | -| Min cumulative merge throttle time across primary shards | | 0.163883 | min | -| Median cumulative merge throttle time across primary shards | | 0.175717 | min | -| Max cumulative merge throttle time across primary shards | | 0.186367 | min | -| Cumulative refresh time of primary shards | | 0.222217 | min | -| Cumulative refresh count of primary shards | | 67 | | -| Min cumulative refresh time across primary shards | | 0.03915 | min | -| Median cumulative refresh time across primary shards | | 0.039825 | min | -| Max cumulative refresh time across primary shards | | 0.103417 | min | -| Cumulative flush time of primary shards | | 0.0276833 | min | -| Cumulative flush count of primary shards | | 1 | | -| Min cumulative flush time across primary shards | | 0 | min | -| Median cumulative flush time across primary shards | | 0 | min | -| Max cumulative flush time across primary shards | | 0.0276833 | min | -| Total Young Gen GC time | | 0.074 | s | -| Total Young Gen GC count | | 8 | | -| Total Old Gen GC time | | 0 | s | -| Total Old Gen GC count | | 0 | | -| Store size | | 1.67839 | GB | -| Translog size | | 0.115145 | GB | -| Heap used for segments | | 0.0350914 | MB | -| Heap used for doc values | | 0.00771713 | MB | -| Heap used for terms | | 0.0101089 | MB | -| Heap used for norms | | 0 | MB | -| Heap used for points | | 0 | MB | -| Heap used for stored fields | | 0.0172653 | MB | -| Segment count | | 25 | | -| Min Throughput | delete-model | 25.45 | ops/s | -| Mean Throughput | delete-model | 25.45 | ops/s | -| Median Throughput | delete-model | 25.45 | ops/s | -| Max Throughput | delete-model | 25.45 | ops/s | -| 100th percentile latency | delete-model | 39.0409 | ms | -| 100th percentile service time | delete-model | 39.0409 | ms | -| error rate | delete-model | 0 | % | -| Min Throughput | train-vector-bulk | 49518.9 | docs/s | -| Mean Throughput | train-vector-bulk | 54418.8 | docs/s | -| Median Throughput | train-vector-bulk | 52984.2 | docs/s | -| Max Throughput | train-vector-bulk | 62118.3 | docs/s | -| 50th percentile latency | train-vector-bulk | 26.5293 | ms | -| 90th percentile latency | train-vector-bulk | 41.8212 | ms | -| 99th percentile latency | train-vector-bulk | 239.351 | ms | -| 99.9th percentile latency | train-vector-bulk | 348.507 | ms | -| 100th percentile latency | train-vector-bulk | 436.292 | ms | -| 50th percentile service time | train-vector-bulk | 26.5293 | ms | -| 90th percentile service time | train-vector-bulk | 41.8212 | ms | -| 99th percentile service time | train-vector-bulk | 239.351 | ms | -| 99.9th percentile service time | train-vector-bulk | 348.507 | ms | -| 100th percentile service time | train-vector-bulk | 436.292 | ms | -| error rate | train-vector-bulk | 0 | % | -| Min Throughput | refresh-train-index | 0.47 | ops/s | -| Mean Throughput | refresh-train-index | 0.47 | ops/s | -| Median Throughput | refresh-train-index | 0.47 | ops/s | -| Max Throughput | refresh-train-index | 0.47 | ops/s | -| 100th percentile latency | refresh-train-index | 2142.96 | ms | -| 100th percentile service time | refresh-train-index | 2142.96 | ms | -| error rate | refresh-train-index | 0 | % | -| Min Throughput | ivfpq-train-model | 0.01 | models_trained/s | -| Mean Throughput | ivfpq-train-model | 0.01 | models_trained/s | -| Median Throughput | ivfpq-train-model | 0.01 | models_trained/s | -| Max Throughput | ivfpq-train-model | 0.01 | models_trained/s | -| 100th percentile latency | ivfpq-train-model | 136563 | ms | -| 100th percentile service time | ivfpq-train-model | 136563 | ms | -| error rate | ivfpq-train-model | 0 | % | -| Min Throughput | custom-vector-bulk | 62384.8 | docs/s | -| Mean Throughput | custom-vector-bulk | 69035.2 | docs/s | -| Median Throughput | custom-vector-bulk | 68675.4 | docs/s | -| Max Throughput | custom-vector-bulk | 80713.4 | docs/s | -| 50th percentile latency | custom-vector-bulk | 18.7726 | ms | -| 90th percentile latency | custom-vector-bulk | 34.8881 | ms | -| 99th percentile latency | custom-vector-bulk | 150.435 | ms | -| 99.9th percentile latency | custom-vector-bulk | 296.862 | ms | -| 100th percentile latency | custom-vector-bulk | 344.394 | ms | -| 50th percentile service time | custom-vector-bulk | 18.7726 | ms | -| 90th percentile service time | custom-vector-bulk | 34.8881 | ms | -| 99th percentile service time | custom-vector-bulk | 150.435 | ms | -| 99.9th percentile service time | custom-vector-bulk | 296.862 | ms | -| 100th percentile service time | custom-vector-bulk | 344.394 | ms | -| error rate | custom-vector-bulk | 0 | % | -| Min Throughput | refresh-target-index | 28.32 | ops/s | -| Mean Throughput | refresh-target-index | 28.32 | ops/s | -| Median Throughput | refresh-target-index | 28.32 | ops/s | -| Max Throughput | refresh-target-index | 28.32 | ops/s | -| 100th percentile latency | refresh-target-index | 34.9811 | ms | -| 100th percentile service time | refresh-target-index | 34.9811 | ms | -| error rate | refresh-target-index | 0 | % | -| Min Throughput | knn-query-from-data-set | 0.9 | ops/s | -| Mean Throughput | knn-query-from-data-set | 453.84 | ops/s | -| Median Throughput | knn-query-from-data-set | 554.15 | ops/s | -| Max Throughput | knn-query-from-data-set | 681 | ops/s | -| 50th percentile latency | knn-query-from-data-set | 11.7174 | ms | -| 90th percentile latency | knn-query-from-data-set | 15.4445 | ms | -| 99th percentile latency | knn-query-from-data-set | 21.0682 | ms | -| 99.9th percentile latency | knn-query-from-data-set | 39.5414 | ms | -| 99.99th percentile latency | knn-query-from-data-set | 1116.33 | ms | -| 100th percentile latency | knn-query-from-data-set | 1116.66 | ms | -| 50th percentile service time | knn-query-from-data-set | 11.7174 | ms | -| 90th percentile service time | knn-query-from-data-set | 15.4445 | ms | -| 99th percentile service time | knn-query-from-data-set | 21.0682 | ms | -| 99.9th percentile service time | knn-query-from-data-set | 39.5414 | ms | -| 99.99th percentile service time | knn-query-from-data-set | 1116.33 | ms | -| 100th percentile service time | knn-query-from-data-set | 1116.66 | ms | -| error rate | knn-query-from-data-set | 0 | % | - - ---------------------------------- -[INFO] SUCCESS (took 281 seconds) ---------------------------------- -``` - -## Adding a procedure - -Adding additional benchmarks is very simple. First, place any custom parameter -sources or runners in the [extensions](extensions) directory so that other tests -can use them and also update the [documentation](#custom-extensions) -accordingly. - -Next, create a new test procedure file and add the operations you want your test -to run. Lastly, be sure to update documentation. - -## Custom Extensions - -OpenSearch Benchmarks is very extendable. To fit the plugins needs, we add -customer parameter sources and custom runners. Parameter sources allow users to -supply custom parameters to an operation. Runners are what actually performs -the operations against OpenSearch. - -### Custom Parameter Sources - -Custom parameter sources are defined in [extensions/param_sources.py](extensions/param_sources.py). - -| Name | Description | Parameters | -|-------------------------|------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| bulk-from-data-set | Provides bulk payloads containing vectors from a data set for indexing | 1. data_set_format - (hdf5, bigann)
2. data_set_path - path to data set
3. index - name of index for bulk ingestion
4. field - field to place vector in
5. bulk_size - vectors per bulk request
6. num_vectors - number of vectors to use from the data set. Defaults to the whole data set. | -| knn-query-from-data-set | Provides a query generated from a data set | 1. data_set_format - (hdf5, bigann)
2. data_set_path - path to data set
3. index - name of index to query against
4. field - field to to query against
5. k - number of results to return
6. dimension - size of vectors to produce
7. num_vectors - number of vectors to use from the data set. Defaults to the whole data set. | - - -### Custom Runners - -Custom runners are defined in [extensions/runners.py](extensions/runners.py). - -| Syntax | Description | Parameters | -|--------------------|-----------------------------------------------------|:-------------------------------------------------------------------------------------------------------------| -| custom-vector-bulk | Bulk index a set of vectors in an OpenSearch index. | 1. bulk-from-data-set | -| custom-refresh | Run refresh with retry capabilities. | 1. index - name of index to refresh
2. retries - number of times to retry the operation | -| train-model | Trains a model. | 1. body - model definition
2. timeout - time to wait for model to finish
3. model_id - ID of model | -| delete-model | Deletes a model if it exists. | 1. model_id - ID of model | - -### Testing - -We have a set of unit tests for our extensions in -[tests](tests). To run all the tests, run the following -command: - -```commandline -python -m unittest discover ./tests -``` - -To run an individual test: -```commandline -python -m unittest tests.test_param_sources.VectorsFromDataSetParamSourceTestCase.test_partition_hdf5 -``` diff --git a/benchmarks/osb/__init__.py b/benchmarks/osb/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/osb/extensions/__init__.py b/benchmarks/osb/extensions/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/osb/extensions/data_set.py b/benchmarks/osb/extensions/data_set.py deleted file mode 100644 index 7e8058844..000000000 --- a/benchmarks/osb/extensions/data_set.py +++ /dev/null @@ -1,202 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -import os -import numpy as np -from abc import ABC, ABCMeta, abstractmethod -from enum import Enum -from typing import cast -import h5py -import struct - - -class Context(Enum): - """DataSet context enum. Can be used to add additional context for how a - data-set should be interpreted. - """ - INDEX = 1 - QUERY = 2 - NEIGHBORS = 3 - - -class DataSet(ABC): - """DataSet interface. Used for reading data-sets from files. - - Methods: - read: Read a chunk of data from the data-set - seek: Get to position in the data-set - size: Gets the number of items in the data-set - reset: Resets internal state of data-set to beginning - """ - __metaclass__ = ABCMeta - - BEGINNING = 0 - - @abstractmethod - def read(self, chunk_size: int): - pass - - @abstractmethod - def seek(self, offset: int): - pass - - @abstractmethod - def size(self): - pass - - @abstractmethod - def reset(self): - pass - - -class HDF5DataSet(DataSet): - """ Data-set format corresponding to `ANN Benchmarks - `_ - """ - - FORMAT_NAME = "hdf5" - - def __init__(self, dataset_path: str, context: Context): - file = h5py.File(dataset_path) - self.data = cast(h5py.Dataset, file[self.parse_context(context)]) - self.current = self.BEGINNING - - def read(self, chunk_size: int): - if self.current >= self.size(): - return None - - end_offset = self.current + chunk_size - if end_offset > self.size(): - end_offset = self.size() - - v = cast(np.ndarray, self.data[self.current:end_offset]) - self.current = end_offset - return v - - def seek(self, offset: int): - - if offset < self.BEGINNING: - raise Exception("Offset must be greater than or equal to 0") - - if offset >= self.size(): - raise Exception("Offset must be less than the data set size") - - self.current = offset - - def size(self): - return self.data.len() - - def reset(self): - self.current = self.BEGINNING - - @staticmethod - def parse_context(context: Context) -> str: - if context == Context.NEIGHBORS: - return "neighbors" - - if context == Context.INDEX: - return "train" - - if context == Context.QUERY: - return "test" - - raise Exception("Unsupported context") - - -class BigANNVectorDataSet(DataSet): - """ Data-set format for vector data-sets for `Big ANN Benchmarks - `_ - """ - - DATA_SET_HEADER_LENGTH = 8 - U8BIN_EXTENSION = "u8bin" - FBIN_EXTENSION = "fbin" - FORMAT_NAME = "bigann" - - BYTES_PER_U8INT = 1 - BYTES_PER_FLOAT = 4 - - def __init__(self, dataset_path: str): - self.file = open(dataset_path, 'rb') - self.file.seek(BigANNVectorDataSet.BEGINNING, os.SEEK_END) - num_bytes = self.file.tell() - self.file.seek(BigANNVectorDataSet.BEGINNING) - - if num_bytes < BigANNVectorDataSet.DATA_SET_HEADER_LENGTH: - raise Exception("File is invalid") - - self.num_points = int.from_bytes(self.file.read(4), "little") - self.dimension = int.from_bytes(self.file.read(4), "little") - self.bytes_per_num = self._get_data_size(dataset_path) - - if (num_bytes - BigANNVectorDataSet.DATA_SET_HEADER_LENGTH) != self.num_points * \ - self.dimension * self.bytes_per_num: - raise Exception("File is invalid") - - self.reader = self._value_reader(dataset_path) - self.current = BigANNVectorDataSet.BEGINNING - - def read(self, chunk_size: int): - if self.current >= self.size(): - return None - - end_offset = self.current + chunk_size - if end_offset > self.size(): - end_offset = self.size() - - v = np.asarray([self._read_vector() for _ in - range(end_offset - self.current)]) - self.current = end_offset - return v - - def seek(self, offset: int): - - if offset < self.BEGINNING: - raise Exception("Offset must be greater than or equal to 0") - - if offset >= self.size(): - raise Exception("Offset must be less than the data set size") - - bytes_offset = BigANNVectorDataSet.DATA_SET_HEADER_LENGTH + \ - self.dimension * self.bytes_per_num * offset - self.file.seek(bytes_offset) - self.current = offset - - def _read_vector(self): - return np.asarray([self.reader(self.file) for _ in - range(self.dimension)]) - - def size(self): - return self.num_points - - def reset(self): - self.file.seek(BigANNVectorDataSet.DATA_SET_HEADER_LENGTH) - self.current = BigANNVectorDataSet.BEGINNING - - def __del__(self): - self.file.close() - - @staticmethod - def _get_data_size(file_name): - ext = file_name.split('.')[-1] - if ext == BigANNVectorDataSet.U8BIN_EXTENSION: - return BigANNVectorDataSet.BYTES_PER_U8INT - - if ext == BigANNVectorDataSet.FBIN_EXTENSION: - return BigANNVectorDataSet.BYTES_PER_FLOAT - - raise Exception("Unknown extension") - - @staticmethod - def _value_reader(file_name): - ext = file_name.split('.')[-1] - if ext == BigANNVectorDataSet.U8BIN_EXTENSION: - return lambda file: float(int.from_bytes(file.read(BigANNVectorDataSet.BYTES_PER_U8INT), "little")) - - if ext == BigANNVectorDataSet.FBIN_EXTENSION: - return lambda file: struct.unpack('= self.num_vectors + self.offset: - raise StopIteration - - if self.vector_batch is None or len(self.vector_batch) == 0: - self.vector_batch = self._batch_read(self.data_set) - if self.vector_batch is None: - raise StopIteration - vector = self.vector_batch.pop(0) - self.current += 1 - self.percent_completed = self.current / self.total - - return self._build_query_body(self.index_name, self.field_name, self.k, - vector) - - def _batch_read(self, data_set: DataSet): - return list(data_set.read(self.VECTOR_READ_BATCH_SIZE)) - - def _build_query_body(self, index_name: str, field_name: str, k: int, - vector) -> dict: - """Builds a k-NN query that can be used to execute an approximate nearest - neighbor search against a k-NN plugin index - Args: - index_name: name of index to search - field_name: name of field to search - k: number of results to return - vector: vector used for query - Returns: - A dictionary containing the body used for search, a set of request - parameters to attach to the search and the name of the index. - """ - return { - "index": index_name, - "request-params": { - "_source": { - "exclude": [field_name] - } - }, - "body": { - "size": k, - "query": { - "knn": { - field_name: { - "vector": vector, - "k": k - } - } - } - } - } - - -class BulkVectorsFromDataSetParamSource(VectorsFromDataSetParamSource): - """ Create bulk index requests from a data set of vectors. - - Attributes: - bulk_size: number of vectors per request - retries: number of times to retry the request when it fails - """ - - DEFAULT_RETRIES = 10 - - def __init__(self, workload, params, **kwargs): - super().__init__(params, Context.INDEX) - self.bulk_size: int = parse_int_parameter("bulk_size", params) - self.retries: int = parse_int_parameter("retries", params, - self.DEFAULT_RETRIES) - - def params(self): - """ - Returns: A bulk index parameter with vectors from a data set. - """ - if self.current >= self.num_vectors + self.offset: - raise StopIteration - - def action(doc_id): - return {'index': {'_index': self.index_name, '_id': doc_id}} - - partition = self.data_set.read(self.bulk_size) - body = bulk_transform(partition, self.field_name, action, self.current) - size = len(body) // 2 - self.current += size - self.percent_completed = self.current / self.total - - return { - "body": body, - "retries": self.retries, - "size": size - } diff --git a/benchmarks/osb/extensions/registry.py b/benchmarks/osb/extensions/registry.py deleted file mode 100644 index 5ce17ab6f..000000000 --- a/benchmarks/osb/extensions/registry.py +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -from .param_sources import register as param_sources_register -from .runners import register as runners_register - - -def register(registry): - param_sources_register(registry) - runners_register(registry) diff --git a/benchmarks/osb/extensions/runners.py b/benchmarks/osb/extensions/runners.py deleted file mode 100644 index d048f80b0..000000000 --- a/benchmarks/osb/extensions/runners.py +++ /dev/null @@ -1,121 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -from opensearchpy.exceptions import ConnectionTimeout -from .util import parse_int_parameter, parse_string_parameter -import logging -import time - - -def register(registry): - registry.register_runner( - "custom-vector-bulk", BulkVectorsFromDataSetRunner(), async_runner=True - ) - registry.register_runner( - "custom-refresh", CustomRefreshRunner(), async_runner=True - ) - registry.register_runner( - "train-model", TrainModelRunner(), async_runner=True - ) - registry.register_runner( - "delete-model", DeleteModelRunner(), async_runner=True - ) - - -class BulkVectorsFromDataSetRunner: - - async def __call__(self, opensearch, params): - size = parse_int_parameter("size", params) - retries = parse_int_parameter("retries", params, 0) + 1 - - for _ in range(retries): - try: - await opensearch.bulk( - body=params["body"], - timeout='5m' - ) - - return size, "docs" - except ConnectionTimeout: - logging.getLogger(__name__)\ - .warning("Bulk vector ingestion timed out. Retrying") - - raise TimeoutError("Failed to submit bulk request in specified number " - "of retries: {}".format(retries)) - - def __repr__(self, *args, **kwargs): - return "custom-vector-bulk" - - -class CustomRefreshRunner: - - async def __call__(self, opensearch, params): - retries = parse_int_parameter("retries", params, 0) + 1 - - for _ in range(retries): - try: - await opensearch.indices.refresh( - index=parse_string_parameter("index", params) - ) - - return - except ConnectionTimeout: - logging.getLogger(__name__)\ - .warning("Custom refresh timed out. Retrying") - - raise TimeoutError("Failed to refresh the index in specified number " - "of retries: {}".format(retries)) - - def __repr__(self, *args, **kwargs): - return "custom-refresh" - - -class TrainModelRunner: - - async def __call__(self, opensearch, params): - # Train a model and wait for it training to complete - body = params["body"] - timeout = parse_int_parameter("timeout", params) - model_id = parse_string_parameter("model_id", params) - - method = "POST" - model_uri = "/_plugins/_knn/models/{}".format(model_id) - await opensearch.transport.perform_request(method, "{}/_train".format(model_uri), body=body) - - start_time = time.time() - while time.time() < start_time + timeout: - time.sleep(1) - model_response = await opensearch.transport.perform_request("GET", model_uri) - - if 'state' not in model_response.keys(): - continue - - if model_response['state'] == 'created': - #TODO: Return model size as well - return 1, "models_trained" - - if model_response['state'] == 'failed': - raise Exception("Failed to create model: {}".format(model_response)) - - raise Exception('Failed to create model: {} within timeout {} seconds' - .format(model_id, timeout)) - - def __repr__(self, *args, **kwargs): - return "train-model" - - -class DeleteModelRunner: - - async def __call__(self, opensearch, params): - # Delete model provided by model id - method = "DELETE" - model_id = parse_string_parameter("model_id", params) - uri = "/_plugins/_knn/models/{}".format(model_id) - - # Ignore if model doesnt exist - await opensearch.transport.perform_request(method, uri, params={"ignore": [400, 404]}) - - def __repr__(self, *args, **kwargs): - return "delete-model" diff --git a/benchmarks/osb/extensions/util.py b/benchmarks/osb/extensions/util.py deleted file mode 100644 index f7f6aab62..000000000 --- a/benchmarks/osb/extensions/util.py +++ /dev/null @@ -1,71 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -import numpy as np -from typing import List -from typing import Dict -from typing import Any - - -def bulk_transform(partition: np.ndarray, field_name: str, action, - offset: int) -> List[Dict[str, Any]]: - """Partitions and transforms a list of vectors into OpenSearch's bulk - injection format. - Args: - offset: to start counting from - partition: An array of vectors to transform. - field_name: field name for action - action: Bulk API action. - Returns: - An array of transformed vectors in bulk format. - """ - actions = [] - _ = [ - actions.extend([action(i + offset), None]) - for i in range(len(partition)) - ] - actions[1::2] = [{field_name: vec} for vec in partition.tolist()] - return actions - - -def parse_string_parameter(key: str, params: dict, default: str = None) -> str: - if key not in params: - if default is not None: - return default - raise ConfigurationError( - "Value cannot be None for param {}".format(key) - ) - - if type(params[key]) is str: - return params[key] - - raise ConfigurationError("Value must be a string for param {}".format(key)) - - -def parse_int_parameter(key: str, params: dict, default: int = None) -> int: - if key not in params: - if default: - return default - raise ConfigurationError( - "Value cannot be None for param {}".format(key) - ) - - if type(params[key]) is int: - return params[key] - - raise ConfigurationError("Value must be a int for param {}".format(key)) - - -class ConfigurationError(Exception): - """Exception raised for errors configuration. - - Attributes: - message -- explanation of the error - """ - - def __init__(self, message: str): - self.message = f'{message}' - super().__init__(self.message) diff --git a/benchmarks/osb/indices/faiss-index.json b/benchmarks/osb/indices/faiss-index.json deleted file mode 100644 index 2db4d34d4..000000000 --- a/benchmarks/osb/indices/faiss-index.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": {{ target_index_primary_shards }}, - "number_of_replicas": {{ target_index_replica_shards }} - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": {{ target_index_dimension }}, - "method": { - "name": "hnsw", - "space_type": "{{ target_index_space_type }}", - "engine": "faiss", - "parameters": { - "ef_search": {{ hnsw_ef_search }}, - "ef_construction": {{ hnsw_ef_construction }}, - "m": {{ hnsw_m }} - } - } - } - } - } -} diff --git a/benchmarks/osb/indices/lucene-index.json b/benchmarks/osb/indices/lucene-index.json deleted file mode 100644 index 0a4ed868a..000000000 --- a/benchmarks/osb/indices/lucene-index.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": {{ target_index_primary_shards }}, - "number_of_replicas": {{ target_index_replica_shards }} - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": {{ target_index_dimension }}, - "method": { - "name": "hnsw", - "space_type": "{{ target_index_space_type }}", - "engine": "lucene", - "parameters": { - "ef_construction": {{ hnsw_ef_construction }}, - "m": {{ hnsw_m }} - } - } - } - } - } -} diff --git a/benchmarks/osb/indices/model-index.json b/benchmarks/osb/indices/model-index.json deleted file mode 100644 index 0e92c8903..000000000 --- a/benchmarks/osb/indices/model-index.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": {{ target_index_primary_shards | default(1) }}, - "number_of_replicas": {{ target_index_replica_shards | default(0) }} - } - }, - "mappings": { - "properties": { - "{{ target_field_name }}": { - "type": "knn_vector", - "model_id": "{{ train_model_id }}" - } - } - } -} diff --git a/benchmarks/osb/indices/nmslib-index.json b/benchmarks/osb/indices/nmslib-index.json deleted file mode 100644 index 4ceb57977..000000000 --- a/benchmarks/osb/indices/nmslib-index.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "knn.algo_param.ef_search": {{ hnsw_ef_search }}, - "number_of_shards": {{ target_index_primary_shards }}, - "number_of_replicas": {{ target_index_replica_shards }} - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": {{ target_index_dimension }}, - "method": { - "name": "hnsw", - "space_type": "{{ target_index_space_type }}", - "engine": "nmslib", - "parameters": { - "ef_construction": {{ hnsw_ef_construction }}, - "m": {{ hnsw_m }} - } - } - } - } - } -} diff --git a/benchmarks/osb/indices/train-index.json b/benchmarks/osb/indices/train-index.json deleted file mode 100644 index 82af8215e..000000000 --- a/benchmarks/osb/indices/train-index.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": {{ train_index_primary_shards }}, - "number_of_replicas": {{ train_index_replica_shards }} - } - }, - "mappings": { - "properties": { - "{{ train_field_name }}": { - "type": "knn_vector", - "dimension": {{ target_index_dimension }} - } - } - } -} diff --git a/benchmarks/osb/operations/default.json b/benchmarks/osb/operations/default.json deleted file mode 100644 index ee33166f0..000000000 --- a/benchmarks/osb/operations/default.json +++ /dev/null @@ -1,53 +0,0 @@ -[ - { - "name": "ivfpq-train-model", - "operation-type": "train-model", - "model_id": "{{ train_model_id }}", - "timeout": {{ train_timeout }}, - "body": { - "training_index": "{{ train_index_name }}", - "training_field": "{{ train_field_name }}", - "dimension": {{ target_index_dimension }}, - "search_size": {{ train_search_size }}, - "max_training_vector_count": {{ train_index_num_vectors }}, - "method": { - "name":"ivf", - "engine":"faiss", - "space_type": "{{ target_index_space_type }}", - "parameters":{ - "nlist": {{ ivf_nlists }}, - "nprobes": {{ ivf_nprobes }}, - "encoder":{ - "name":"pq", - "parameters":{ - "code_size": {{ pq_code_size }}, - "m": {{ pq_m }} - } - } - } - } - } - }, - { - "name": "ivf-train-model", - "operation-type": "train-model", - "model_id": "{{ train_model_id }}", - "timeout": {{ train_timeout | default(1000) }}, - "body": { - "training_index": "{{ train_index_name }}", - "training_field": "{{ train_field_name }}", - "search_size": {{ train_search_size }}, - "dimension": {{ target_index_dimension }}, - "max_training_vector_count": {{ train_index_num_vectors }}, - "method": { - "name":"ivf", - "engine":"faiss", - "space_type": "{{ target_index_space_type }}", - "parameters":{ - "nlist": {{ ivf_nlists }}, - "nprobes": {{ ivf_nprobes }} - } - } - } - } -] diff --git a/benchmarks/osb/params/no-train-params.json b/benchmarks/osb/params/no-train-params.json deleted file mode 100644 index 58e4197fd..000000000 --- a/benchmarks/osb/params/no-train-params.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "target_index_name": "target_index", - "target_field_name": "target_field", - "target_index_body": "indices/nmslib-index.json", - "target_index_primary_shards": 3, - "target_index_replica_shards": 1, - "target_index_dimension": 128, - "target_index_space_type": "l2", - "target_index_bulk_size": 200, - "target_index_bulk_index_data_set_format": "hdf5", - "target_index_bulk_index_data_set_path": "", - "target_index_bulk_index_clients": 10, - "target_index_max_num_segments": 10, - "target_index_force_merge_timeout": 45.0, - "hnsw_ef_search": 512, - "hnsw_ef_construction": 512, - "hnsw_m": 16, - - "query_k": 10, - "query_clients": 10, - "query_data_set_format": "hdf5", - "query_data_set_path": "", - - "ivf_nlists": 1, - "ivf_nprobes": 1, - "pq_code_size": 1, - "pq_m": 1, - "train_model_method": "", - "train_model_id": "", - "train_index_name": "", - "train_field_name": "", - "train_index_body": "", - "train_search_size": 1, - "train_timeout": 1, - "train_index_bulk_size": 1, - "train_index_data_set_format": "", - "train_index_data_set_path": "", - "train_index_num_vectors": 1, - "train_index_bulk_index_clients": 1 -} diff --git a/benchmarks/osb/params/train-params.json b/benchmarks/osb/params/train-params.json deleted file mode 100644 index f55ed4333..000000000 --- a/benchmarks/osb/params/train-params.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "target_index_name": "target_index", - "target_field_name": "target_field", - "target_index_body": "indices/model-index.json", - "target_index_primary_shards": 3, - "target_index_replica_shards": 1, - "target_index_dimension": 128, - "target_index_space_type": "l2", - "target_index_bulk_size": 200, - "target_index_bulk_index_data_set_format": "hdf5", - "target_index_bulk_index_data_set_path": "", - "target_index_bulk_index_clients": 10, - "target_index_max_num_segments": 10, - "target_index_force_merge_timeout": 45.0, - "ivf_nlists": 10, - "ivf_nprobes": 1, - "pq_code_size": 8, - "pq_m": 8, - "train_model_method": "ivfpq", - "train_model_id": "test-model", - "train_index_name": "train_index", - "train_field_name": "train_field", - "train_index_body": "indices/train-index.json", - "train_search_size": 500, - "train_timeout": 5000, - "train_index_primary_shards": 1, - "train_index_replica_shards": 0, - "train_index_bulk_size": 200, - "train_index_data_set_format": "hdf5", - "train_index_data_set_path": "", - "train_index_num_vectors": 1000000, - "train_index_bulk_index_clients": 10, - - "query_k": 10, - "query_clients": 10, - "query_data_set_format": "hdf5", - "query_data_set_path": "" -} diff --git a/benchmarks/osb/procedures/no-train-test.json b/benchmarks/osb/procedures/no-train-test.json deleted file mode 100644 index 01985b914..000000000 --- a/benchmarks/osb/procedures/no-train-test.json +++ /dev/null @@ -1,73 +0,0 @@ -{% import "benchmark.helpers" as benchmark with context %} -{ - "name": "no-train-test", - "default": true, - "schedule": [ - { - "operation": { - "name": "delete-target-index", - "operation-type": "delete-index", - "only-if-exists": true, - "index": "{{ target_index_name }}" - } - }, - { - "operation": { - "name": "create-target-index", - "operation-type": "create-index", - "index": "{{ target_index_name }}" - } - }, - { - "name": "wait-for-cluster-to-be-green", - "operation": "cluster-health", - "request-params": { - "wait_for_status": "green" - } - }, - { - "operation": { - "name": "custom-vector-bulk", - "operation-type": "custom-vector-bulk", - "param-source": "bulk-from-data-set", - "index": "{{ target_index_name }}", - "field": "{{ target_field_name }}", - "bulk_size": {{ target_index_bulk_size }}, - "data_set_format": "{{ target_index_bulk_index_data_set_format }}", - "data_set_path": "{{ target_index_bulk_index_data_set_path }}" - }, - "clients": {{ target_index_bulk_index_clients }} - }, - { - "operation": { - "name": "refresh-target-index", - "operation-type": "custom-refresh", - "index": "{{ target_index_name }}", - "retries": 100 - } - }, - { - "operation": { - "name": "force-merge", - "operation-type": "force-merge", - "request-timeout": {{ target_index_force_merge_timeout }}, - "index": "{{ target_index_name }}", - "mode": "polling", - "max-num-segments": {{ target_index_max_num_segments }} - } - }, - { - "operation": { - "name": "knn-query-from-data-set", - "operation-type": "search", - "index": "{{ target_index_name }}", - "param-source": "knn-query-from-data-set", - "k": {{ query_k }}, - "field": "{{ target_field_name }}", - "data_set_format": "{{ query_data_set_format }}", - "data_set_path": "{{ query_data_set_path }}" - }, - "clients": {{ query_clients }} - } - ] -} diff --git a/benchmarks/osb/procedures/train-test.json b/benchmarks/osb/procedures/train-test.json deleted file mode 100644 index ca26db0b0..000000000 --- a/benchmarks/osb/procedures/train-test.json +++ /dev/null @@ -1,127 +0,0 @@ -{% import "benchmark.helpers" as benchmark with context %} -{ - "name": "train-test", - "default": false, - "schedule": [ - { - "operation": { - "name": "delete-target-index", - "operation-type": "delete-index", - "only-if-exists": true, - "index": "{{ target_index_name }}" - } - }, - { - "operation": { - "name": "delete-train-index", - "operation-type": "delete-index", - "only-if-exists": true, - "index": "{{ train_index_name }}" - } - }, - { - "operation": { - "operation-type": "delete-model", - "name": "delete-model", - "model_id": "{{ train_model_id }}" - } - }, - { - "operation": { - "name": "create-train-index", - "operation-type": "create-index", - "index": "{{ train_index_name }}" - } - }, - { - "name": "wait-for-train-index-to-be-green", - "operation": "cluster-health", - "request-params": { - "wait_for_status": "green" - } - }, - { - "operation": { - "name": "train-vector-bulk", - "operation-type": "custom-vector-bulk", - "param-source": "bulk-from-data-set", - "index": "{{ train_index_name }}", - "field": "{{ train_field_name }}", - "bulk_size": {{ train_index_bulk_size }}, - "data_set_format": "{{ train_index_data_set_format }}", - "data_set_path": "{{ train_index_data_set_path }}", - "num_vectors": {{ train_index_num_vectors }} - }, - "clients": {{ train_index_bulk_index_clients }} - }, - { - "operation": { - "name": "refresh-train-index", - "operation-type": "custom-refresh", - "index": "{{ train_index_name }}", - "retries": 100 - } - }, - { - "operation": "{{ train_model_method }}-train-model" - }, - { - "operation": { - "name": "create-target-index", - "operation-type": "create-index", - "index": "{{ target_index_name }}" - } - }, - { - "name": "wait-for-target-index-to-be-green", - "operation": "cluster-health", - "request-params": { - "wait_for_status": "green" - } - }, - { - "operation": { - "name": "custom-vector-bulk", - "operation-type": "custom-vector-bulk", - "param-source": "bulk-from-data-set", - "index": "{{ target_index_name }}", - "field": "{{ target_field_name }}", - "bulk_size": {{ target_index_bulk_size }}, - "data_set_format": "{{ target_index_bulk_index_data_set_format }}", - "data_set_path": "{{ target_index_bulk_index_data_set_path }}" - }, - "clients": {{ target_index_bulk_index_clients }} - }, - { - "operation": { - "name": "refresh-target-index", - "operation-type": "custom-refresh", - "index": "{{ target_index_name }}", - "retries": 100 - } - }, - { - "operation": { - "name": "force-merge", - "operation-type": "force-merge", - "request-timeout": {{ target_index_force_merge_timeout }}, - "index": "{{ target_index_name }}", - "mode": "polling", - "max-num-segments": {{ target_index_max_num_segments }} - } - }, - { - "operation": { - "name": "knn-query-from-data-set", - "operation-type": "search", - "index": "{{ target_index_name }}", - "param-source": "knn-query-from-data-set", - "k": {{ query_k }}, - "field": "{{ target_field_name }}", - "data_set_format": "{{ query_data_set_format }}", - "data_set_path": "{{ query_data_set_path }}" - }, - "clients": {{ query_clients }} - } - ] -} diff --git a/benchmarks/osb/requirements.in b/benchmarks/osb/requirements.in deleted file mode 100644 index a9e12b5d3..000000000 --- a/benchmarks/osb/requirements.in +++ /dev/null @@ -1,4 +0,0 @@ -opensearch-py -numpy -h5py -opensearch-benchmark diff --git a/benchmarks/osb/requirements.txt b/benchmarks/osb/requirements.txt deleted file mode 100644 index a220ee44f..000000000 --- a/benchmarks/osb/requirements.txt +++ /dev/null @@ -1,96 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.8 -# To update, run: -# -# pip-compile -# -aiohttp==3.9.4 - # via opensearch-py -aiosignal==1.2.0 - # via aiohttp -async-timeout==4.0.2 - # via aiohttp -attrs==21.4.0 - # via - # aiohttp - # jsonschema -cachetools==4.2.4 - # via google-auth -certifi==2023.7.22 - # via - # opensearch-benchmark - # opensearch-py -frozenlist==1.3.0 - # via - # aiohttp - # aiosignal -google-auth==1.22.1 - # via opensearch-benchmark -google-crc32c==1.3.0 - # via google-resumable-media -google-resumable-media==1.1.0 - # via opensearch-benchmark -h5py==3.6.0 - # via -r requirements.in -idna==3.7 - # via yarl -ijson==2.6.1 - # via opensearch-benchmark -importlib-metadata==4.11.3 - # via jsonschema -jinja2==3.1.3 - # via opensearch-benchmark -jsonschema==3.1.1 - # via opensearch-benchmark -markupsafe==2.0.1 - # via - # jinja2 - # opensearch-benchmark -multidict==6.0.2 - # via - # aiohttp - # yarl -numpy==1.24.2 - # via - # -r requirements.in - # h5py -opensearch-benchmark==0.0.2 - # via -r requirements.in -opensearch-py[async]==1.0.0 - # via - # -r requirements.in - # opensearch-benchmark -psutil==5.8.0 - # via opensearch-benchmark -py-cpuinfo==7.0.0 - # via opensearch-benchmark -pyasn1==0.4.8 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.2.8 - # via google-auth -pyrsistent==0.18.1 - # via jsonschema -rsa==4.8 - # via google-auth -six==1.16.0 - # via - # google-auth - # google-resumable-media - # jsonschema -tabulate==0.8.7 - # via opensearch-benchmark -thespian==3.10.1 - # via opensearch-benchmark -urllib3==1.26.18 - # via opensearch-py -yappi==1.2.3 - # via opensearch-benchmark -yarl==1.7.2 - # via aiohttp -zipp==3.7.0 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/benchmarks/osb/tests/__init__.py b/benchmarks/osb/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/osb/tests/data_set_helper.py b/benchmarks/osb/tests/data_set_helper.py deleted file mode 100644 index 2b144da49..000000000 --- a/benchmarks/osb/tests/data_set_helper.py +++ /dev/null @@ -1,197 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -from abc import ABC, abstractmethod - -import h5py -import numpy as np - -from osb.extensions.data_set import Context, HDF5DataSet, BigANNVectorDataSet - -""" Module containing utility classes and functions for working with data sets. - -Included are utilities that can be used to build data sets and write them to -paths. -""" - - -class DataSetBuildContext: - """ Data class capturing information needed to build a particular data set - - Attributes: - data_set_context: Indicator of what the data set is used for, - vectors: A 2D array containing vectors that are used to build data set. - path: string representing path where data set should be serialized to. - """ - def __init__(self, data_set_context: Context, vectors: np.ndarray, path: str): - self.data_set_context: Context = data_set_context - self.vectors: np.ndarray = vectors #TODO: Validate shape - self.path: str = path - - def get_num_vectors(self) -> int: - return self.vectors.shape[0] - - def get_dimension(self) -> int: - return self.vectors.shape[1] - - def get_type(self) -> np.dtype: - return self.vectors.dtype - - -class DataSetBuilder(ABC): - """ Abstract builder used to create a build a collection of data sets - - Attributes: - data_set_build_contexts: list of data set build contexts that builder - will build. - """ - def __init__(self): - self.data_set_build_contexts = list() - - def add_data_set_build_context(self, data_set_build_context: DataSetBuildContext): - """ Adds a data set build context to list of contexts to be built. - - Args: - data_set_build_context: DataSetBuildContext to be added to list - - Returns: Updated DataSetBuilder - - """ - self._validate_data_set_context(data_set_build_context) - self.data_set_build_contexts.append(data_set_build_context) - return self - - def build(self): - """ Builds and serializes all data sets build contexts - - Returns: - - """ - [self._build_data_set(data_set_build_context) for data_set_build_context - in self.data_set_build_contexts] - - @abstractmethod - def _build_data_set(self, context: DataSetBuildContext): - """ Builds an individual data set - - Args: - context: DataSetBuildContext of data set to be built - - Returns: - - """ - pass - - @abstractmethod - def _validate_data_set_context(self, context: DataSetBuildContext): - """ Validates that data set context can be added to this builder - - Args: - context: DataSetBuildContext to be validated - - Returns: - - """ - pass - - -class HDF5Builder(DataSetBuilder): - - def __init__(self): - super(HDF5Builder, self).__init__() - self.data_set_meta_data = dict() - - def _validate_data_set_context(self, context: DataSetBuildContext): - if context.path not in self.data_set_meta_data.keys(): - self.data_set_meta_data[context.path] = { - context.data_set_context: context - } - return - - if context.data_set_context in \ - self.data_set_meta_data[context.path].keys(): - raise IllegalDataSetBuildContext("Path and context for data set " - "are already present in builder.") - - self.data_set_meta_data[context.path][context.data_set_context] = \ - context - - @staticmethod - def _validate_extension(context: DataSetBuildContext): - ext = context.path.split('.')[-1] - - if ext != HDF5DataSet.FORMAT_NAME: - raise IllegalDataSetBuildContext("Invalid file extension") - - def _build_data_set(self, context: DataSetBuildContext): - # For HDF5, because multiple data sets can be grouped in the same file, - # we will build data sets in memory and not write to disk until - # _flush_data_sets_to_disk is called - with h5py.File(context.path, 'a') as hf: - hf.create_dataset( - HDF5DataSet.parse_context(context.data_set_context), - data=context.vectors - ) - - -class BigANNBuilder(DataSetBuilder): - - def _validate_data_set_context(self, context: DataSetBuildContext): - self._validate_extension(context) - - # prevent the duplication of paths for data sets - data_set_paths = [c.path for c in self.data_set_build_contexts] - if any(data_set_paths.count(x) > 1 for x in data_set_paths): - raise IllegalDataSetBuildContext("Build context paths have to be " - "unique.") - - @staticmethod - def _validate_extension(context: DataSetBuildContext): - ext = context.path.split('.')[-1] - - if ext != BigANNVectorDataSet.U8BIN_EXTENSION and ext != \ - BigANNVectorDataSet.FBIN_EXTENSION: - raise IllegalDataSetBuildContext("Invalid file extension") - - if ext == BigANNVectorDataSet.U8BIN_EXTENSION and context.get_type() != \ - np.u8int: - raise IllegalDataSetBuildContext("Invalid data type for {} ext." - .format(BigANNVectorDataSet - .U8BIN_EXTENSION)) - - if ext == BigANNVectorDataSet.FBIN_EXTENSION and context.get_type() != \ - np.float32: - print(context.get_type()) - raise IllegalDataSetBuildContext("Invalid data type for {} ext." - .format(BigANNVectorDataSet - .FBIN_EXTENSION)) - - def _build_data_set(self, context: DataSetBuildContext): - num_vectors = context.get_num_vectors() - dimension = context.get_dimension() - - with open(context.path, 'wb') as f: - f.write(int.to_bytes(num_vectors, 4, "little")) - f.write(int.to_bytes(dimension, 4, "little")) - context.vectors.tofile(f) - - -def create_random_2d_array(num_vectors: int, dimension: int) -> np.ndarray: - rng = np.random.default_rng() - return rng.random(size=(num_vectors, dimension), dtype=np.float32) - - -class IllegalDataSetBuildContext(Exception): - """Exception raised when passed in DataSetBuildContext is illegal - - Attributes: - message -- explanation of the error - """ - - def __init__(self, message: str): - self.message = f'{message}' - super().__init__(self.message) - diff --git a/benchmarks/osb/tests/test_param_sources.py b/benchmarks/osb/tests/test_param_sources.py deleted file mode 100644 index cda730cee..000000000 --- a/benchmarks/osb/tests/test_param_sources.py +++ /dev/null @@ -1,353 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -import os -import random -import shutil -import string -import sys -import tempfile -import unittest - -# Add parent directory to path -import numpy as np - -sys.path.append(os.path.abspath(os.path.join(os.getcwd(), os.pardir))) - -from osb.tests.data_set_helper import HDF5Builder, create_random_2d_array, \ - DataSetBuildContext, BigANNBuilder -from osb.extensions.data_set import Context, HDF5DataSet -from osb.extensions.param_sources import VectorsFromDataSetParamSource, \ - QueryVectorsFromDataSetParamSource, BulkVectorsFromDataSetParamSource -from osb.extensions.util import ConfigurationError - -DEFAULT_INDEX_NAME = "test-index" -DEFAULT_FIELD_NAME = "test-field" -DEFAULT_CONTEXT = Context.INDEX -DEFAULT_TYPE = HDF5DataSet.FORMAT_NAME -DEFAULT_NUM_VECTORS = 10 -DEFAULT_DIMENSION = 10 -DEFAULT_RANDOM_STRING_LENGTH = 8 - - -class VectorsFromDataSetParamSourceTestCase(unittest.TestCase): - - def setUp(self) -> None: - self.data_set_dir = tempfile.mkdtemp() - - # Create a data set we know to be valid for convenience - self.valid_data_set_path = _create_data_set( - DEFAULT_NUM_VECTORS, - DEFAULT_DIMENSION, - DEFAULT_TYPE, - DEFAULT_CONTEXT, - self.data_set_dir - ) - - def tearDown(self): - shutil.rmtree(self.data_set_dir) - - def test_missing_params(self): - empty_params = dict() - self.assertRaises( - ConfigurationError, - lambda: VectorsFromDataSetParamSourceTestCase. - TestVectorsFromDataSetParamSource(empty_params, DEFAULT_CONTEXT) - ) - - def test_invalid_data_set_format(self): - invalid_data_set_format = "invalid-data-set-format" - - test_param_source_params = { - "index": DEFAULT_INDEX_NAME, - "field": DEFAULT_FIELD_NAME, - "data_set_format": invalid_data_set_format, - "data_set_path": self.valid_data_set_path, - } - self.assertRaises( - ConfigurationError, - lambda: self.TestVectorsFromDataSetParamSource( - test_param_source_params, - DEFAULT_CONTEXT - ) - ) - - def test_invalid_data_set_path(self): - invalid_data_set_path = "invalid-data-set-path" - test_param_source_params = { - "index": DEFAULT_INDEX_NAME, - "field": DEFAULT_FIELD_NAME, - "data_set_format": HDF5DataSet.FORMAT_NAME, - "data_set_path": invalid_data_set_path, - } - self.assertRaises( - FileNotFoundError, - lambda: self.TestVectorsFromDataSetParamSource( - test_param_source_params, - DEFAULT_CONTEXT - ) - ) - - def test_partition_hdf5(self): - num_vectors = 100 - - hdf5_data_set_path = _create_data_set( - num_vectors, - DEFAULT_DIMENSION, - HDF5DataSet.FORMAT_NAME, - DEFAULT_CONTEXT, - self.data_set_dir - ) - - test_param_source_params = { - "index": DEFAULT_INDEX_NAME, - "field": DEFAULT_FIELD_NAME, - "data_set_format": HDF5DataSet.FORMAT_NAME, - "data_set_path": hdf5_data_set_path, - } - test_param_source = self.TestVectorsFromDataSetParamSource( - test_param_source_params, - DEFAULT_CONTEXT - ) - - num_partitions = 10 - vecs_per_partition = test_param_source.num_vectors // num_partitions - - self._test_partition( - test_param_source, - num_partitions, - vecs_per_partition - ) - - def test_partition_bigann(self): - num_vectors = 100 - float_extension = "fbin" - - bigann_data_set_path = _create_data_set( - num_vectors, - DEFAULT_DIMENSION, - float_extension, - DEFAULT_CONTEXT, - self.data_set_dir - ) - - test_param_source_params = { - "index": DEFAULT_INDEX_NAME, - "field": DEFAULT_FIELD_NAME, - "data_set_format": "bigann", - "data_set_path": bigann_data_set_path, - } - test_param_source = self.TestVectorsFromDataSetParamSource( - test_param_source_params, - DEFAULT_CONTEXT - ) - - num_partitions = 10 - vecs_per_partition = test_param_source.num_vectors // num_partitions - - self._test_partition( - test_param_source, - num_partitions, - vecs_per_partition - ) - - def _test_partition( - self, - test_param_source: VectorsFromDataSetParamSource, - num_partitions: int, - vec_per_partition: int - ): - for i in range(num_partitions): - test_param_source_i = test_param_source.partition(i, num_partitions) - self.assertEqual(test_param_source_i.num_vectors, vec_per_partition) - self.assertEqual(test_param_source_i.offset, i * vec_per_partition) - - class TestVectorsFromDataSetParamSource(VectorsFromDataSetParamSource): - """ - Empty implementation of ABC VectorsFromDataSetParamSource so that we can - test the concrete methods. - """ - - def params(self): - pass - - -class QueryVectorsFromDataSetParamSourceTestCase(unittest.TestCase): - - def setUp(self) -> None: - self.data_set_dir = tempfile.mkdtemp() - - def tearDown(self): - shutil.rmtree(self.data_set_dir) - - def test_params(self): - # Create a data set - k = 12 - data_set_path = _create_data_set( - DEFAULT_NUM_VECTORS, - DEFAULT_DIMENSION, - DEFAULT_TYPE, - Context.QUERY, - self.data_set_dir - ) - - # Create a QueryVectorsFromDataSetParamSource with relevant params - test_param_source_params = { - "index": DEFAULT_INDEX_NAME, - "field": DEFAULT_FIELD_NAME, - "data_set_format": DEFAULT_TYPE, - "data_set_path": data_set_path, - "k": k, - } - query_param_source = QueryVectorsFromDataSetParamSource( - None, test_param_source_params - ) - - # Check each - for i in range(DEFAULT_NUM_VECTORS): - self._check_params( - query_param_source.params(), - DEFAULT_INDEX_NAME, - DEFAULT_FIELD_NAME, - DEFAULT_DIMENSION, - k - ) - - # Assert last call creates stop iteration - self.assertRaises( - StopIteration, - lambda: query_param_source.params() - ) - - def _check_params( - self, - params: dict, - expected_index: str, - expected_field: str, - expected_dimension: int, - expected_k: int - ): - index_name = params.get("index") - self.assertEqual(expected_index, index_name) - body = params.get("body") - self.assertIsInstance(body, dict) - query = body.get("query") - self.assertIsInstance(query, dict) - query_knn = query.get("knn") - self.assertIsInstance(query_knn, dict) - field = query_knn.get(expected_field) - self.assertIsInstance(field, dict) - vector = field.get("vector") - self.assertIsInstance(vector, np.ndarray) - self.assertEqual(len(list(vector)), expected_dimension) - k = field.get("k") - self.assertEqual(k, expected_k) - - -class BulkVectorsFromDataSetParamSourceTestCase(unittest.TestCase): - - def setUp(self) -> None: - self.data_set_dir = tempfile.mkdtemp() - - def tearDown(self): - shutil.rmtree(self.data_set_dir) - - def test_params(self): - num_vectors = 49 - bulk_size = 10 - data_set_path = _create_data_set( - num_vectors, - DEFAULT_DIMENSION, - DEFAULT_TYPE, - Context.INDEX, - self.data_set_dir - ) - - test_param_source_params = { - "index": DEFAULT_INDEX_NAME, - "field": DEFAULT_FIELD_NAME, - "data_set_format": DEFAULT_TYPE, - "data_set_path": data_set_path, - "bulk_size": bulk_size - } - bulk_param_source = BulkVectorsFromDataSetParamSource( - None, test_param_source_params - ) - - # Check each payload returned - vectors_consumed = 0 - while vectors_consumed < num_vectors: - expected_num_vectors = min(num_vectors - vectors_consumed, bulk_size) - self._check_params( - bulk_param_source.params(), - DEFAULT_INDEX_NAME, - DEFAULT_FIELD_NAME, - DEFAULT_DIMENSION, - expected_num_vectors - ) - vectors_consumed += expected_num_vectors - - # Assert last call creates stop iteration - self.assertRaises( - StopIteration, - lambda: bulk_param_source.params() - ) - - def _check_params( - self, - params: dict, - expected_index: str, - expected_field: str, - expected_dimension: int, - expected_num_vectors_in_payload: int - ): - size = params.get("size") - self.assertEqual(size, expected_num_vectors_in_payload) - body = params.get("body") - self.assertIsInstance(body, list) - self.assertEqual(len(body) // 2, expected_num_vectors_in_payload) - - # Bulk payload has 2 parts: first one is the header and the second one - # is the body. The header will have the index name and the body will - # have the vector - for header, req_body in zip(*[iter(body)] * 2): - index = header.get("index") - self.assertIsInstance(index, dict) - index_name = index.get("_index") - self.assertEqual(index_name, expected_index) - - vector = req_body.get(expected_field) - self.assertIsInstance(vector, list) - self.assertEqual(len(vector), expected_dimension) - - -def _create_data_set( - num_vectors: int, - dimension: int, - extension: str, - data_set_context: Context, - data_set_dir -) -> str: - - file_name_base = ''.join(random.choice(string.ascii_letters) for _ in - range(DEFAULT_RANDOM_STRING_LENGTH)) - data_set_file_name = "{}.{}".format(file_name_base, extension) - data_set_path = os.path.join(data_set_dir, data_set_file_name) - context = DataSetBuildContext( - data_set_context, - create_random_2d_array(num_vectors, dimension), - data_set_path) - - if extension == HDF5DataSet.FORMAT_NAME: - HDF5Builder().add_data_set_build_context(context).build() - else: - BigANNBuilder().add_data_set_build_context(context).build() - - return data_set_path - - -if __name__ == '__main__': - unittest.main() diff --git a/benchmarks/osb/workload.json b/benchmarks/osb/workload.json deleted file mode 100644 index bd0d84195..000000000 --- a/benchmarks/osb/workload.json +++ /dev/null @@ -1,17 +0,0 @@ -{% import "benchmark.helpers" as benchmark with context %} -{ - "version": 2, - "description": "k-NN Plugin train workload", - "indices": [ - { - "name": "{{ target_index_name }}", - "body": "{{ target_index_body }}" - }, - { - "name": "{{ train_index_name }}", - "body": "{{ train_index_body }}" - } - ], - "operations": {{ benchmark.collect(parts="operations/*.json") }}, - "test_procedures": [{{ benchmark.collect(parts="procedures/*.json") }}] -} diff --git a/benchmarks/osb/workload.py b/benchmarks/osb/workload.py deleted file mode 100644 index 32e6ad02c..000000000 --- a/benchmarks/osb/workload.py +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -# This code needs to be included at the top of every workload.py file. -# OpenSearch Benchmarks is not able to find other helper files unless the path -# is updated. -import os -import sys -sys.path.append(os.path.abspath(os.getcwd())) - -from extensions.registry import register as custom_register - - -def register(registry): - custom_register(registry) diff --git a/benchmarks/perf-tool/.pylintrc b/benchmarks/perf-tool/.pylintrc deleted file mode 100644 index 15bf4ccc3..000000000 --- a/benchmarks/perf-tool/.pylintrc +++ /dev/null @@ -1,443 +0,0 @@ -# This Pylint rcfile contains a best-effort configuration to uphold the -# best-practices and style described in the Google Python style guide: -# https://google.github.io/styleguide/pyguide.html -# -# Its canonical open-source location is: -# https://google.github.io/styleguide/pylintrc - -[MASTER] - -fail-under=9.0 - -# Files or directories to be skipped. They should be base names, not paths. -ignore=third_party - -# Files or directories matching the regex patterns are skipped. The regex -# matches against base names, not paths. -ignore-patterns= - -# Pickle collected data for later comparisons. -persistent=no - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Use multiple processes to speed up Pylint. -jobs=4 - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED -confidence= - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -#enable= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once).You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use"--disable=all --enable=classes -# --disable=W" -disable=abstract-method, - apply-builtin, - arguments-differ, - attribute-defined-outside-init, - backtick, - bad-option-value, - basestring-builtin, - buffer-builtin, - c-extension-no-member, - consider-using-enumerate, - cmp-builtin, - cmp-method, - coerce-builtin, - coerce-method, - delslice-method, - div-method, - duplicate-code, - eq-without-hash, - execfile-builtin, - file-builtin, - filter-builtin-not-iterating, - fixme, - getslice-method, - global-statement, - hex-method, - idiv-method, - implicit-str-concat-in-sequence, - import-error, - import-self, - import-star-module-level, - inconsistent-return-statements, - input-builtin, - intern-builtin, - invalid-str-codec, - locally-disabled, - long-builtin, - long-suffix, - map-builtin-not-iterating, - misplaced-comparison-constant, - missing-function-docstring, - metaclass-assignment, - next-method-called, - next-method-defined, - no-absolute-import, - no-else-break, - no-else-continue, - no-else-raise, - no-else-return, - no-init, # added - no-member, - no-name-in-module, - no-self-use, - nonzero-method, - oct-method, - old-division, - old-ne-operator, - old-octal-literal, - old-raise-syntax, - parameter-unpacking, - print-statement, - raising-string, - range-builtin-not-iterating, - raw_input-builtin, - rdiv-method, - reduce-builtin, - relative-import, - reload-builtin, - round-builtin, - setslice-method, - signature-differs, - standarderror-builtin, - suppressed-message, - sys-max-int, - too-few-public-methods, - too-many-ancestors, - too-many-arguments, - too-many-boolean-expressions, - too-many-branches, - too-many-instance-attributes, - too-many-locals, - too-many-nested-blocks, - too-many-public-methods, - too-many-return-statements, - too-many-statements, - trailing-newlines, - unichr-builtin, - unicode-builtin, - unnecessary-pass, - unpacking-in-except, - useless-else-on-loop, - useless-object-inheritance, - useless-suppression, - using-cmp-argument, - wrong-import-order, - xrange-builtin, - zip-builtin-not-iterating, - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html. You can also give a reporter class, eg -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". This option is deprecated -# and it will be removed in Pylint 2.0. -files-output=no - -# Tells whether to display a full report or only the messages -reports=no - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details -#msg-template= - - -[BASIC] - -# Good variable names which should always be accepted, separated by a comma -good-names=main,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Include a hint for the correct naming format with invalid-name -include-naming-hint=no - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -property-classes=abc.abstractproperty,cached_property.cached_property,cached_property.threaded_cached_property,cached_property.cached_property_with_ttl,cached_property.threaded_cached_property_with_ttl - -# Regular expression matching correct function names -function-rgx=^(?:(?PsetUp|tearDown|setUpModule|tearDownModule)|(?P_?[A-Z][a-zA-Z0-9]*)|(?P_?[a-z][a-z0-9_]*))$ - -# Regular expression matching correct variable names -variable-rgx=^[a-z][a-z0-9_]*$ - -# Regular expression matching correct constant names -const-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$ - -# Regular expression matching correct attribute names -attr-rgx=^_{0,2}[a-z][a-z0-9_]*$ - -# Regular expression matching correct argument names -argument-rgx=^[a-z][a-z0-9_]*$ - -# Regular expression matching correct class attribute names -class-attribute-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$ - -# Regular expression matching correct inline iteration names -inlinevar-rgx=^[a-z][a-z0-9_]*$ - -# Regular expression matching correct class names -class-rgx=^_?[A-Z][a-zA-Z0-9]*$ - -# Regular expression matching correct module names -module-rgx=^(_?[a-z][a-z0-9_]*|__init__)$ - -# Regular expression matching correct method names -method-rgx=(?x)^(?:(?P_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P_{0,2}[a-z][a-z0-9_]*))$ - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=(__.*__|main|test.*|.*test|.*Test)$ - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=10 - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis. It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - - -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=80 - -# TODO(https://github.com/PyCQA/pylint/issues/3352): Direct pylint to exempt -# lines made too long by directives to pytype. - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=(?x)( - ^\s*(\#\ )??$| - ^\s*(from\s+\S+\s+)?import\s+.+$) - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=yes - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check= - -# Maximum number of lines in a module -max-module-lines=99999 - -# String used as indentation unit. The internal Google style guide mandates 2 -# spaces. Google's externaly-published style guide says 4, consistent with -# PEP 8. Here, we use 2 spaces, for conformity with many open-sourced Google -# projects (like TensorFlow). -indent-string=' ' - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=TODO - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=yes - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching the name of dummy variables (i.e. expectedly -# not used). -dummy-variables-rgx=^\*{0,2}(_$|unused_|dummy_) - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_,_cb - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six,six.moves,past.builtins,future.builtins,functools - - -[LOGGING] - -# Logging modules to check that the string format arguments are in logging -# function parameter format -logging-modules=logging,absl.logging,tensorflow.io.logging - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - - -[SPELLING] - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub, - TERMIOS, - Bastion, - rexec, - sets - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant, absl - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls, - class_ - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=StandardError, - Exception, - BaseException diff --git a/benchmarks/perf-tool/.style.yapf b/benchmarks/perf-tool/.style.yapf deleted file mode 100644 index 39b663a7a..000000000 --- a/benchmarks/perf-tool/.style.yapf +++ /dev/null @@ -1,10 +0,0 @@ -[style] -COLUMN_LIMIT: 80 -DEDENT_CLOSING_BRACKETS: True -INDENT_DICTIONARY_VALUE: True -SPLIT_ALL_COMMA_SEPARATED_VALUES: True -SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED: True -SPLIT_BEFORE_CLOSING_BRACKET: True -SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN: True -SPLIT_BEFORE_FIRST_ARGUMENT: True -SPLIT_BEFORE_NAMED_ASSIGNS: True diff --git a/benchmarks/perf-tool/README.md b/benchmarks/perf-tool/README.md deleted file mode 100644 index 36f76bcdb..000000000 --- a/benchmarks/perf-tool/README.md +++ /dev/null @@ -1,449 +0,0 @@ -# IMPORTANT NOTE: No new features will be added to this tool . This tool is currently in maintanence mode. All new features will be added to [vector search workload]( https://github.com/opensearch-project/opensearch-benchmark-workloads/tree/main/vectorsearch) - -# OpenSearch k-NN Benchmarking -- [Welcome!](#welcome) -- [Install Prerequisites](#install-prerequisites) -- [Usage](#usage) -- [Contributing](#contributing) - -## Welcome! - -This directory contains the code related to benchmarking the k-NN plugin. -Benchmarks can be run against any OpenSearch cluster with the k-NN plugin -installed. Benchmarks are highly configurable using the test configuration -file. - -## Install Prerequisites - -### Setup - -K-NN perf requires Python 3.8 or greater to be installed. One of -the easier ways to do this is through Conda, a package and environment -management system for Python. - -First, follow the -[installation instructions](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) -to install Conda on your system. - -Next, create a Python 3.8 environment: -``` -conda create -n knn-perf python=3.8 -``` - -After the environment is created, activate it: -``` -source activate knn-perf -``` - -Lastly, clone the k-NN repo and install all required python packages: -``` -git clone https://github.com/opensearch-project/k-NN.git -cd k-NN/benchmarks/perf-tool -pip install -r requirements.txt -``` - -After all of this completes, you should be ready to run your first performance benchmarks! - - -## Usage - -### Quick Start - -In order to run a benchmark, you must first create a test configuration yml -file. Checkout [this example](https://github.com/opensearch-project/k-NN/blob/main/benchmarks/perf-tool/sample-configs) file -for benchmarking *faiss*'s IVF method. This file contains the definition for -the benchmark that you want to run. At the top are -[test parameters](#test-parameters). These define high level settings of the -test, such as the endpoint of the OpenSearch cluster. - -Next, you define the actions that the test will perform. These actions are -referred to as steps. First, you can define "setup" steps. These are steps that -are run once at the beginning of the execution to configure the cluster how you -want it. These steps do not contribute to the final metrics. - -After that, you define the "steps". These are the steps that the test will be -collecting metrics on. Each step emits certain metrics. These are run -multiple times, depending on the test parameter "num_runs". At the end of the -execution of all of the runs, the metrics from each run are collected and -averaged. - -Lastly, you define the "cleanup" steps. The "cleanup" steps are executed after -each test run. For instance, if you are measuring index performance, you may -want to delete the index after each run. - -To run the test, execute the following command: -``` -python knn-perf-tool.py [--log LOGLEVEL] test config-path.yml output.json - ---log log level of tool, options are: info, debug, warning, error, critical -``` - -The output will be a json document containing the results. - -Additionally, you can get the difference between two test runs using the diff -command: -``` -python knn-perf-tool.py [--log LOGLEVEL] diff result1.json result2.json - ---log log level of tool, options are: info, debug, warning, error, critical -``` - -The output will be the delta between the two metrics. - -### Test Parameters - -| Parameter Name | Description | Default | -|----------------|------------------------------------------------------------------------------------|------------| -| endpoint | Endpoint OpenSearch cluster is running on | localhost | -| port | Port on which OpenSearch Cluster is running on | 9200 | -| test_name | Name of test | No default | -| test_id | String ID of test | No default | -| num_runs | Number of runs to execute steps | 1 | -| show_runs | Whether to output each run in addition to the total summary | false | -| setup | List of steps to run once before metric collection starts | [] | -| steps | List of steps that make up one test run. Metrics will be collected on these steps. | No default | -| cleanup | List of steps to run after each test run | [] | - -### Steps - -Included are the list of steps that are currently supported. Each step contains -a set of parameters that are passed in the test configuration file and a set -of metrics that the test produces. - -#### create_index - -Creates an OpenSearch index. - -##### Parameters -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| index_name | Name of index to create | No default | -| index_spec | Path to index specification | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end. | ms | - -#### disable_refresh - -Disables refresh for all indices in the cluster. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end. | ms | - -#### refresh_index - -Refreshes an OpenSearch index. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| index_name | Name of index to refresh | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end. | ms | -| store_kb | Size of index after refresh completes | KB | - -#### force_merge - -Force merges an index to a specified number of segments. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| index_name | Name of index to force merge | No default | -| max_num_segments | Number of segments to force merge to | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end. | ms | - -#### train_model - -Trains a model. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| model_id | Model id to set | Test | -| train_index | Index to pull training data from | No default | -| train_field | Field to pull training data from | No default | -| dimension | Dimension of model | No default | -| description | Description of model | No default | -| max_training_vector_count | Number of training vectors to used | No default | -| method_spec | Path to method specification | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end | ms | - -#### delete_model - -Deletes a model from the cluster. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| model_id | Model id to delete | Test | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end | ms | - -#### delete_index - -Deletes an index from the cluster. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| index_name | Name of index to delete | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Time to execute step end to end | ms | - -#### ingest - -Ingests a dataset of vectors into the cluster. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| index_name | Name of index to ingest into | No default | -| field_name | Name of field to ingest into | No default | -| bulk_size | Documents per bulk request | 300 | -| dataset_format | Format the data-set is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| dataset_path | Path to data-set | No default | -| doc_count | Number of documents to create from data-set | Size of the data-set | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Total time to ingest the dataset into the index.| ms | - -#### ingest_multi_field - -Ingests a dataset of multiple context types into the cluster. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------| ----------- | -| index_name | Name of index to ingest into | No default | -| field_name | Name of field to ingest into | No default | -| bulk_size | Documents per bulk request | 300 | -| dataset_path | Path to data-set | No default | -| doc_count | Number of documents to create from data-set | Size of the data-set | -| attributes_dataset_name | Name of dataset with additional attributes inside the main dataset | No default | -| attribute_spec | Definition of attributes, format is: [{ name: [name_val], type: [type_val]}] Order is important and must match order of attributes column in dataset file | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Total time to ingest the dataset into the index.| ms | - -#### ingest_nested_field - -Ingests a dataset with nested field into the cluster. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ----------- | -| index_name | Name of index to ingest into | No default | -| field_name | Name of field to ingest into | No default | -| dataset_path | Path to data-set | No default | -| attributes_dataset_name | Name of dataset with additional attributes inside the main dataset | No default | -| attribute_spec | Definition of attributes, format is: [{ name: [name_val], type: [type_val]}] Order is important and must match order of attributes column in dataset file. It should contains { name: 'parent_id', type: 'int'} | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Total time to ingest the dataset into the index.| ms | - -#### query - -Runs a set of queries against an index. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- | ----------- | ----------- | -| k | Number of neighbors to return on search | 100 | -| r | r value in Recall@R | 1 | -| index_name | Name of index to search | No default | -| field_name | Name field to search | No default | -| calculate_recall | Whether to calculate recall values | False | -| dataset_format | Format the dataset is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| dataset_path | Path to dataset | No default | -| neighbors_format | Format the neighbors dataset is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| neighbors_path | Path to neighbors dataset | No default | -| query_count | Number of queries to create from data-set | Size of the data-set | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- |---------------------------------------------------------------------------------------------------------| ----------- | -| took | Took times returned per query aggregated as total, p50, p90, p99, p99.9 and p100 (when applicable) | ms | -| memory_kb | Native memory k-NN is using at the end of the query workload | KB | -| recall@R | ratio of top R results from the ground truth neighbors that are in the K results returned by the plugin | float 0.0-1.0 | -| recall@K | ratio of results returned that were ground truth nearest neighbors | float 0.0-1.0 | - -#### query_with_filter - -Runs a set of queries with filter against an index. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------| -| k | Number of neighbors to return on search | 100 | -| r | r value in Recall@R | 1 | -| index_name | Name of index to search | No default | -| field_name | Name field to search | No default | -| calculate_recall | Whether to calculate recall values | False | -| dataset_format | Format the dataset is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| dataset_path | Path to dataset | No default | -| neighbors_format | Format the neighbors dataset is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| neighbors_path | Path to neighbors dataset | No default | -| neighbors_dataset | Name of filter dataset inside the neighbors dataset | No default | -| filter_spec | Path to filter specification | No default | -| filter_type | Type of filter format, we do support following types:
FILTER inner filter format for approximate k-NN search
SCRIPT score scripting with exact k-NN search and pre-filtering
BOOL_POST_FILTER Bool query with post-filtering | SCRIPT | -| score_script_similarity | Similarity function that has been used to index dataset. Used for SCRIPT filter type and ignored for others | l2 | -| query_count | Number of queries to create from data-set | Size of the data-set | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Took times returned per query aggregated as total, p50, p90 and p99 (when applicable) | ms | -| memory_kb | Native memory k-NN is using at the end of the query workload | KB | -| recall@R | ratio of top R results from the ground truth neighbors that are in the K results returned by the plugin | float 0.0-1.0 | -| recall@K | ratio of results returned that were ground truth nearest neighbors | float 0.0-1.0 | - - -#### query_nested_field - -Runs a set of queries with nested field against an index. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------| -| k | Number of neighbors to return on search | 100 | -| r | r value in Recall@R | 1 | -| index_name | Name of index to search | No default | -| field_name | Name field to search | No default | -| calculate_recall | Whether to calculate recall values | False | -| dataset_format | Format the dataset is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| dataset_path | Path to dataset | No default | -| neighbors_format | Format the neighbors dataset is in. Currently hdf5 and bigann is supported. The hdf5 file must be organized in the same way that the ann-benchmarks organizes theirs. | 'hdf5' | -| neighbors_path | Path to neighbors dataset | No default | -| neighbors_dataset | Name of filter dataset inside the neighbors dataset | No default | -| query_count | Number of queries to create from data-set | Size of the data-set | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- | ----------- | ----------- | -| took | Took times returned per query aggregated as total, p50, p90 and p99 (when applicable) | ms | -| memory_kb | Native memory k-NN is using at the end of the query workload | KB | -| recall@R | ratio of top R results from the ground truth neighbors that are in the K results returned by the plugin | float 0.0-1.0 | -| recall@K | ratio of results returned that were ground truth nearest neighbors | float 0.0-1.0 | - -#### get_stats - -Gets the index stats. - -##### Parameters - -| Parameter Name | Description | Default | -| ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------| -| index_name | Name of index to search | No default | - -##### Metrics - -| Metric Name | Description | Unit | -| ----------- |-------------------------------------------------|------------| -| num_of_committed_segments | Total number of commited segments in the index | integer >= 0 | -| num_of_search_segments | Total number of search segments in the index | integer >= 0 | - -### Data sets - -This benchmark tool uses pre-generated data sets to run indexing and query workload. For some benchmark types existing dataset need to be -extended. Filtering is an example of use case where such dataset extension is needed. - -It's possible to use script provided with this repo to generate dataset and run benchmark for filtering queries. -You need to have existing dataset with vector data. This dataset will be used to generate additional attribute data and set of ground truth neighbours document ids. - -To generate dataset with attributes based on vectors only dataset use following command pattern: - -```commandline -python add-filters-to-dataset.py True False -``` - -To generate neighbours dataset for different filters based on dataset with attributes use following command pattern: - -```commandline -python add-filters-to-dataset.py False True -``` - -After that new dataset(s) can be referred from testcase definition in `ingest_extended` and `query_with_filter` steps. - -To generate dataset with parent doc id based on vectors only dataset, use following command pattern: -```commandline -python add-parent-doc-id-to-dataset.py -``` -This will generate neighbours dataset as well. This new dataset(s) can be referred from testcase definition in `ingest_nested_field` and `query_nested_field` steps. - -## Contributing - -### Linting - -Use pylint to lint the code: -``` -pylint knn-perf-tool.py okpt/**/*.py okpt/**/**/*.py -``` - -### Formatting - -We use yapf and the google style to format our code. After installing yapf, you can format your code by running: - -``` -yapf --style google knn-perf-tool.py okpt/**/*.py okpt/**/**/*.py -``` - -### Updating requirements - -Add new requirements to "requirements.in" and run `pip-compile` diff --git a/benchmarks/perf-tool/add-filters-to-dataset.py b/benchmarks/perf-tool/add-filters-to-dataset.py deleted file mode 100644 index 0624f7323..000000000 --- a/benchmarks/perf-tool/add-filters-to-dataset.py +++ /dev/null @@ -1,200 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -""" -Script builds complex dataset with additional attributes from exiting dataset that has only vectors. -Additional attributes are predefined in the script: color, taste, age. Only HDF5 format of vector dataset is supported. - -Output dataset file will have additional dataset 'attributes' with multiple columns, each column corresponds to one attribute -from an attribute set, and value is generated at random, e.g.: - -0: green None 71 -1: green bitter 28 - -there is no explicit index reference in 'attributes' dataset, index of the row corresponds to a document id. -For instance, in example above two rows of fields mapped to documents with ids '0' and '1'. - -If 'generate_filters' flag is set script generates additional dataset of neighbours (ground truth) for each filter type. -Output is a new file with several datasets, each dataset corresponds to one filter. Datasets are named 'neighbour_filter_X' -where X is 1 based index of particular filter. -Each dataset has rows with array of integers, where integer corresponds to -a document id from original dataset with additional fields. Array ca have -1 values that are treated as null, this is because -subset of filtered documents is same of smaller than original set. - -For example, dataset file content may look like : - -neighbour_filter_1: [[ 2, 5, -1], - [ 3, 1, -1], - [ 2 5, 7]] -neighbour_filter_2: [[-1, -1, -1], - [ 5, 6, -1], - [ 4, 2, 1]] - -In this case we do have datasets for two filters, 3 query results for each. [2, 5, -1] indicates that for first query -if filter 1 is used most similar document is with id 2, next similar is 5, and the rest do not pass filter 1 criteria. - -Example of script usage: - - create new hdf5 file with attribute dataset - add-filters-to-dataset.py ~/dev/opensearch/k-NN/benchmarks/perf-tool/dataset/data.hdf5 ~/dev/opensearch/datasets/data-with-attr True False - - create new hdf5 file with filter datasets - add-filters-to-dataset.py ~/dev/opensearch/k-NN/benchmarks/perf-tool/dataset/data-with-attr.hdf5 ~/dev/opensearch/datasets/data-with-filters False True -""" - -import getopt -import os -import random -import sys - -import h5py - -from osb.extensions.data_set import HDF5DataSet - - -class _Dataset: - """Type of dataset container for data with additional attributes""" - DEFAULT_TYPE = HDF5DataSet.FORMAT_NAME - - def create_dataset(self, source_dataset_path, out_file_path, generate_attrs: bool, generate_filters: bool) -> None: - path_elements = os.path.split(os.path.abspath(source_dataset_path)) - data_set_dir = path_elements[0] - - # For HDF5, because multiple data sets can be grouped in the same file, - # we will build data sets in memory and not write to disk until - # _flush_data_sets_to_disk is called - # read existing dataset - data_hdf5 = os.path.join(os.path.dirname(os.path.realpath('/')), source_dataset_path) - - with h5py.File(data_hdf5, "r") as hf: - - if generate_attrs: - data_set_w_attr = self.create_dataset_file(out_file_path, self.DEFAULT_TYPE, data_set_dir) - - possible_colors = ['red', 'green', 'yellow', 'blue', None] - possible_tastes = ['sweet', 'salty', 'sour', 'bitter', None] - max_age = 100 - - for key in hf.keys(): - if key not in ['neighbors', 'test', 'train']: - continue - data_set_w_attr.create_dataset(key, data=hf[key][()]) - - attributes = [] - for i in range(len(hf['train'])): - attr = [random.choice(possible_colors), random.choice(possible_tastes), - random.randint(0, max_age + 1)] - attributes.append(attr) - - data_set_w_attr.create_dataset('attributes', (len(attributes), 3), 'S10', data=attributes) - - data_set_w_attr.flush() - data_set_w_attr.close() - - if generate_filters: - attributes = hf['attributes'][()] - expected_neighbors = hf['neighbors'][()] - - data_set_filters = self.create_dataset_file(out_file_path, self.DEFAULT_TYPE, data_set_dir) - - def filter1(attributes, vector_idx): - if attributes[vector_idx][0].decode() == 'red' and int(attributes[vector_idx][2].decode()) >= 20: - return True - else: - return False - - self.apply_filter(expected_neighbors, attributes, data_set_filters, 'neighbors_filter_1', filter1) - - # filter 2 - color = blue or None and taste = 'salty' - def filter2(attributes, vector_idx): - if (attributes[vector_idx][0].decode() == 'blue' or attributes[vector_idx][ - 0].decode() == 'None') and attributes[vector_idx][1].decode() == 'salty': - return True - else: - return False - - self.apply_filter(expected_neighbors, attributes, data_set_filters, 'neighbors_filter_2', filter2) - - # filter 3 - color and taste are not None and age is between 20 and 80 - def filter3(attributes, vector_idx): - if attributes[vector_idx][0].decode() != 'None' and attributes[vector_idx][ - 1].decode() != 'None' and 20 <= \ - int(attributes[vector_idx][2].decode()) <= 80: - return True - else: - return False - - self.apply_filter(expected_neighbors, attributes, data_set_filters, 'neighbors_filter_3', filter3) - - # filter 4 - color green or blue and taste is bitter and age is between (30, 60) - def filter4(attributes, vector_idx): - if (attributes[vector_idx][0].decode() == 'green' or attributes[vector_idx][0].decode() == 'blue') \ - and (attributes[vector_idx][1].decode() == 'bitter') \ - and 30 <= int(attributes[vector_idx][2].decode()) <= 60: - return True - else: - return False - - self.apply_filter(expected_neighbors, attributes, data_set_filters, 'neighbors_filter_4', filter4) - - # filter 5 color is (green or blue or yellow) or taste = sweet or age is between (30, 70) - def filter5(attributes, vector_idx): - if attributes[vector_idx][0].decode() == 'green' or attributes[vector_idx][0].decode() == 'blue' \ - or attributes[vector_idx][0].decode() == 'yellow' \ - or attributes[vector_idx][1].decode() == 'sweet' \ - or 30 <= int(attributes[vector_idx][2].decode()) <= 70: - return True - else: - return False - - self.apply_filter(expected_neighbors, attributes, data_set_filters, 'neighbors_filter_5', filter5) - - data_set_filters.flush() - data_set_filters.close() - - def apply_filter(self, expected_neighbors, attributes, data_set_w_filtering, filter_name, filter_func): - neighbors_filter = [] - filtered_count = 0 - for expected_neighbors_row in expected_neighbors: - neighbors_filter_row = [-1] * len(expected_neighbors_row) - idx = 0 - for vector_idx in expected_neighbors_row: - if filter_func(attributes, vector_idx): - neighbors_filter_row[idx] = vector_idx - idx += 1 - filtered_count += 1 - neighbors_filter.append(neighbors_filter_row) - overall_count = len(expected_neighbors) * len(expected_neighbors[0]) - perc = float(filtered_count / overall_count) * 100 - print('ground truth size for {} is {}, percentage {}'.format(filter_name, filtered_count, perc)) - data_set_w_filtering.create_dataset(filter_name, data=neighbors_filter) - return expected_neighbors - - def create_dataset_file(self, file_name, extension, data_set_dir) -> h5py.File: - data_set_file_name = "{}.{}".format(file_name, extension) - data_set_path = os.path.join(data_set_dir, data_set_file_name) - - data_set_w_filtering = h5py.File(data_set_path, 'a') - - return data_set_w_filtering - - -def main(argv): - opts, args = getopt.getopt(argv, "") - in_file_path = args[0] - out_file_path = args[1] - generate_attr = str2bool(args[2]) - generate_filters = str2bool(args[3]) - - worker = _Dataset() - worker.create_dataset(in_file_path, out_file_path, generate_attr, generate_filters) - - -def str2bool(v): - return v.lower() in ("yes", "true", "t", "1") - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/benchmarks/perf-tool/add-parent-doc-id-to-dataset.py b/benchmarks/perf-tool/add-parent-doc-id-to-dataset.py deleted file mode 100644 index a4acafd03..000000000 --- a/benchmarks/perf-tool/add-parent-doc-id-to-dataset.py +++ /dev/null @@ -1,291 +0,0 @@ -# Copyright OpenSearch Contributors -# SPDX-License-Identifier: Apache-2.0 - -""" -Script builds complex dataset with additional attributes from exiting dataset that has only vectors. -Additional attributes are predefined in the script: color, taste, age, and parent doc id. Only HDF5 format of vector dataset is supported. - -Output dataset file will have additional dataset 'attributes' with multiple columns, each column corresponds to one attribute -from an attribute set, and value is generated at random, e.g.: - -0: green None 71 1 -1: green bitter 28 1 -2: green bitter 28 1 -3: green bitter 28 2 -... - -there is no explicit index reference in 'attributes' dataset, index of the row corresponds to a document id. -For instance, in example above two rows of fields mapped to documents with ids '0' and '1'. - -The parend doc ids are assigned in non-decreasing order. - -If 'generate_filters' flag is set script generates additional dataset of neighbours (ground truth). -Output is a new file with three dataset each of which corresponds to a certain type of query. -Dataset name neighbour_nested is a ground truth for query without filtering. -Dataset name neighbour_filtered_relaxed is a ground truth for query with filtering of (30 <= age <= 70) or color in ["green", "blue", "yellow"] or taste in ["sweet"] -Dataset name neighbour_filtered_restrictive is a ground truth for query with filtering of (30 <= age <= 60) and color in ["green", "blue"] and taste in ["bitter"] - - -Each dataset has rows with array of integers, where integer corresponds to -a document id from original dataset with additional fields. - -Example of script usage: - - create new hdf5 file with attribute dataset - add-parent-doc-id-to-dataset.py ~/dev/opensearch/k-NN/benchmarks/perf-tool/dataset/data.hdf5 ~/dev/opensearch/datasets/data-nested.hdf5 - -""" -import getopt -import multiprocessing -import random -import sys -from multiprocessing import Process -from typing import cast -import traceback - -import h5py -import numpy as np - - -class MyVector: - def __init__(self, vector, id, color=None, taste=None, age=None, parent_id=None): - self.vector = vector - self.id = id - self.age = age - self.color = color - self.taste = taste - self.parent_id = parent_id - - def apply_restricted_filter(self): - return (30 <= self.age <= 60) and self.color in ["green", "blue"] and self.taste in ["bitter"] - - def apply_relaxed_filter(self): - return (30 <= self.age <= 70) or self.color in ["green", "blue", "yellow"] or self.taste in ["sweet"] - - def __str__(self): - return f'Vector : {self.vector}, id : {self.id}, color: {self.color}, taste: {self.taste}, age: {self.age}, parent_id: {self.parent_id}\n' - - def __repr__(self): - return f'Vector : {self.vector}, id : {self.id}, color: {self.color}, taste: {self.taste}, age: {self.age}, parent_id: {self.parent_id}\n' - -class HDF5DataSet: - def __init__(self, file_path, key): - self.file_name = file_path - self.file = h5py.File(self.file_name) - self.key = key - self.data = cast(h5py.Dataset, self.file[key]) - self.metadata = None - self.metadata = cast(h5py.Dataset, self.file["attributes"]) if key == "train" else None - print(f'Keys in the file are {self.file.keys()}') - - def read(self, start, end=None): - if end is None: - end = self.data.len() - values = cast(np.ndarray, self.data[start:end]) - metadata = cast(list, self.metadata[start:end]) if self.metadata is not None else None - if metadata is not None: - print(metadata) - vectors = [] - i = 0 - for value in values: - if self.metadata is None: - vector = MyVector(value, i) - else: - # color, taste, age, and parent id - vector = MyVector(value, i, str(metadata[i][0].decode()), str(metadata[i][1].decode()), - int(metadata[i][2]), int(metadata[i][3])) - vectors.append(vector) - i = i + 1 - return vectors - - def read_neighbors(self, start, end): - return cast(np.ndarray, self.data[start:end]) - - def size(self): - return self.data.len() - - def close(self): - self.file.close() - -class _Dataset: - def run(self, source_path, target_path) -> None: - # Add attributes - print(f'Adding attributes started.') - with h5py.File(source_path, "r") as in_file: - out_file = h5py.File(target_path, "w") - possible_colors = ['red', 'green', 'yellow', 'blue', None] - possible_tastes = ['sweet', 'salty', 'sour', 'bitter', None] - max_age = 100 - min_field_size = 10 - max_field_size = 10 - - # Copy train and test data - for key in in_file.keys(): - if key not in ['test', 'train']: - continue - out_file.create_dataset(key, data=in_file[key][()]) - - # Generate attributes - attributes = [] - field_size = random.randint(min_field_size, max_field_size) - parent_id = 1 - field_count = 0 - for i in range(len(in_file['train'])): - attr = [random.choice(possible_colors), random.choice(possible_tastes), - random.randint(0, max_age + 1), parent_id] - attributes.append(attr) - field_count += 1 - if field_count >= field_size: - field_size = random.randint(min_field_size, max_field_size) - field_count = 0 - parent_id += 1 - out_file.create_dataset('attributes', (len(attributes), 4), 'S10', data=attributes) - - out_file.flush() - out_file.close() - - print(f'Adding attributes completed.') - - - # Calculate ground truth - print(f'Calculating ground truth started.') - cpus = multiprocessing.cpu_count() - total_clients = min(8, cpus) # 1 # 10 - hdf5Data_train = HDF5DataSet(target_path, "train") - train_vectors = hdf5Data_train.read(0, hdf5Data_train.size()) - hdf5Data_train.close() - print(f'Train vector size: {len(train_vectors)}') - - hdf5Data_test = HDF5DataSet(target_path, "test") - total_queries = hdf5Data_test.size() # 10000 - dis = [] * total_queries - - for i in range(total_queries): - dis.insert(i, []) - - queries_per_client = int(total_queries / total_clients + 0.5) - if queries_per_client == 0: - queries_per_client = total_queries - - processes = [] - test_vectors = hdf5Data_test.read(0, total_queries) - hdf5Data_test.close() - tasks_that_are_done = multiprocessing.Queue() - for client in range(total_clients): - start_index = int(client * queries_per_client) - if start_index + queries_per_client <= total_queries: - end_index = int(start_index + queries_per_client) - else: - end_index = total_queries - - print(f'Start Index: {start_index}, end Index: {end_index}') - print(f'client is : {client}') - p = Process(target=queryTask, args=( - train_vectors, test_vectors, start_index, end_index, client, total_queries, tasks_that_are_done)) - processes.append(p) - p.start() - if end_index >= total_queries: - print(f'Exiting end Index : {end_index} total_queries: {total_queries}') - break - - # wait for tasks to be completed - print('Waiting for all tasks to be completed') - j = 0 - # This is required because threads can hang if the data sent from the sub process increases by a certain limit - # https://stackoverflow.com/questions/21641887/python-multiprocessing-process-hangs-on-join-for-large-queue - while j < total_queries: - while not tasks_that_are_done.empty(): - calculatedDis = tasks_that_are_done.get() - i = 0 - for d in calculatedDis: - if d: - dis[i] = d - j = j + 1 - i = i + 1 - - for p in processes: - if p.is_alive(): - p.join() - else: - print("Process was not alive hence shutting down") - - data_set_file = h5py.File(target_path, "a") - for type in ['nested', 'relaxed', 'restricted']: - results = [] - for d in dis: - r = [] - for i in range(min(10000, len(d[type]))): - r.append(d[type][i]['id']) - results.append(r) - - - data_set_file.create_dataset("neighbour_" + type, (len(results), len(results[0])), data=results) - data_set_file.flush() - data_set_file.close() - -def calculateL2Distance(point1, point2): - return np.linalg.norm(point1 - point2) - - -def queryTask(train_vectors, test_vectors, startIndex, endIndex, process_number, total_queries, tasks_that_are_done): - print(f'Starting Process number : {process_number}') - all_distances = [] * total_queries - for i in range(total_queries): - all_distances.insert(i, {}) - try: - test_vectors = test_vectors[startIndex:endIndex] - i = startIndex - for test in test_vectors: - distances = [] - values = {} - for value in train_vectors: - values[value.id] = value - distances.append({ - "dis": calculateL2Distance(test.vector, value.vector), - "id": value.parent_id - }) - - distances.sort(key=lambda vector: vector['dis']) - seen_set_nested = set() - seen_set_restricted = set() - seen_set_relaxed = set() - nested = [] - restricted = [] - relaxed = [] - for sub_i in range(len(distances)): - id = distances[sub_i]['id'] - # Check if the number has been seen before - if len(nested) < 1000 and id not in seen_set_nested: - # If not seen before, mark it as seen - seen_set_nested.add(id) - nested.append(distances[sub_i]) - if len(restricted) < 1000 and id not in seen_set_restricted and values[id].apply_restricted_filter(): - seen_set_restricted.add(id) - restricted.append(distances[sub_i]) - if len(relaxed) < 1000 and id not in seen_set_relaxed and values[id].apply_relaxed_filter(): - seen_set_relaxed.add(id) - relaxed.append(distances[sub_i]) - - all_distances[i]['nested'] = nested - all_distances[i]['restricted'] = restricted - all_distances[i]['relaxed'] = relaxed - print(f"Process {process_number} queries completed: {i + 1 - startIndex}, queries left: {endIndex - i - 1}") - i = i + 1 - except: - print( - f"Got exception while running the thread: {process_number} with startIndex: {startIndex} endIndex: {endIndex} ") - traceback.print_exc() - tasks_that_are_done.put(all_distances) - print(f'Exiting Process number : {process_number}') - - -def main(argv): - opts, args = getopt.getopt(argv, "") - in_file_path = args[0] - out_file_path = args[1] - - worker = _Dataset() - worker.run(in_file_path, out_file_path) - -if __name__ == "__main__": - main(sys.argv[1:]) \ No newline at end of file diff --git a/benchmarks/perf-tool/dataset/data-nested.hdf5 b/benchmarks/perf-tool/dataset/data-nested.hdf5 deleted file mode 100644 index 4223d72810785f11ba801ac0fe819b0a72d0ada6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74496 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 MpQk>7-@+&G|0YWOpa1{> diff --git a/benchmarks/perf-tool/dataset/data-with-attr.hdf5 b/benchmarks/perf-tool/dataset/data-with-attr.hdf5 deleted file mode 100644 index 22873b06c220b5cf9feb60c69295374c50b70ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306896 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:`IP!@g(lV zaJ}|C6xl~Q@rU?XedY?L-+Mhs3_mYJCIrbRc@|#2di`Vpf^ZOVn z*We;N0hc2)$K`tapaIU+%WPAIbM9ZFS4pmbCO8p4>SadAyL?A=F+8ld6MgWQ`gYFT z^)&yc&RkO)@5#Mznf`hF6>gRfLVe7|L&!VbjjmmT%#&y99g3X)`=UJ#!6FRPU&kxC zC}yB9cIf?rAF=D-%Jja+r-LfXLCia!)-B89*%l)DW1>A za(S-9H}iR%*{QT#NPdoQN8USnsh8t6^{IRWU%}^`Xk>}%9c_T72X5PyTR91b0 zYniPslP{3}!ZNg0_vE*E8#W>Da;tcM{o?2=FXHj|Mt%b?$(h?Oln=x+>YKP6f5cUI zKa7`0^FdsVf5oHnVcZlF2aav>ay%#Zormq1z93gCBqgcWG6m35Q#^dMRz z&r$ZE&-f3FmGk$?zL=lS9mqN;!TGagKhO6(-|IXFqmg|jYxR41E;=C3&PB+Y&VG_L znYB2I^9;NwXCGa{`FZ8%GZdLauGGtZlr!oxIp=Hkvplz7yC-XK5WbKPzzpQ)caPqW z@=DHGn!WK`InPYi!4za3$j>nQ>k#$3I0%h{YuT&%xt8ZRXYZ4o_45ed%Gs;4c898u z#&hyWWM+Fx-Gz6@Wb9DqneQ!UJ=c-f;466qvd854%ii%GXU6?^eGgE7>z+^09mCZ{ zIOoH>d`7;87jkCjoI7Q(LNCwtB+he_^Y$yAsF!`Yty}|H{B4nEb1|}aRpE|$nQ!it zhhRVCIjhIDF#|b|vUlfs%^GZl`;oo$KCY#ob2RI$4c1>NkNoDBp{_k#oE-Z$(Mh?%+9SDzC*2xIkSE(~+5duHGY@hfPLmgWpyz$RUe6s_z9i#KF4)fu5Qbt_#Bk?xl7b7#490otO}qi;%C$J}+i%NxUpYbj47%W9z58*K`~~tZI}oenkC6A&My}t5 z{JHb{X3ZaqtkYAFJuqu7KmR-j`Pt|B&)+HQKY!*2)E98}ocxTps_#O6PBW43aegNE z@Z%`v+CXlMd_O92Wwep=z3;&v@)XoSp07O5`TOMOS=aT&a`yV10Xb)~)<4nDzBX9S zbJtZ`+Z|u)`zP2Iz zN%s287}-B|ps4y2?v6a08;d}SSEU3SvTp74O&oS#6R zy^}FnuRLFYJoBy9-^-bq%5m1Ixa%A!$=QpqM9!Kz>dkmeJ%GQ$IQe+4juM!P?7KO` zdhxqxsh4y5EY3Q5n={KU=0nwmxF)~A^KrgBB|Y~nY}k$rL~D!Sg4vp;7KdKLrpHgM*m2j%Q3bJh2vpxjo!mRw){3`6k> zdh4~t8}jq~D{|(qQjft)>Ys5RnyGu@D7>O>h-c)>F&~9}Zkk@^^~O9AC+O!rZps+t~KTCNsl1!C_B}y@U?m@-@u)njp|d^F$6Iahz;?3rKU8~m=$Ui%&Aytz{Di?h^k;#y=+%{$r_-i9l1m3wl| zKQFJ~Ke;%%$T^c9;+%U6^vWae0MqsQA#-hCy$Q%UyOam&zlTGR*yp1cP);;WE%o=WPr@)3LncR@+4Krg+^@TGh`kK{hw#OH43%ux61 zb;cLSdvj&|);J0kafkl1n1mMiL$4}sKudMbwEg6c@&bMoXQH$Ip`7=vypN4?{a_rA z*Y)%M_=j9P_j6g4mOtjq@lCiK?n2JYQ#oh#diOjcmy|D%Ge76uVYpu2<&NW=|3C8E zDB_;?_&OegbMYq@=@oEa3pxYKQAnNHxwf2nYCOM#S-25G?Dk@ zk^CSU;V|{7oOjtbxQ+T#ZqL1uxr%oE`^hyzW|n$rr}r^R%ekQg{ldTVO}vTwxpts@ zxx9g|8Pw~F|0gB3NFcl?GO0O_~&SztyJe(iK3~W|cKr{Jtew@d1J#?0P za4q!p=NPBXd-@XIg41z0jzc^5RO1o+Ef3>kxFGWU-N%>mlbo3$>m}dwoICf(d44i0 z^w!&oEAEr z)$8cKujCVvHJ3g6MY*5;&B(L#E9Xq;#or-6gR?k4gWouNLiVCNaXG%ne7x#fQ_gx^ zjXdKg=vC*DJR6zkG6U4tDqs)al zN1w$h$o}>+=ef;Zw#7Yzcssv~%$nIVGe2zQ?9G{7rg8SIN}RK?z0W)-XFgcM-ywTg zQM@A;$2>fyex9=jPUoDrH^|wqvi85k(>M~1^k?(&Tn5>La)xBT&6)P2oZ0zkUW11) z8Kv@h&YC$vp2Rsvvxax_)6m{EFTKm#6rW&)oO$45IcunsT#);thP;mN<_D0qT7}p1 zV9vRab(wX0F~-U{A8I0N^*(hw_w36jr6*^99wB$sD}v0n-8p-4X5Y*Y*;`BE4ZRn5 z1^DDQO@}Zd;=~(dwh;oxW#?h7p~z) z&{-~rHE4#%@hpzP+c+J0=gGTP_PbxzndA3DS-HC2)u@bH)aT(ge1zTcyZ&b=EzjcY zX@AN+@xGjM>LBz;AFrS-j?$aM%lKZN86$h%X8uAi^X^n$q<$Ymu}Yo!v~DtTj^+H# z**V;`5A<5`0Nx+nC2DyZ#qNAM~586Ub`-LP3M$Y*jd*Y`o@x@)KhRvh znm1vh{0TDuWiA*e?~SoI)Agw+ibrvs-UEC$7NR%4zy|%CAB}zfH+3ml+%@M^;y3lW z@N2vrZBa+P2fmgo;~e=`JSN|YpXAIKjpesc7*o&*6I|=Y<@iAim$&79bdWQb-zHC% z59JGaCGUm1kQw-EJ{jZjjqBI*9KIceZ>c@2ff#@2q){G$aDE^K0O)Vpebsju+Q}5 z8MxnlOSmhajl3V_J^pX`SiFvxP~JTa`C}f&OZhZRk~iXE9IP&aVsdxR%ykL(;Ih1* z{x5tS>gtVG-!7lZnI#Khv3jCD?sfLETPw;4qwxfjHN- z4Y)}@5QXH-sfTjj3-;A}Ms9W&EcBM=bIyhK za-P4AcwOFxvoIc+v+m=ZyRA6;YhQdPPe*(GL--!O-%%U~sh9Fte2!D_6|$$*K}Xjs z;z~K+R^)d3(n1yrIV|X@yiOeQF)%lrbt~*S=4Uf8( z^K~b`r7oBr9>85VA19!b>)9Vl;W2rC&NEw7&i;2NvL9qWu86F|%zCfz4V?Y$OZfrL z^Vym&L>qKdAJ5Y;1dph{MGXu_=DJVxb4Hd?XAS54sVo14M_kK!+Ew0xtf9lX0{X~L zVw+r&|3Z;u_x~+V!F=4PH<;`5A3P3j*|pc@tT{seAml9Upw1rq9v4K;lFZes<$PuS ztEbl=N2)L2Vd-iPfNnDj@aQ55@Xn+=a**EUtCAnxHi{uyN$I)Njm!ILh-<06&U(e|MjHl%DakSinZ^x_h%Ule3$0@JQ``vTuBTx$$ z;ZQu`TIP$ZI5Tn+y@SylAM17FMtB%+sNcih=&Ejrt*EX3n2X>EtVMghm1rlgLiYdj z)b-@Oa2Xy%=F*%ClU*w!XRajLkiG5#9A>@=8>dyKwgK5nLB1BInx`uC2nW z>UX&TAD}-(_TR3Vc)ReD+>6iSO?V$I)VHFid=z%`xyRIh;!}KrLRgQVUC$ZVNWOsc zuD83~68+^tdZ%L`4%E9CrR6nzG=Gk}(MkOo@5bL?Pu!^f0B_1`csQPu=i)OgQ{T^9 zaGX4v@8v^MqY6I6fqI*GA}_}osDimTKz|f|!%ym~k@t`v)a&J(+j;MNQGL03A(uvF zc`-kP%qiv6XUi|)Yx#RDlQRc&;e69O;1n@){95@=`AVEC*XB2Hjy#kvM_UX-=9kmB2}+bo7=rBedB!r!W^H7q_(QJ}vi=@$|6jNh3)QW8FlS%A z6phra_*vxK$@5lA&e>F+^NennS8&eJJTrMVR_NvI%YK$;y9eLSd2aJ;ZNjm7d6o*w znWZim@H?X$eQ_5o&7j#?+RqU&wkbbS!;*ul|=T!zUYn2u6yz(%tJe5&A)m%8GV;a9y3C%QHT9CZt^BsU7rG;JeKq~Pg)MjynL%&jV=>9~e*6uO=ggnK$`w#cuB0~vcdLIv zd3kUC7|Z0m+vNPnewXv}X8phA#hmkT6z3ew-dmsdRcCL#1BW2*79Z<(!V&6~$l3iJ z4o1$J6ZH0wKSMX%i}lzCoiW+Nj1EV3uJ#I1N$y@-$Jclj_phMa*jc|Ni~AJ22~ zDr%yZ`%B>wc`QH4CEV8u_o<&!zrf@8QoaC(VVb%${zm4{6ZL+;_xM8Z9-NIckXa&U z=yHA(c}MDuCGLGsJ&sqQpPX6XN8ZX;;&pi{Uxrr5`%o`_33s3muETPCjicTF0iVPb z(H}Y2-ojSo?B3J$hVti}S>-g&8J#(3sD3?O#{+O39(Mf`evfm;?k9gFf6wpWVtEZR z+t$c6Jb(#$nQ@xQZ(x7*wdfzC!?I^8&j(^AH_!h70)x=ti zP|xR6cqJFWc)AEz;tI6UE6Zc?6EdfF;iCE-IP>|J^3U?Ed<{m*m*5HcO|+M*^CdVy zz6mGe2z6^d2ItAm{92hiGB2H@J`#&j$n_?;Tz(Mcu)q3Du7?-pANdSqCVi5t<=4=k zjT&+zwd>h}-%eaSYedPo3 zvifSAi9d0OYnjvjbgeDEz?=Gq<1{QqX4mHWd&r;i&G<{+P5&r92v;HRcN;kGDo44e zH>zNw-f(o3TVRRYlNaGs`9ZA0uCs~1M$VGwIWtouzSg~i`3dAqn5WM9{JxyMC*R8! zcv)_Q>zJNaVVkL+Db_43?)%LS2j zc0F>2meQ|=oI_bhd5$voWxu>d&R(DAsXw>X%bv4Fo&7p{`ZQ#(@2Vauujlrh8SHm? z0WyDO9@va(t_|c5Fb`YQkMnAN12Zul`PtlvkCA7g0pG-5^0}O!clP2<$k~&%ah+>F z@El~mTd1Bbk3ycitFZtpFb1Evo^|pK@~mdP55T>0Ph`F1c|Hqyc5czj`mBK;aHHNG zJeo7dKF*Kge7(%nIggsCYvK#NJF!j9`pf=yoVpW^Rp+dkg-Xa=wOqdqvUjc0`wsi5 zbGBZ}-PIj=AGE|z>dd>n<*M@OI7H4qlJn_PWKI9d*_WGg=B1pmd&*hs&oceD|39zn zJAZ5JcdEzXQe@9~S8o~$BKt|sgzUTd`kn8?k@5u2K2aA9H_aI|~^CgW9P4|@pHT|0?K z^H<1TKa+C~=6&O5*Vd|kL(aIIYdz%6T*vjbd>i(_8EEHPA0EdibI!!%~xLvQdYd6bR%9Hqb43dw;*?1m@=~coX$o`wNG;_=s za^|l3>UYo!c`tldzaO&yR@SS{`(d$sJsM-I`W`-!kKxP-_2rG}<2-eB&KdTjJXp^A zR6As*9Fgm}rvJTsAgZY=t9Qri>H~OdG76!dUS@%|Tn;(M+UV~gKZ&p9Wqd7OK^OHf zF6_QKe46?`Uc$w3hMbu>bL=njnW%{)koUd|_&N6-f_3ue$c*`!`a|rCvU;ugd^E$+ z>dZh}`CxR^tEv8y-&1F?+)hQ*d6&*P`ztQeyMQ0#^7tsI7vVfSjX`=3qd%@t=R94* zZ(=t*pr7}`4>|8n!}MC>EOiwW!U1?q?=Q}I`=b1`JcL(sMSg_a<7%u^&*9lvCXeAw z=q;B;Yx!Z`z=!g7z6$TiUtuI>rN_;2p*$RK;TUxne}<*W$?2To_yABAAF;>QgxL_x^HE9IL*F$Ky&l^TV4wSG^ve;BWPCu7PK;7xKRL z0B5$_&VS)ReCyuo*oM5P70~+wnSaXh;aVfOJ3oa-%V>gCD2jvdy=yCZ2{J3@z3Nf9h5qF{9+%-X^uvjG%e7mv0lT|DvtTj( zyi@ejn~0y(J9#M2;0HOg{$X-wK82st%M6&=s{>Z*J&U~SjCHM!ob{4tInPV>*8H5? zxRy0G0j1QB@wGgOyW$9ZgY3`QACBg0)Kic%Hv4U6lPA=ZUCY|ZzL>pqj@~wIfXp&? z@Rxd7msxY4p}X9Qa|YylRS<8;C6MQKvN}J{eB~V9TQAS=Wyt>l}l>P8t-lEPr+9~hL3vwOfa0%uh>-i7lTrKKzbvf($TAZdo z7zfBbk>~zh^)zHJoz8jwCLrhiMV#j@`(Qh4bkAVSMb5f!^?Gy8pPZ2m)px50acj;w zGD_YLJJ4TmBxerDy00c@rhJtfV>61o=WJx=sHAQx-;T_O-8ge>13t>NHF!mSp7%s8 zxfI@!XLHWMx4D2i`%W=r|K7k^k45G4kTsgUV?VB`e;;RmI3IgqhTe-z73KrZf0KyoPU(*?f_{xa-}dBF|Jz=Q~hCuH&Ab zJPSFyOX`o67vp*PQoJoM=T|WhrPW{YTz(YU4}ViXz)vIRW#-*`^adbj<9z)q^R z{0Xn({`g&9$>n)3-k%r67%MN~T7HeZS6-+788_%e2Ob-cg#%PofUKMhSG)|Bf?LW}a;7-umiO`8T|bq3UVKTz?~hFOy=K_C+=KJj6%gtXQ4%db~W$y_qeGaQ;o=CcW?EH#xKP z49?uzQm;B*QlE@Rf?Dg7w+Wp*d6ELBiAxl{lo+LY96m&mY>5@@dVkWeFl$075OyYjlboQcv7y(1%2i{ z`9V1|T6bQ8RX7|~QOWi1`7~b3Q}}LV-{{VH9*4+T`+5GdM?8+n>O4OSxF)jxx9Vqo z=lNcPJkN`f=ORD%{F!H<3UWr}S)403mUB+#`Iv;9KL;S|Kl56imuLttof{+e1BiSGC9x6Q=Dggi(a0)?3H(M zXFim(9`k+8xs$Ud&qAK9V>v&w37kD;fczx>K=$Dg+{(4gUjG{p_5r@-{QiIZON)vM z*|an?iHs=ilq6{=MWqr#Nk)`5*=43siAoxj(4e9rqf`jdQZll)@PE8Ij^E$mc|2d| zdEF(S`?}8ed9{u696f~XcvGG8ej@*hi}bROo+r#|=A zmfuD8+1q$Laz_nMb3ByaTzn3vlkW0i5$_ zsGR5K5EN18xmx3zfA`JGZbE(ZP=C$SIWwjk7w62T#`sFkGn8F9_jwaE)nBBS^Ct7U z3V*GaIg)$%0N$*ZbM$Dw5AVqNkC#I$aUw5A?(@u`oM{cz*)!*JcCW(vXJIokH!>JX zxi(VFex8}}B&y?7y_^SoIqww*ac0gr$lS=xI85%1cd=8Q=e{~#lBePs{HA^wwUGIn zxsx61K=pY1qCOe#$#d`!o>rGZ2~>;q`r>V5C;f`w)33l^@^}0`UxFi$^Xq)QlaW2* zW4)ZqIm>d+XWz>|S7No^Cho+e@T~kiUyqG)&V+`@%$mZ@^)h2mlb7>{yc>VZkK$is z?iJ!2P*Lv6`A^<1m&YygZcLXy=X3cZyegl>pCWs~7wUK9YtbK>fv0eGy=KX1k7xCM z=bRgNVw`#)*Fbij>^UR#DsX>w&b+C}+PomajrzEI|j?p23O8IaH1R z<7M2IbH2^uJ?gw;4B|cNk2t%>&nPe7h@0gzP*$G9^{`(4hlgRByplWO36%2tRnp73 zoxP=nUL*ByoHIMS)hzYd>UQXi*VW5-0UnU=;J->?a6Bqsz?Jwm9>MeZA7uB=j<8j} zQa`(I-jP00XU~|-<8Y8`tRvcbZh~*nPkmDQ@+3Z(|KQV*_o;S#sa`?(CwVTW;68kV8LnN#pP{Gx z1+pWb$cLbyehbW%m*PD9groG>h(Zk?%IMAkWn;a^~(D{tEdSmQa6( z+*8#!Gb=MZ&sU!9@jjDhw}^Tkm&d#EbUcbX)R|BD9&+F0EZfKzAote-*D}X5zux61 zQ4smgN9tv^S4K(oO`Ll-vop_m=2`>(7wcT#j6AR9)kEdnXRqO9e1!pe&ti~#0EWn! zGda^|s_V%eFcsgZ^ZYHx&FVbI*>P9P*C5YmcHx}4ljK@xFQ39W^J?RHWR~Zd%3L`b zm-WTt8Lb%LVyv&bhc7*=ve(3!LLx=G4m6a%O$@^7G}qLmbMVB4<|4(yP%| z{swQ#m+;r9D4)gIk51+Z>KXhR-a&TN-}UCo1(35jXL4q5=G`EE#Py=cKiMBA@iP2| z%)2{y3Vx6?V}9j!_*Tvy@w=S4TTh*HYaZXLu7tPb>@Ww)x67GRnPolXx|})rC6_`Q zyr5o+yf0**`d%KaKMdnAL%oGtqO9vjsy~)9R~z%KI80uP67p_77XP5Vx+}kq_vFmb z?bs=o!x6FHvl_40e}bDKXWm}*A#!J4fFI@0k$1AYc$D7pyayxX(cA?)aE!Vq_8{+9 zWBF74-dvWOV6=QAn&LhDqjxqs$vLNThEB#bs&Ym3`EpD71b!b& zs?S?T?gak0a%0VrcZG8j00TDzW$=RH6BJAWS_c>7b82sw?20<`lFoQiF(7i53WV_ zi;{T7_0{U{cqXzlcH`TyN`Dc*fI@gkeHHiRu3Qvn%9rtpTmfz6y8Jd5@_X%&zs4ze zO79kKz#s4f{4$#3K=on#1HZ*(`AQ7N!5D^0e!s%p$MwVce|$V$fz##M{4-zZbKB$! z@^2W4Gx4$B3gjK)3iVL=NPd!QVy)bW%b=Bf5I4giScr4}N&miAbzT+yKpZnnS zF%0?d=f2GMkZ1Q@Wg>*kLP?RPa{8v2a#trXHjOzKggVTPJgmI z0y!%)(~IdfRp)!le7zMpd*aQn8SaBMa(3-{@^bklT#cL6FY>d<-kbgRMZL_;r??d|A2R1Mf7amwb>?h2?!dy|@V#^tRylMwkDLXkyZ#PElj zD13>Za5-{LWM?k#GsCzmXMedt9woQr>(Lh1s)wSX>wl}4pg-#AmBsV&JIH&?|J08n zyGtLQz}c5y;2oHVOZDrZC>p3I@G|VgNyzSS3qS4JHg2iDk$=M(ScET7)b-1-RK5ol z@d#>Qr+#mAkbmLqu+up2_?L3_jY_T^BX>n(^`YvLD5x&Pk8^E4gWu)s%|+x>aUy<1 zcF;MlwUb-Pugb5;e{mC3l1rm7u2f%$yjvcit`+1VybhnawvuxWSC*@Ab*>xqSMts1 zg6zxJ=(R^jbU{`9jTk8J<&iv#3!|OSx8XnZD&rgZdwe3-!QXOr!My9NP=AE_xJ$nw znqi)LI6lSW>i4-MHpy#wDqqc~^Bg_`Tjfviwmb->ko__58wK@esc+}JS5A>f%I{&Q z+zZQbo_Y-4Ko3mSTg;{Nd*C?rTy)kOhwPEp@%1=ZUd5AKKa&S@_SHN1U-ka-2l8vk zJL7SB{cxMQCpXpmiSwRzFn^|>efDmy%=hu9`s?vN2I3Hua;-P#?=imST|RdOj+e8m zoh09nM{$APsn{S7=fyk|d+;+F-~;`qk(vFn`Vn+g=f3SJcSfG&%*fn>52K;pi=6+5 zXXRRQ&f3+S?U5__@#_nk~P})3H*%A34LO^W!)YIhQlnGXvY>9}LsWE;3m@ zgy-??d;oXH0KBCxiT-k){|(4KSW|BeN~y2Gck&EmFKNp;OR|3yk@vX%C$a;5%dIgX zHU8AQ37Oj^@UJ|Yf9EIo3S5Rc$T>Zf|KMR#yF zAlEVWF=bnPiVmT%$Gd;{9aJGmnKvVD8$!SX

|mC?y}pziw2{B&>>yn@d(Sg^hs)JbL(V=}P2P{Q zKd;bh!O!!*IN7!AD@V&`;XGWVHM zrSU5M!kxHFe-QWPPx)+q1lP#@xDxN>Z}5P8JzvP#b@OhYpJC=n?zM4pe&(4u-=er) zzK;TO&Zc~qzpMY@%)ZR2{OoU(^9CY`FuB3^z;9ido|zByU6#N|F`@<-;Ugm`95>c<}Aw3Q`~pH#%u1il!#kBaN(UeAnrO8$et<2;Lh${Ue+w;g#7cOi2od)^Yc zlYVxY%$W=1A)NbTDf0d9*1G|jrFr&p4|e9}7@_w)o|f}Gp3Xbb80CE?{|j+2HX}Pg&WD^mYq&2CmXGA|$Qd#f3sDT$ zqJdwN^Z#UI&Ygw<@*VsNaz-uSMrewoaTf~s%&}N1Kgox1p0_;H6VXx*J?J8ZxK>K;4^f5?ltJ>Eq%WM_F< z|1J4pG{7tP1=aL##0WWaD(BZmeo%cs%F8)ND$8H;Gx$sX2jAmwG}e0^Z_3^IaBjkW zt9@rmLm~V1CF-rn`EVQ;!N>9p&b-=zJt&N3I1tNSo6I+12EIi{Ox7>WV|f!s%f}(- zPxhZ%&<_=Y-uc|0b6#}e{_1}@^Zf;R7!O5VJd4VDwRkFu`!yxigRojX7tbN*)rWjP zf5RovTfTv_+ds;g?|Bb+ag$d^@j1Px)so!6Wz)*~1>- z)A5Q=c`b7G_Tc07&PDd4-_>u+ zuOshF*{_!AeWZSv58-WiRQ``2!Yq7_rYMD0xEXVN=1{DVPvJT^3XiD!;6ZsEe}~ro zJLU0?ygydCc095_l~vz`P3VWcdf89jmzU#ib$etdJ5#+=ev#k68Tdt=caz`byf@V5 zC-nv(d*cVZ1AR~nAEPFUx%Ltd^7(V++vL2LZB=iU^Ip`8SE-xHCvia>q<0mvPn3yq zAv^$kCD6JaWqyJ(yuF*MRv^3 z`9uuY?~R+}{QqVi^hECSe9w33|H>u!WX?aC$(@n;mpM}hzpHc4_LuV=za;19^9u4k z=jWR_|GfToJS8tjc{$JAlgNFLJ#2KY$(g4!VuGbzZU1L zxxuw-P2{09>JM|ndSA>7s+|{kLK)MmvNrAd-bMs zM{bW{as$^hM{<_soXFnNh8G~u%2=L?oOdtt{TM5+;fs+yvIXa?_)|a6=Y80WJm=SQ zp0)A(G;iT|Q2^WUz1|(jd&+m5U1|>J+0Bf)1;=2u`YrU3cXQ@ncK74eUm@=nAM?rj zSKv%}3+HSo#{a0l;ewcjOVoLmBTv-K!>l)Q&u zz_W4@{b`){sC9aI_p6}ZhVht=?Aqt^+bHQXIkRiY4`Y-%=W=$&PU@@Wo;-`Q^WDpH zahYDuoL%x&at-c>%=+s53NDo!Bkvs9L$W_jP-pilsQyfT5g*|+^?!Ui=A(>yHjm@? z`EkCLm+<~*Cs*RW$Qgez*U)>B=i>-miJW;u`ApZ2PsX5(AE*LfL6$}b>i(fR5V z{JMGE3oZ55@Xg!>WnJ6MXXsVNLitgCo}b|x`A%+xRq_dVL#~ID@RNEcUx=KwmGGIo z5%?0@vvM#Ci9B zOdc*jghS=*97l2XuuXh`{=t}p7Wf87>;KK!A3otR>M|IDBI?7CeYUfD2R^}-_!#H8 zRuLb_d$6C+y|4aMJ_aS^LCE`a18$}_nLp%d+yo`%vv@5U%B9g(?v7t%+V^hsfG`pR z)TeVFz6E(tY^A;eSF4NTD!DGt#oKakESCFlH@*|q{kpyUrrr;jBxjc|$0y-Ly}T1Y z#XlqO2fg&am78--^)Sx9f0tfEoP+Gj%k=BW2O;yZKTbu?-OTX(+;7De`9sdm@Swa) z&KdbG=UG^aYI0^m&Z(Sh9nI+j7vX3m*%Z$Gbx$oOxx?c96`uvJ|InU$b+!x2k z>YV%U@(y+Gx!>_Bo<_dE3CO*YpXpmT1i9BQ_G>QV*~mSUd+G-M9+}Cj)wzG)QRhs` zynRakQO+*%7>~erdYR=p<7%TlwxK*SzjH1<&1HS|d(4zyM@e}BU&t+ynUi}W&sgri z`lzX&`?so`vn_k(xpHRfUC7+XZnDj1_Mj7Tz6{jQS(bb5FFCXGdgT7D&P|Xr^mabk zXL7HMmvdg!m5;-nD4mYl-@)Cu8t>0VI5Tk#x95eNc~A@$E5rl3WgRF;(4^r*Y1r zdvUd#Sv6B$iW+j}=uz^qcp1;@HPCxO&Mq-deIzbXKf{ZV{d<5qv*B!Y5zccuLSDti z`5feY$oaiYZ%$C(g9Y+&+!ph(LY-Z$n4H}*Gk7QJsk`t^oSFBqob&$=&iu%ZkRADM zbx-7MtHo<@kvs`U%D?kgOhESC%*bQ$plegO2S0&j@?g$;(GboYYOS{urP*YGFK zz=3!K@1cR~*YXoMQ2qyn{QBqAP2}v+H?n{CokazNj<`g95l`pyk@My^w81_23qRv| zba(w=9>@L^Hc`qBy-|21UL7aW*RJlLiR_6@+T+TaLIX+Dg*)*dA7O`cf}EMZ7#|y zxiU^i&epTJmHu@&S8m8n_1E(o7_avw|G)?F-`It2XpEePpCJ3{BA=-vzroY+A7-e( z!f+ghoOKiR+o6-X2LH&fb4%B<3%(*>jYsuIVI?-JbGEJHn^9LUyU#UpYg9m4z3c!D z@tb@m8tJd%hqyOJW4ro13`2GG!#tV4=9Bnwu7xskWxrQrl$T%B`!0yjeh2IEI6lD`oZ$0^@&))9k768t@M|{l2^fxs z*r0a=Ux5K~Puz^`Mq~M8%)<4qU&vqZDd-@tL-v(d`Eb2bs3hk-F#E?1>ibYo?{col zmH0{inh)W@I3CT^&HS3|xBo*AdSCBKo;sa}9g&0`lJ1n@eFXnqsQY=6!6ae1^Qge3@KOE+wDCh1I|Cr^w!Qh5AH{RQE$2 z{GvV|xo3}6XO?AFbl`on!nHgznQ!@d<(~LPy^!>Rd=DSR`Tt#w z{4A<*eimy|b1(dd+ygc6BQjTVFQ1NsaF#mf>MG=W9E9u}MU`*id3AQ5Q|0`O>#OG= zdqnR2%*M&c%ou}>$X<9c=ibVFQ;K>R&{95EFZb*cWDfj*1;~8L zT+JDi=j#}s?TtNnM4kKDrG2~a8oiuRZ=jL<7kB5J5#Pzba^~|xa?aS@a(2qxFM}}} zAG?-)J9B3%=Id=iF*!5kAvw>~SL&m23+4dk8PDU4GUXJzI z3y@jS7kR!X;v#fbXUEGN_yE}f%Jb`7L_c$I8|vwm#=iFoo|&w_h)W`8b9SVoR89zc7&B3#k$mEG(& z^)mI7*d|Xy=IOoaI(S0f59Q_B{2@lmZ}JHK6a(>@`UK?6J6ydP4Y2_e(8IO5_zRb! zF|zA#a;+~iZ#(ik`kAA{aUrfp=Ji|pna_vg9lgxWVsg&xyX2u5h41y=!y@@kK8Y9b za&G0bIXmydf%z<^%M+3FsUudyzx&=He&gMkhU@SjGV?RbEBH{(d*O3jB_yXyw|ss4QQNm2%!|{^mo}Bl%v=KR5EL*nlQD+~;oLHuxEPd}cAvHmiktC@dLd`G&ApbnpZSpg*UW*Ov-xl4zRR4*&oAdgH_n-n zKWqN%9XV$}{=9j%x+Bl`a^x8qz}vVe=Q+szUmqjn{24Oqa<=Z^%)6XZr?^%gAFA{7 z&NH5w(pjDR>^=1~l$77(JOkN-^3QvE`T6Ev&b^iUqk-IqyP$^N54;#(VUxNna<6Sh z=4)pB2XdaP-Fyu)KXdLKD9=Woi_EW`d^Z{*&t_)GMVOD5kmsp_e&%WJ&n0@9o6jK6 zW&k>iWq2n)@ORrgJ>4l1NJvcw+$DHTc(`w2`;!re3_QYbm7nzkg12SuC;T^qdxLD4cjXcpE;XPMqRm*{so+QcoGlMU(cuV(fl@NUQR;h<&o;llFYt5({HK| z;)gkNzN9>pGXt_?J*dtzUz`i;XTB_x_uw;i&g&cbeD!yD760ONWEaV7>4Q6crW7*M zALM#C1{2g@pru>^*>y&%&y&aUE68~=nP1mC7~|zzu|a;Gzvm}-DY~M#dIFA+GoM!T z7MvyLyt#!lb5E7K<43%!&fJ`WbJQD=J*cX>4D!Bnxn5@BQ|bY7=3ZSn=YDCvQm-k> z$(g73@z=Oc&e{H_Tm_luU*dE9<=7^d;1f9KbbNEH| z=g8ic{qIxx6AW?fEcC`g>_S=BYrD1=C!(3&XnuiP;3E|Dnf^R4ecX?~aj{KV9AeiS*Ya^{TH%e!)8?x}YvABx5DD2$VD;W>N&E|S0FGr1jSKb)A)AvT`l8*5NdZzP7xb1)0p_sj4<`mgaMz7mz?k=QA>=bYKk%HN=e`VhP!SLcWLq+FAa zL1D~Qzk^?KJxb+sDChUNB7J!)8X@mYm+=xbaBUja$$1z0kY}lzqdcC#GWd7je$v8c zCM%9b-n$CvXHWcv`|IU>c(YstU*T@ORlL9cU2+@Tr0&fpawDF}*^#T`4!J7wcPW)| zkL$znoZjI$0Bw=|{3w0^gIwSDF2#e@`NLMmPvSrLSiTL{$The&XJ@`i9wv9-tGJL} z0bH*B84uuGT!8E&m+&zB;Iqv!125uXJflCK&*6%E2G`+oXd?H*CfuX`k3Zl)_-C%+ z_r5`X6xsb==11_UYi)TU4wJWX-d{Gzhsfun4hE@@L;n8geRXNMAFsktxr+XU+!8BL z5Nln_pE399k9Yz3@8{Xh&wi{r&)q0=#(3n}nTq^;vUBA5$jr;1{R$LBQ@?H_=l&Xn z+<*CV)z{0>g5@^ zfs662{1NKP!#Q){INUCm!+bo9hxFdX6!{V4nHsFlbJ+piP~n94b*ubSRl8Q z*K*FrmvM}`EGEgBd%NW$u}prPGr#g~kl9&T{S()~9y!nSL-Hz|ib3kl$XPOp55)b* zu5mgy@R`i4=g>qx9xuxE_&KaY_URIO*->(4W>>gaT@UZ@QLqZx{;T7j@p#u9QpQ1obnV-63-^=f-+< zNo00zaXm9S?|k2@Z^1mAg>|ki<)-{C`e7Un*ZY-cpf)mp^UrnYi|nL%Cn>GpNPP=` zhMjUlo{5%n&ZwLCcl8in%F{3=*Z5NY91qCd*vI$n=cn4EUt#i^4WYL zCdxM=zqmSGgaa`WOI-gR*>5l7yi1+WZQiM8?& z6p?o!yZ7mw_nf`@O}U?XtNaiD#dcWc^{HWf;*^ja-yn+6B9iQPnyx}w3Fk5bp8OUB=9zV!= z4_o2-dH5Ok;7t8Xxh79WBY6Pdk3-~@Xy(_oS64-Ayo*=#AH-eQA7y>!IzAbnBYzk2 zzR&f+CiQ-JRUV8t(GJb^79;OuE7aM~viIL6->m-@9+!u6c8hDdjk*i+cNaJFF?d4% zZoUKE*_j&ZeTs|mvR-ZehOfuL^1-|ctL2YT9v9+hA-+dIxd#`|O1k)y>r9_z@hBRyY;!=%2`6@=G`cbubGLAn&XF zUB5~$gFEHMdjE1w9EOjOzY{3LdEe^FXJVnxUyll?i@)_|;znd9W`3NcUtF$-oPA$% zOH@Y(oQ6dx?%J{ZEqCT-$Qh6wB)eD6r*i6?eOI`4zMQivGjX)~Gfb6#L@7Bt-9LP` z`Wl|ZH{fG=1drlc7%d;g^Z9aql!O3A<23uPsK(Yp@KHQB*HyclOS<>YeI$I5RrWan8g4nUc>9SRX=C%b@K6?8F2tEQ0F;r&-1uE z^1Nn_o{sD(zo@^#GwMT87at%yT=vF~TzgnO0=wnR)DLkVYN4lo&doMl0e9++#ldnb z9>fdKO>WM4&aaT)#9!+5oO3F(YdadtcVjE|M?Jm1Xef8XYjS3CHF-Ja<4637@hITh zvpg8*U;r|c-p52#RX>i!xCq$`?&Iv*!M}MFvhja&FAGmc?dFVA60)L z-;P`5oLz^@=VH2g81~=;bvxI-l_y{?Uevpd59IH7GOy&D@eAgv58#($zxGDni@g8k zog;hsMe3iBbMjj5jJ25O*IkX$$XS>(YP|j$^wsNvxu~x0hwsn}*#VB?)yVm=7`Gtj zS_eK3#ZW-q3JuU$y#uS|fBARh-Qhg`P_G5v#>48zkiEQ|`d*Y!XLnvDPr*3crB|LS z^B7*n2lAVkEl=W{yWj9S_1~C-D{(od={MxxxF%leW@-3YA zzDDw4^11TMoPD;xULiD)@8yvwf|FgZ!0%$6d_RBA+jtN@MN9mF|MaszO^_R4KlOW9 zCC|dE^0{d0Gk>Wo;Q?Ha>=>Q6AhKHz@wu<%YM6m$I7KhJ^j(~Hi*|Y|@QC_YJ``V} zHRkB$9i$L1SJ%N2*o-~+LjNSxmapXp@SfZR&&j=!{VqG`^Lh)_i})Vw!p}HS??Lp( zR&`YzFAqibrlwpLUGXGd!7)Bl7K4#}>j}O4@um6`Y{IE(m-g+kpYu!%Kt;5{O?U}w zeeOZNkY^#g`EBab$a_Rx{upI&De`XF2*Z8$DJ<0M#~1QPToZ4}xwmp|WZvYt*{;qr zHx-YgsA~<7pWpZD{OqsAMC94a{hj;zYg9qLr%yRQ$IQCDC@&XB?xlR!*`?O-b__ty zrUrVse{xK%y7klDXnuOaTnU+RsVS@H_j z$z!=Ds^BB!9?bKfXY@+-yL=Qj%Y!)kY3{u#@{vsYc8&J@H;zN*ZstxO9E9u;pXg;i zP=ec@EegWOozwtHxA( zcGuPFtC4f?0R21zIU`%>oue)*7nd{h7O2bdN}j;`W`cZ?JR6&Fi26$&kFxR~XfI#I z%Q&;O17E>K@iI!P^PFd1{>6E&ipiO8PxEqQ&g9t}f?x5S&)kJ&@}u|$oz;2X=ivxk zikv0c53h6W19j&6P`Q+RHFBQRRS!c4^`D$~gSUB=x+=fQ8+a@-XB((<{^aa@28-pc zd_EeZ?m&y4;EnLOtXxIvXG8|B8)r&cQA6n{syh{pEFXH4MXr zdKc@RgO`xK;~M_cwFO)QmtzcW(yNZ4I9t6GtC07sr}PHPrI7RXV0Csu|L)rpui>Zl zOJf$gsXs;jxk|m1J8{maJLFyX4juJ2@eMc)IWNw|h5FeY^KM!amGnNw@%lI5Q2Alp zjGS#Na0hNv=ZrW7m!LPM>gQ~mp1wSRbFR*nZ$v?Lc7j9X>>tPR(R$^18a|YZ=vU>^ zI1~N#zrm5Hgqb)Ywa<0o!l;Ps#yx$$21co~PhBXl#|U*Lbs@e^o%ix1Gd?^2j=5iZUmoG!!1D@g5dgZW0 zK92{WplipfFOvK6xA;dMhp*%p`EdS`f8gxg&&rkYulhWckxxQd`C;Tew6MB~JfE|V zJ|VZlsW=Raa3yLYe`nCb=ZeU^kv+H$XRm68N9E40m*L!yGij5YciUooz4{owfFI&F zIPYYC%Ri$HvM2th|Gm5(*&Y7iK6(f8aK4Ev@OTWD8}fZT5{=}%kKf5BqM+Vuyqg!| zQaq0baFqT-cno=Gc#coUbFTfwE3gQ)&{{8hbT9c?`F!k$N$Or)-nHB1f8@5@mizM2 z+!K%EMZAGR`Yo|juHe_5$a!~vK<_i;?-K6R+aTYHwQ@hs`_WpijqGqw>93Zvvp2+< z>g@45^y*-Sx-#m@d2Xu9v(X1FaTE@B?PB)tzWpjQx0{^%GjsABxj4Q>0p!^pjm(09 zyjw5#dY-Roay|Kb&Q9}!{0N>`=jZSx?!^Li=GxbIOV0Oy0!GVwcrfy8{GL8%cIMgX zitHnw@T>ZH-ipgFVW*s**8q z&eoiP+c90;9+Q#hB6BBa#@DXpOnw0+^=9+Qm?>Y)zjDrl%-MU@nJ3rs>71Rq2sg*C zdYw7*CFk5l^1;YXHBp^szb-l;vobRw^W-zG$wP3OoE@ktH^3FBqJKG0;2Syj^Mm{* za@OWNe@gFlJdJPkuSHQg&(}}#L2~x0TR7)Y&Vb3t9{H8)Zz1RS<9hSuzBpgbY&!!@ zQ68`9zrmU3dG7zhD0L6Mid&(vJQf=;0(apWG;(bVzsc`%&ijgfp98tRdJtDf-Vw%g z_NVXgzH4(hXVorwf8;$Ob0#yXF|t49x&KdIi#+GI`P^d8zSc#~{`5ST)B6}J+h<$dsq+?p$4 zI&waJ!AmjTwZVKWZ^B>lSd{gd&FU-UoEH`46}VWv1ry}oIQ!X0e4P3b&YXK$Ue9?i zI)qE2lwQu0>^|Mq@8Ns(iCB%1$iBCR7rM3#JLG|U4(GheS(tg*Nj*hffnVVt_(slL z&d&aeoIPNwx*8hD^Y!kL|K;rWFY*3d0Ke$pjBk;>@fp_&%O9ZtI;uzU5R8+Dq84sd zui^H{8GN!j=jTqIrroIJ_0Hm6+=$=hzW5!z@iXe^ zx5FRuk9YznsXxb`=&WwRjr_OIlye>~QfKe~RQ({bGZy11`ls?Ad?-J}ucMH>2W{oc zxGc}XJ@WB<32Mlv;}TTE?YJ8UV-b$@nYR21UPKf1lNckPhL-*emHB0?!aJ_*;=Ayk z{4CzUP-GAPM*koA0G`L2_-}kD59ixCJLnhur8>LAUaqOWi2tX~PSQne!?pFxaVhoF z@}U@n|Diu+=i9;C)FpT+&*l60N~}W8_fL60Jb~4&pUT-G-sS^wieAq0N%ArBmG}qc z)K7ADfsf@C@(<`I58#Kn7-q=X3$oK)rOsZxj?cugt~EptT!UluPQh{VVerxa|93#G z_0PvJoPiTv8-@$fU!C{%tGS-K2xiD-_)*S#!)@|3xd~?{-^wHLpI&cNlt18pTpBka zyHI7l*W~-Tpn9gf85gRX;#Kri_vD}W2s|a9i#l?7UdOeO{dBInfqXq4MpZn98}!@o zQ5Yvbjy z@2$9e2cUR82JQj_Sy)g4@GBSsAmeiG-Aw&S9*?)=-#N3rshoYWgL=N4XY6G; zXG+e+TX-~bMzll$*Rz++mosOxGv>RfqHe`Axv*Yw`9-+`GV3ow&aT|2pK)e=&f+{@ zxi6b@H++xR)Ps@zp%R~moacE~ce?&My2*$0RNjJGSf$R6H;r@e<+(YXZ&hzZp0Vs{ zck69Jcl9MWO|FN5Sg(GNGhZ{;UXq7$X?}{&!w@9-pi%*nj`z(Wt`cwTmNf} zK_|R`FEGgU)|?rgb7D63=zYkaqCPTTGAmZfnO}K6HgINkf6nvxHL|xI!C#`CYcuet z{0ra2H**8tg)8O4ycM4yd&N8yL|3%KSf6deNV#o3s>Y_Y~v&Zh0KajU0=Ti3X8ggc9c8Pmj z&kSv$cN|K|^?4zm%lBXuwMYG2pCjYEg zNWMy5EB8m$1-t`XVBI?IbL0yr{ z@&wNLc>|Z>=eaFb$p6FDRE~4bOvK3;8S5`ac9D~Kuig{58rd)E@DxnPzqkSK=>LnF z@{>42?uG0hNAo;8(|Kf#*cc-_(E=o-!NRg z4Xc8dvcz+y+_8e9R4St?SE?ed{Rob8_CpZssDmUT*|Hg-kOwuPon(9rB0xNX}kZ zi%Y62Vy2w;qs9Cv>R}gJAbanHoPqNa<-H^O%ro+#7p{@>zV|tws?Ph}8@x_^BKlwte#hN-&$UlD`&Sq4tC2`EGLmZ{|ER z#pTSt>@&HKvv=g4dmZ_6_CTJM64-+x`jhzs&NEhC&a;{OCHHqDoQ7MG=Q;CfKJqik zJ)c>X`#v+ZV`|Q<&i9>rb1R?2XCe1`XTAj&>mSZJ%f@qlj`^OyQ)dVKLB3SJAjm5@ z|FlO#{DcO2vvGu+`!3&aU1ZmrtoI>uz8r}1Xn})V?~2?znGMVJTB_g2uV|zG4w)6h zxESY*$&Ad7mYwPlIrE|fa9EAq@fsm^nGvATgeXG~^Z?$-_YL(cuU z6b~Zzb635l@@Vvz|HlK7=d~keCY>f{rdPodbwk{Zb~syaIZxwu$b5biYmhUrCx7L7 z_WYa=bCB7PnK)XWht=wwSx3s7FcP2XWzXE5o}At25iWohXpf>;=K59K7Uv?nenl>g zZ(Pf6Qk}=E$8k44jQewTj?ClCq;K_($IBR|*8$t)cRBATFLO=gtlF-hGxB5g6r7Hn zBNKR`Yfp1#Rd$e0>e9!K`0seB(+`OMc`ga5!*`8NKTbG|&wFQ}X0Qu$dv zl@Gvw*rq;(d*C(sZG0tXf1bjF)lKwVR$@HTSxexP4m-ie$?FLGw-4*lP_7hjIv_yvFJt>ByZ65hboP)g3bUlDYc z&qp8q0_ra~JIMk(C09ii`A0ODPvH}gv+G74qc;}c%C$K&{UNy)+WO4(+#QwV!koF@ zhxbQ4IeY3S@=M71{57A;Gx$l@8{iWhhl}*OU=gy{WyiZ;UW>B06H9&W5loi{@oKz^ zCAeB|3--$2^GrM{FXo>y0+rQO{l1I%8Flv4QMs=Eh%2a%;=1bnfgk9@2Du>F5l1DfuG|a z)Ti?}egKt`_pjUacFI?BS@r+zbFJ0&^h;u*T!GKyd-0fj5pU+97%0DnR`Mji4lVp% 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 diff --git a/benchmarks/perf-tool/dataset/data.hdf5 b/benchmarks/perf-tool/dataset/data.hdf5 deleted file mode 100644 index c9268606d224befefbc07e7222bd4eaaae061703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527648 zcmeFY2T)Z_w=IewiYOvUB&bLh1qA^Wc8@_4P@)P5NKTRzP?7-*hzTQ#Ig6MRV#JJM z0CU0|F)J7`d)N2>-&b|(ysC3wy<2tOt-5FJs@1Fa>b-jRTs^zz9COU+o^I|c%DT#O ze;rCna?R!1{p<3d)1SW&0~Muzef3ZMpZigNUo`u>oc4FQQU2c-&E)?2$jNp1`+K#& zpZ_1*1q|xfPflw2&-4E&|Nfa=&*uNW`uD&1=iC1-|8J3iXFq5Ezs4H;_kjESU7q=S zp8Z{w%N!Y$?&0Ny8Fj(ngN@yFpyisLbdQvGM=Z|CzT2f8YO)MKie; z|C+!5KK(UA&HvS;nf$+h8T@zu|7gvBtSd+}|F4#62Aw6{`s*-|(^itx9{;avIXOi+ zrGMR*m;d(zmHyTgg=Pk=|8BDI@A6-Ty43!!RezqF?|&ti|JrruzgYbL-Q9mn;9nBZDUk7X&u5~)?R3;H z--DCYW7)CPnsyKDg;>y>WjzY;WttaNp7!98%Z9XW>&50jn(;{93~XDV$GeMn;#^)i zW(8$1MZFI%Uu^+%9V@0KhcSKPHTbp)r+Ts_4^}4eX+sw8UH7EbpgQy@aFWRi)?nmk zEo?lc#TFBSvAR4PbJjdSz{k-T2_}$H2HpSncDCA!7_#)?2X9dJt19zTvTPA;OY!*sJLq zbS>1-VvH|3zf==rp1&8C{u^cIHiz?k`{mHmSO^{4k^JGW#MY|^@zQQRnenox!u7ib zPYqV%%?Z8f6ktKiQzLm-Igffhe&LLZ0*daYQ)h(;T^0P>hRN-Qla=o$FK9 zi=sL!=${Ga8hG-l?h@EM6Fm8%2)2__>2U2k*0)~-yAT^rIPCz%&KVqXZIXERxdRo; zb9vLXGac70LSqXn@z(bon#qme(gF?Ma&68rSp)d}v9kysaaZ(B|B2a|8a#2@iv?}3 zi^N_}M0_txYA#FVjzPspcyJAm6ys3YPLqfKC~@}w3#exjqqSpLS8vT;Ny=1PIFM=X zXAz#g6LmVhxJI!v)SCLyU_=bouP|oG>wK0v{>C;PONQ9)z?`+2B2>)=DO0_;@Uk}J zwmPuvwFwKn+v4Q1b7-OC#NLaxL+P3swbSY_A;t(nA_viFd(nG&9V)J*bLzrUtl6i7 zpB~rIuB=?-4caekUs^Eef-a}Ltw-_Ap48gZjIUm-#YG>1psgLb`s@&@g>_}?2|;}P zZLQcJ5l!3lbl#s~!?`_A$>24bT(bZJ1~;L~qAgFK)#mj1lhGsiB|05@1%)s*?%864 zDNTQb<0Vc zD>{o6+H^V0?@59OLVYC2Y2J*B%VMRX+LmE0KvDBq2N2T46 zX}Ia*p3^5R?|KF=Dzo_~Et+#jUWU?Id46&k$WfgV8L6@!nuqHUi7oJPN#f&z4TxJ^ zh4HJe3WM{>)Kt5T##P5LVRw7I$ zq$#YPP7+G8wc^y|BbdL~mi2cms58`-H~OZLcPjCs=Rv4{_$ppa&BY9@j*RQnlEoIW zV$ly>K56|52Zv;G@2+TOCB&kCZXbSnuFX>)qFC{=2Kvtp@H*#Q7spyL ztj{rV?Nx=Fm_z0KAP%G2b_ihi^cb#OS-1k3yVcq#4&KD`*t1u|FW zTa2U5Qf($$+{5v?A=H?!gel3noVd~rMg=1|<7H2#x800J9u$@s|Li;{iM`LiA%$sm;GKZ?a&RX;p?p--)D z3iuwX2;*Jphzb~o3qx*;U;RsQw{$jCUKmh+cxUG9@5-iAb1ccw z>NQ*OXX_x2C{|#~+aa8*S|Qul{sxxDB+_C>C6<~R;!bEf2T1+gbr0YU^RtdS=ROy; zca^!nD3gjdp;$N9jxI4?cxdOuU0>cqrJE{m-^t_4kwG-6X-?bY>3nl?ICV#Oi0iW! zpfczo);^7FzeAhIZ+wXgGdSfQXjZ$ORqY+eJ9>JvuqJoPdYdx|U9`*>z z0rD8TTZz+uBy;(q4;Xkh7)PsJXlw2#<}H<{@s9Q^Ssle3M>X0w>hb)r}l^<58$-_=jW{(cF3uuYZ29!)`AhkV+HwP57XkGP$yf%57;-1f(WpLUX1qfHIV;&8QRBUIZ=N#j_L<7X|)mdWErx&#)9KtZANI1QUsq# z;QkF4uqJ;P6f;t38|=sY7@1@n)Qe5}?WsM+2L#wQ9LEo!nQ59rirYsLDX6 zSSFigAa3VqTFF=7$1`Q_EA--|aq;lq8b(F*r|OsCd-chjCzFAR?9AcqgA+ z@^~ce2Wn$_cr<_XRbZ2Tfy{2A9Iv0Bjo>|-F*f25T&DWd*>(_p6V+(^sR|c<)nM3X zLDRuGSog$K)cjH5WedsXX$*(DW<2-j7;|03Jvg<^7Mz$7=atoS0XnAq}hYh8}-dK{`HgV`foFnXOT4X=(u?C0yqx3K4^KlQTahdVLk z$9|bol?H|{bYy6xJrC8j7n*NW7*f}lwqxS?vXvY|Ryc{_i5dJb6Yh>% zit}~-5PN7Q_N`cmH}88P(J~#Hj(J?ZV=`j81hDdJ2K#L~iEeElpr$$xeU%5IY12~? zpPVS_t|ri+-jQ?HCbQEoZT485OvUl}{5jJdpU!76A8r*zFfB;p?-6O7nYtb3R?kuUcq8<_KNbq>O*w6Uv2cC71@9Ffp;ez7_}Qex zelg)3@cIMl;;m$BulU1yfdvk1&ZJl37c^eB;*m9=T81GCy9L1cOEy#LvbmwPCzl3x z!hPp)d_6dWBh3S7_f(!c1J^;xPywIH%21p66~4tI*u`rmGeP=rw9?>T1%+Rp9J@*AEDshl260z zsC1Fskv*0}qvd(*oFQ9z>+|Ng6#h971Fr;oT2!`WmWe+*ySQ^V4EXh(G8d>AASJaW z`ppT$Fa6z_;2 zH}4$xY_h`u!A`2y5O;bwXRn0F@6be-K89?nabfy;JX^uR8;|i>tZ^N|SlTG&DWFwX+al-a&VHM`WvhAZ#rjSdeH!hfG*B~-AR*IGP zC*s$ihRi+&Gw%LcE#i$nL5S(u;2>&^S)_{Pq3vD=S%`>kPoP@gj|RAam>7D4-8 zVehq0jHkXVEH=^s)IkI9m6ZF{n5YM))6F!w6k)7fQ`M{;P@J@?&7fwRR=^>Q+ zaa-0``vV&5Oz5@ElsS{*=)^lB!ybGsrwhd+fgI}R!mK>W4-?DW`?3Y$!5s{IJ1-GlLUR~VM2=J0|}HiL$F({_dh zpSX14)!QyyIB__JUE3*}7Y|uPygi#W+(Mx4UX0O|W5*i~+-97H-T4nii;>E7(R88} z6WC8~EPomd=Bk4oxS?W!m>hc#FAb!9)i4U7o27Z=zXNM-IACeP9Lza(6%Bf&j%}_P zFn)S1vPOh6yy61d`BsVNOM)3K$s*c)AnmL-;Bi9+B3BQlR{jQ@^{9nWi7Q{9GR`Q|jaq1RcE?SI|r(Rr_WR9rRPf$)6!~XK~F|8(=JHA`e zU-37*@AT!ZHKTE($78W`R$H2X4&$84PIRpv#Ul|(tZ0|U{I+onZtz2=>A`&2kj^86 z%qaWq&VjujV6pjF>6wEW=3t0Ybsc)xoD$djYj9uUICdTtz-Y5b_;pdnoA5~(N*is{CDAi1GXSaL1lU$Vq;Ok2kVdHN86q?b5}iS>Y`2JdVA-M$shSjqC1oruWBE zv{cHZhNHaW_9q7+wuI74eh3dVx8ym`R;;qfm)_3|yxOEm3%Nnm{oR#v`X2mnsu6b| z#PH|qRw&+GgX0p;q}r}rBwh^VP(63HwY-SA<8!!ou|2NecV>@wCxvovV2fHyu4r>w zRBqcL3@-YxY(oy+%*{D7Px9#(b`obl`oU(k7t^9$slBg2ye^fa!Nxy07wF78Cr3)_ zbqmhx{tYRTjX%k|0CLe;3>s-cbIVjt+Pxdqaj(SGmE~B_;%|Qj%2Gyp7Gy=wP8_o35@3V??(`D zrVpN|=iurlU0M}fLqWl31h(tP{&zdlyh~?R4Q@|g&p)Uys}dVq&&1_ER$QTV2?sR> z^6q{)#_AK_UL?^`u?s(59)_WjZnScY;<5uh#poF!Y^yY!OV>4be5uxp7Z0bwWX3H7 z^i1G8Il*Zu?HOv=ja&Qgz_i9{eAZLo@^|a-e9vjfjK1OY-n}UMl7mh4_B7P+W68W8 zB5#g6HE&Oc|1-%x`V`2d`GL#{%%OVM&S>snP2=gaAa~82Q_R%4X;mNkPE=vT5gYE< zvP9PI&rs?wRHDC{n^?6+aM-bdbPRK4i`eI4#f@A>XU6i!@f5(h)3BWpnr!%Sz1dEFL^x6wU? zr`a9Ev?zhvXk%VzvrslgE1MIvoVjTEJM@%rj{T;Y92^mjDQ#|`XR4~W^J2QN4wF`^ zOUi8YJ^+PX^>9CZ4TS|0uxnwH=r_rMduuj|mo2xz+&G3Fi+&1`U{3EQOS*;b5S3@H zV#>!<&e1xJq9Q9AR%yYtO=~`z)PcI&mcnC48Usez^7*XKcsBGH@}C;v!+=3(Z(oJ! z#lK|xlm>8CZwm(N?iEvgMsfAk5WM>^km;so^z&3kFV!)O88KG+O%)0^w`O|Qd@(s8 z2L7F`#iQ{S+*)YKE~eUCImeaJ*PHRU%TTU-)eMswkI3pWy7A)ma~SyiD)i=BarXAR zBDq}#k9;ws$!>3sU1EdlkA4X2OfA;Wbzo@+b1IDVKjh56CTeDVT-RX&?!)!>GSp?DRQ@PDCozbA9mx}(PZxEG6`$f`M@G8 z9@od77tc~nxb9n-D0_PlFIq&fnPiIxJWk=__LvEc^yjKH1YeL z1GHY{G5o<`bk}Ocdrcqqu6mD(C08&=;S@T4U4_IwbA)GYA+F4=!_KI2h&!Oc9nBZP zznv$IXXMk|=Lj5M*)UI}aL_4r)?Mj@8%N*bMwB=GRW=LJcQ5o-By!%GJa+j--1yp_ z4HX$Y`@Rs4j>f!bJqm#V4%~J6fWz(G#+Yz5pL-piilh$4@IKaokM*CxdU^rOdu8(d zL<=sRbOdGzeK4bEE84HhqtEtsJaQsbR6SgX(aLAU=Z4;NF&&OJ(|+Jo%R!tTJ%U?G zj$w1CJ>JIW(R0HSEV%p(7b^`pu{=WT8uSf6Mz~UW&H#=LUV)esvmA0iwnU&;27NpG z@%gKVXy&ZSKkIu?b4-!wIC}^~a&9`dlI%b8NgAAVHG|KmE6^&sEt2-iL*+m&VZRu5 zmzT>XE}f4+sZIJ)4=NORi>}s+yi%mh&7ZCDssA0kHMe8(=9WCq0aWzR=6j_izT08P zPdcW2maz+tZ9TZ{S~(mV?b&In9%ns2C3_I}9wV}QvH1ukI+v(A=A=6zdO-@+^qO<- zO`W6KK=nKPY!_o z6dexD9WVCCE3o3$%0O<6i!VE zsDHBqXO>oCL6`=OI%{Clxb`$Kv%;3#dt&Q>v+%brhvK_6_|R!ApIu#!h@@Q3>TnL* zB;5C2XLat7Fd_T#W7!arC!*H{;l^4E9I;Aez{6T79@oLQ*&}h?uw3@jS`o7j4Iw&5 zvVZngX#Ok|y(YDU@>@AxGVIN`yNO&>=g0dUd^zD@C)U)@LBhGQyy)JKCvtMB-c|<} zFS@X8mJ5fr3}I)3MHqgn4?C}lV*ct4_+fff)DK^W@nH|JEZT?flMHeC$P&z6nZlwg z5(aR~iWAP|(DKh{>>ocHAN8%ocyA{jH@Ja@WzG3(T7T{cQsb3Bag=!m^5ozIZXdTp z7}uLJZqFuBn;~PDPELGNY(`0=ICp>!dki@x`u5W2rta3v`#cHFjz#n5*g&=%X$P(2 zN5zemYP9NS$~h0hvFPL~%<7tfl@7i6;P408VEfMe;XD>A8-wY-dXm_k9zglD&aAQR z&h}4hh2?D%jxx|;>RYL=C9ZIYQlpl`G`Rbn!rJPQ95__MAr#DTNM#(}UvXro4XrqR zo)PmTn{9h#F6AXGyThyi(}g>aC6uQIy9z;w*ovaQs?46+f+c<#aEwY5BeLs}yh9B}Pjfho*RZZGunO`?wVDgTd+J;?k*8? zie32P=u-7b%w>;mY%Nw2YExgIWt(|5m~Dx*$H%9gfkG zOqUP;j>=TCRpQk4S`^esKJm{iM)s9whs+o780X2LbAq$3jzx&9 zBaejVu*j_yj~}<;sIPjEUsQqAY&Z5_JQ!;~+{09#ws_t*mG4#lpj~*b6qeCLr<7>y zpI9Yg3s>N6-$E3HMzO2HKG8ZTmfctCGFhn~EUIgf8Llt+Dksox%_!cret;X6W7xUx zU@pp5qvr)LZtJbW@fG`U%E^%>;p2JVr~=JZ5+%&L4SWk+ne=Kp`j69RYF;FhCd`NL zmeDfnb_FST=FS0@XX=9NlR z7}d+y;pinP#_=Xi9O!Zk&+$u&#U{Y#YcSoOCUb1#FqS=XrFE$@-`>yW^6*|9tq={x zn-hdxP>v8nAYyf_=m;QRgQzhVy(vs>}n=U=kc)e+oUq|0B5QhYQ| z6&o)uhTqec3@8Qr^d80u&+SLefwF;YBd5Sry ziJXv~&m>!UG?qp2%k5r#G-U|XpG$GZwn?0PI~2XXnlYhoEcUI>gmpy-=kDEzz(ZsB z?c7s*J9+@0uHM7kOT}1TXorxGPW*FbJzfNth#e~N^jPl1JdFZuP3y$NemBwah&={}aaYru~ z2L8z4v9qN(x2+YAEUpqBV=o~8uDPa;m80pf zvje}J+9DoH@xYzt26(j=SdcrKrj2oE+3Go#q_*Xf@^)ma&F3)+Tp{F0Nz^WD-I zdPI$<*Hs|xNCaCpmEgq$Mcy~qAgcW~qVmspe%?Ajwm7R1VSOsZS>2JCJSdq@3udFw zoA)q?(MQ=iJ=!UH(lgkBy5|Epse?OIJmTmdnS&1JTgf&r*)NK7%S2GwFw|XagA2zc zy*Bfw=ZpZfFRg&d%m^L{^5U8&(psS`#aE);IChf@ZggA-r$MiT>2!JC+u_IPOC5Q? zR<&)3PEHY&mv{mmmR(pI^a!$fgLyN@mZnNQxxGA+ z=l8kbDy4ngPZ2IBV%auik4UUn;{F8}VIQl5^&V-wx}?BC*Hp4Im4D%D&Lot#CVR$) za-d!yn~JR9G5aiB222qv4<3W!nlSD%ibq4h9(42wqOr+H-WioZb@}1!DL)sFH#pJT zH;Ye-EZM41inlHA&2xKSVdLykZ1!U}@>ca^f9EiIw)u&^vy`divR&5dy$)j^W{(Zk*k_044`diPMU9oH5W8{r$(&$~p?a zEWYAI?ov#OYKIHoTC;I~0p{qb(QJb)99u{@!_jG?vPUe8@4Uf<+xtYG<{D&L&qq&R zD;`bhjE+@}2#rpmYN-i6eaq$jAw}r9*PCPXZbHAfnd1s+t(f9HLlh?urojatIxWxR zB+YbwdpVj{4@|?*;d$IUU^Jg>7)hIA8|JUm=3(s;oV0V`^DZrDTW!jK^UXP`?>ES0 zuS1?;lhCoyLWGqH-|HGuJ!FlTbh--m__VKbmWgof1(KJXjM}gD>jsFt%?? zl)T<6DuNw(EqWZ!G#!Ly(M3!$iQ$Y4J*-HZ0gbw6=>9E++U|jvA6SL$9`A8+`7k!T z(c$IF8yKfE9)r%k$K5Z>pf|&p74PghCu|Nbi|%}|@8FfLE9%FaG!o-7>UZz4`!aJM?tixCDHOMoGXYP`6 z*-q1~C_A(n1-)GP@M$!jWHm>ggCZWd{De6F5i1*dvUt}oC~w^<%e}Y>VXxhJW2`1? zpLAsQpM@yzEXVrD9_$n|gexS>|5=$5!Xj+wI@gi!pB7@aayDw@4vM1caLPNB3EyWs zF@BmURg43vDlf$<-PejAw?gUExjjQ}d+~0FA|}V*fm7&47)acM`}yNplxj@lNXgGs zbmp*>ujp94LVT?FgsRuY=rTu}TVF?T_}JyL(semZyQ{@tw_@nkY#}CW9>l$$pCQrK zo8~h|u$!4DD^(=iX^0y;pY2QIsOzvD^cqhRcc9RzJ+F*Eg$HHc9Nw!Rn;H7^^v+vo zxVKB(sXB<^S&gDN>YQltE`!TeI&u0QO?GrOW%ZgdY?Sy{(JT6Mz|%{x$jxWUfH%wY%F(U5kPmCy0r1DsGK6-D+vlkx2yk`cBzEz003%a%LjDyXL*(tv>pI^!1;$q2vHa8Kn z9b*{L?YZRF$?@ZaE-;iZp@a1rJiK5NUY+Q`{%+klAWelY9R&T)Zj$2W#n@mh`CPSX z?EIxQXTF(-sk?JnyJ;w$R-1EWn41X74&(CabA?>iK*#z6<5*!&{Z6kWM>wti)07CP;*GeROP%UYN4d1is<%{Nz=Sa+B3i-0O}<4Z6_R`-ynJXl`-s#9fWr z;;DpxYNn^bdc|=Z#vbf-D?;zVZD{o|h8ySo!i!K(XdWTkFKWY0$=1BQAb}0Kw=n6; z8<>qy=h-&hxVc77HrhX*wO5<7T{BaDnz|DE52_*J=L0BgFy@kusr+GJgLCUb*d@6d zmD2m{xagSZzxod{6}*_$Ck^9GjhGVr6EpiIbKr!dP}P}&4WI9ctI4HU|EDjqo=LvT z-fmQSU9xn$4An)VbK({RvJn|U)x|CcsQ*=>UptGjZBRXb`=lcQUi7hh;eJhwYj`>qO& zMWd%58@H|!PnI;I%Udgv{M8B*KX`HHDv3|BZnw-#>gU^61DY+&r^Yrp23?tktM4pW zSDnlGdd=8p#VK6RKZ3eB+Az935vfPoqWPr0ESVb1#dVR4*c#7$?dk zErwrIvO(s5X9f~aj^o5tBbc$} z7+%Z>V#?vxFlkIfpA9BVjLdU<(l?CXu9)%hhOVr8)Q?BaTXM&X0!-5DiX%=pvB^#z z@1qxCQQs`Kxoys$&C?n5!;2mt5;@!4UpD%u9eWlB)GUuJv0i6HUgwsQw3ilo|&KT*=%qh|AkbD$|fn(TQ&5|RJ zT}N7L2U;IHgY9EG)3d5XeBZCd>6=<{(!<{v?_-B&;jhr;OluC>;f>d)#`BT>P?}_q zBm%aGwO%ozlg>NTO*Mh&(}wd}E)hR$C&=2>PsYx{F~YUTk;);StQub|A|EKTTw13~ z7FCGzZjwz|8qB!bC3t6)z~nf8(XPijEZ(7yx-tb`+iuN!5lZOpEh@-@_aO0CzA)JY1xV`sgp_?Ih?PTSjIVa$2fuzO-Ijt0I|lOecq`fPRVCQm@2)Vr*O|8$#IyGJSWNDu%;!0M zpr;VaxU06*sZyoFp(2^z#oeg1c?z}k{cye~sQ6Hq!wjOhz9NdPZ|blhE}uP;BKYg4 zp;!_9RE)I#fY>M>s(JhZ8bi?A+7b6(+wr|DiZ>d=Ic!sJiJxrGl>5^Ddv6Y&pMQuI zUYS(gmC3sj*J7XKyZVNoMc-%MTy}pbt1kpg?MykrY#f!x+2Pgq93H;Vo~t?!;hs5H zu;PgVhc&l=!^7K{ov6-V9iy3}-i;3ieTK)Rr#STR7_;*a5Fwu=3DOQPJNT`*k|8xm-0$`_9I^Wl;?aoBkh$wHsGJ^;C1~hTx_1lxoZaEqJ9qll&?Xr*_ooz-Uur7 zeK|({AjS_*M2BXxaKHKt3=+zPhHMNImlTRt=Q6ln-G=wK2lI^TKpvTw!yIcPIBh$P zpnPA<`8R$ASF?{`fWCAMbmrK!+3HC3!w{}S!W zz1X|^bJ#}3(>!$&GJfmPwpj+>4i2Q>fYma)Y7^McY6eyRQ7He`h6)41c@M^_ybi%P|~ZO{%IJurjL*>uxG>Zpd%6^3WDmE8fEIXe!V@xHBcxdQM$xdm2mCkKa$@uYOk96JxNnGnOg@s1!3*%BSrfb-Jb;^15IuIevEb|s z4D}+bM-DOo?Y<)d#j{ah3YtF$A6Oibt|qceSqS}nYdIqnuArX_)X#rc#b}WubO$h zwC5J&?#_g+>RcR_)`eZ&a}Z!2&Pz|L#N*$eWS=K{GHl8MEEQ?IoSVx1ig9e(cmuo7 z_=|)IHf;a(5pL!cAw(+l z%X14LKky!|DYSyW`(DhtoIvB@X7t(>L;G9$Y}K&^Th~~zsMro3m7{3zES0xAH{t1; zII4D5qRx&;sy>loxnXnBWw9sUza5X3kBY^laYvyn*|Re*H|O}c2t1BhCVG@Ek>nW4 zud>}p@UWpm-#w7a`i(=Xxomix!4?5;v1wKZwjFv2U3xk2XG#)>FMo}RXQh~foei^g zCedM15e8fcg11Vkm^^h1%+EYR*H(X!F>W+X3Ub)*@=wRA>p85t3`Q-UCd(Xt58AHr zymy7NM)e~&c6J=CyDQ@6OfxQtnE*NE7OXhA2nJ0Xkg;nUB4QU|#j9iZdO)5-TK3_1 z3FkfQoglVfb8@_GU4<&^qZo4K55}A(-yB?oybr0=_3Fr>wkEtI3*x!g`!Va;SpGQN zoHbG|g{%n>Zh2lt-~ zgY{%>CR{P(&&|VVy`fP2*ft3_Z@BZ=AO}`C?0lp;_HWv_-xgK^=Bh6Ua2_}z9n&wo*{$#{z9Ui4!h3V zf*yD5cx~Kj+#EBGCh|w%?EOm$NlDzXOl7Vd>d3$w%~^SQFk3qYAU!;oy{@<6cUc#i z>-TAxxbzX4o1_WL)EX>b@B|hkUgF-JAera1eYjY>8XGEI;rM4d<`u6Lr9F@0_!=L6 zTk6k8V~XHaV#||O_r=t(1|0G^2#0NFM0R{OqHEn*s+>gspW_+OArr$2zv6VrT=e;J z37;1mvcjPlSF1+j*4=(o>K4!Eu4#x2u%+{#Y=#EL^VxoR_Acy6Gc#@OvaCR**z1T~dN$D~_p;HBDvPj)n*wObp5s`efjYV7W`hEY4`Ec*#y$?=Si3If&{}1etai zr@bA(n9Vn3*C%#hzb$z*cdo&Rq*?eV@q51A@}jm}A(kZ?(51%~q)a~~8?mt?T83G1 zkCcm1ljVV`F0FWd>@+B8o|DbK8^|B5l!?9_(Isyw4!I;Se%pH4ufq?pC%!F}57}|1 zat@a^=5g|g59rf8kjT$~s`4xN4zpmV9fin!lLMo9aZFL$AjZ^r@?Nnrmsq>;hLJo` z@I{>T&16T3BjfS*wCu;Z?{I4+&(z78Jgb>4E)?o8y+D%V{nq0A&uVDbnPKuv$+yT) zz(V~!u#+&z8)rn)sgV>F6lJjWlssig%Q1`0`AhGJl*rg%;9#+oGn0)xI7y$nM06m!jBf zsV#fj8nURJDQATL#+D;VG`z73gC06CtA9MThw7m0<9spU+d!Qfy~L zKB6pIbC>=Qo|Jgt?>qfL(5)8O|DnJk;=yznz47Jv6$)IU+aPNuSB#O*b2z-d1|d%6 zxX_^(r!RdGeV!OfwwF5B`|Gj!xdD#8j}&=A!GIsu26Fv-SF}DYTqa^~`AR+??Z zag%F!wQ3N51ZQ*1#FKFDGlolVC(?1QErTWA>O1|VFyA8Ot_(L@&trYLp!;YxznxCqjJv`wGLkJe?iAwaG{`S-!qO%s3C}o& zB|3IY%T7f6SSg;b?E!^BmK%}XD%~!BrN}Y2i|v6U~Os|x4$((jK+1uSXPTq z$7>~ih#^kJ59ih>Nne+>!tEhrI3%$a=NlrK(xwCTzR0*;b`l0p^Wpn`zN4w?F45(7 zTg+*b&iYC_=iGh+rD?8ecVH=v%c!^n`$h%_R-?V?0CqXA6#9Ka0M*6j157+>C5 za`UH?XrJ;9DUqRQz%q%)-cc)$?bdbX z#>@a}tkdE1Pmvttmca>b&cdqS8kj^b!HNOxnHaDR5zA6=G}4Plby9guL&|aU?<(2Y zl0P(2hb30JG+t>emUjP$+LLk&T-BME7VO6L=BFIDHg$tfzmc4I%z;TY4z%kugbQq~ zXt&0YOLZiy>wPj*wl2eS*9K@zcVXPz6e^S~kVROuLP~im*XvnwY0^ke{v0iozAT63 z*a&(^>#!{DwwR^pMH>lMx7W{P>9-7?$u?xVPCR-$8t}ZUGwRk}!MzX#CVzS=>o~6k zC$FaHV6_8-s?69T{Sb~P%JG1;LDtB`j4w{w3(8|=hl1iAxz@`Oq(ed z9FSw^{bB4pXgQ|Lb)x&ZU!rsJcijFM#@NU-+Bi=^rIeGoIL)6ij|X$uXC+wddW5JG z{ne^XEEQnvl#N6jPi(~ivJ_b zf3^m>{U##tqcVqgH6eaAVDc&#?C)j6_dRwZu~eVKUHh<8up!fK-j&t+lp@Z06~-jB zJ^WLM~wMre;z%OqB-Pz1@2$8$DG}EFk6|*KF6WE z0c<_kj9*WFm(BY5RLEKU!7_>8IP7RkE}QMk;@F+o`B0PRFHOXY?`IG$#W31#=*jpZ z2Pu9W&Fp2j@nny*x9fG`sqruHwyYHOZH98>SSg?D@=7G$>PP1j9umH5!o3!KxJcqZ z+z3*`#TS9t+3PKqJojXltQP_=%X6rd^RsDaK9*d$jMc{N(9>`u9y(6M;OhIR4U3_U zQ8d|@#nipeaYMF1l&%0zJPqa45$ExtMMrL0OuAK!q1*O6Zjj!e?}G;T4E`-9xRoGm ze`|>^@LkHsynr8tudz_d6^XlO0gbE8up=)W&5YY~(g!z;GFISq&HF+#G@muCTT8LI zl`@Z0y1f7Ru`H}onP&0hXcKQkj}@wH*EN{c4gOfWKU((alN7_=(1z*7dr(j@f}3RD zkbKdGzCIVwwZx4sQ9Yq)rw#vAVX}AI28wn&yb#)DB;D^*X0dS>e%v`Hgn=_}@Bb=H zRMhAJ{+{Qjhm$0yt&ldzW|9}2~}E{>4QClY7pN#s?&FOi5p)9R?HdQ6uIj5!{Uug_teW8@Uw`;P9zMn+B^%r0p zYbUPe8!`6gAj<8R{=bCj_#ZwG2ZP>@T8fA8d0G%vT?V04%I~tT4#2X0y|Jpb3aljC za6svHG3Y*sH~QQypTs}+O+`twUL4+YC2q`~hegICS@FAC+*q>_X5H^%u#}^*@|!0f z{FvzzUOB#YJt`-whVE@R;$duCRh#dP%*FnuR+ON*1GxNa)5`2>H? zEyWgz|GHC4hjB&EvChzz*LIzTcYldj@7;&3UTBGNlX|dt;Twz|rp6ZSU&+1>EE27{ z+4I40KYlB87Qa*nioK1M`0(Ngd~N*jAl{C(5+}ayP6GRetwBY4E#=~sYgrPCy4z4fR6CMmvt=@5Pz z4X5(nfpk~i1NCXUFx~S$hIJZ-2&2QW@Rj(P&m0*)^r_=(iQiOjmP{XmuIxK5n2V2I z#@d4oK>J(bTi335sAa&7>DugFJ6)X2T8ck=Z7}=9Z(%nqmnWq7#5#$;zAIy}?242Z z(QxS)tR!CA{RKssGUNqLNx5ordKOZyfHyOrABF$dD1@yxWb+TYv|SN_X|>1jXjdK& zj%dbQuZxHY_K|pDG0L6J0^Q?;89(awYtR?N<~Gc_em@iDFXuCd9rk?k>YgjZw6g9>mKn`qAWKuGnr8%+%BsV!MSl0&jYw zUB7EGm*C4t-3HkADq!l*1jfpjg9GT}GQ7pX&rPuLm-g~UgJc8GrlacsI zpRcQHMAmdisliRbx-J>Q<5wD5d&V&5wJw)kwUs`#576FdEY`?xz}b1C_ljAm^oWn6 zW%)2RYzu{Rl_L-845Y`pJ6NamA6lE=g_hcBG}Lrf6dNc@4nQ1VufC11^FQLA^mh%r z^#CgMySz)^>cGe-fsgH`iTe2+Y1n2M6TEJTZM8jks?TIhmHXA7?W*wLq?Sn7_)0vj zFcf+R zu*)Wv-`^;>?D0ahlAee!wQ~?UP?d8(JK|+be-2erFsA2qOo1~ynP>5;d77BjdIu^j z(pfr2frdGn9CY6oO+UUzoozGTc^}56S$+8UKpF#!n{lVxDXjVS6YtFKiyj+g9>Dkn zie^@0+1QP69DfFr3!Bh#)(;%)AIB~c8Pp%P9K)`yfy!+q{%w66b`C|DKOu%KqK8oT zTb*#Ror3mB9`HGT9R>@k(R=GeBoAB(mnv_(42+h4?j^iwaO3@wM%2u@hGq$~5nUY1 zjlS9Z^Gg>)&NicV$3r`07RGk3%z0?DP(_G*u~4|34dSX_e^L7N2cjx<_@~t|v398+ryibz z`}^i#{mmxc+shOte6tTLQ3mPl_L*JU0&@tL9emU6jBsOEsnGviR zlOgYfv9#aOm&>%jh$bsNSo-E6roM=v$)gDA^|7F~SqVz42QtV&m9EnbX?X9n_`F+{ z!JAhhW?3-X{wu(z_zpA-mpZaaSM-}bf>DEHZvMV5n=Ed{KF7!Mwy_Hjn#ru&E^?wy zG&}eh;rIY6x>mGe*~Z^E5oCk*YHF-cmwS|FQcKW0ENZ_w^K8&ZF(ESszEW>Hf7%Ck ze9wEgQ*Y0P_0Msq{cV{gC5DJ&I546Mx9#hQOP_C|Yl|A__PB~kt1=icA&)1OE_&Pi z8cWZ_9^COg0BwdCF!QMbZ=$!uH=#40N}XrN;ojJKVjrG$QsZ2i(|Kf`$ElHtm?!tD zVMD5L)-RBGn$mapF9aIIx@F)hImAjf}FXg?m zAJd-&^KGPLgDCnjzV;iAf4YD%2bUq`PA~jSw&l*FHhfevkZoUW#pIdCF{-Wu(-FxG zhb3Z!MH1I84yRr(>%TaZsQeWG$7&Dfd(o8Rvi_b|uiJ#PV zR;eo%%xw_t*;=vZ)i10u{f*=qnk+xIPCOgbnIod`3aMebKzdQejgb}9T0O^NI z?uFJ74e-ec!LF6nVnyr;5m>(+r?T@|Q0F0Tztn(XCz*eXiV;mT79+oN4lOEYiShoQ zFm0b3Pwa?c_`T~;?C!t=Z3nUA-VCBpmH%Cp+=tROj2L_#D?SBtqE`x4z2BkY%sp83 z7|0`Mjo2=t7i~<#dFR$dxPG-j^A%f=G0jiBiJQ^ zq3*HVWRl3l+G1RlcZ^c_7;!1s3!^()uwq(E^s7y0XV0eeo4OXhZ|YH|HHc=Cg)vR) zUbh|%;@my;c=R(5li!VG`N551kLMfMx3&@1lry)X4JZ1 z7GAA{gWP@h@Ndcg-Y9Xy;@r&yD5gX65KG zsE@cZ#-3-Q&3SIJI**+R;kBZvNC@dm`-AfLdwc~Uf7F>{ro~TP%^1HXpGviX?D)f% zcJYZai3m zMoss%Nd4!}`dKnl)@F_3d|m*59PfyK-jmSzX*C8lSMbrbqu3LD7n3$?vuf%R=y)v0 zf3=P%du#&p-Fj5buf&a=D`3;~l}K>WM)1wiwC*C{^~!>sHUxA11vACV=|wyZwJhe#40@7_@i`DqvDLcwz#0&5z3DO zWwvG)M8p-?yxIVteG1wb>R`jXo|s*72cKT*a_7E0UI>_veRjh+rEdgtT$OnDxCu|M zy)JCl?}ge;=?VK>fOW=$dB!mS29wrd)44>xj>)C+u52#;A>Tha$xJxrz%O?f;^q71 zEHj^gtrfmZZ|MSqSsPKbX8?a*A0#t?##H=1C?=d;j`YX5y#LSw-_GFM z_EzjIGn>kFi*PdkF#4QH>>NHtG>mcP=M!hKY?BpFNOp<0Ylt~{tRR0nlQUjjlaBCN$yG#zdl;$tue@e z>#EJg^Iu!BdPyPs*AM0M;=gcA6Zq(4B1-zSq-AOeistFySzt2#FqknWt(mSeigtaM zqRh;h?<>oJh1<{r!X??a}Qlm2qhx+m2{PwJ^*n!!9g1F*AC>O|l+FO5XmQJt2gcZ&B`R6tS!x?$pky|c~=g~-8(fZ&9(ad8Zc27`Yh^O?ZCiKFlB`3x8 z=lAgN+j~(v>WQLAzmOlF3!Ztl8c$8U*f6{tPxG`<^F>2UA3Ynttfco!b0%Kezl36Q zCN)pqg8Qlg41c1B6#2~_sj+0)n9t&$r#_BFF2Om!Qjzd(1k0whVrHd0$Lf-KMQNA# zayN;Kq~HC-qI@}1Wn#d$v1~2xnC3l>36=b-c=_vsXprBMYO4fZIW!Qvb~l5n*Et+s z?#bj@U(t5wS7b~*hhg_Bv2koXueSOR)7s32p6zOc`gLQ~^{HaIJfAZEjivrHZBEJB zh+NN9Rupd(9XB~~Zt5`Uw~R-RG(D`Dqf4Vt1NnQPCFjnm#eu(OsQcqZ)3O%ac-lqS zy~{z>^)R;Y;*H=DAy{50weq>|#C7@o68mWYAs8=gl4N!qm=@wN6^BS!2hzdvEb2ZZ}rP zcjA9#udvqTC@zg_ixytTaH9WWar=ZadsiEB{%|{9m+YNRY8t#d#foC+T)1BD&j(-A zusFIaf7Py343!=*>&Grww5c@{%x>d@sxHf;&f!vWcly=GFx@Pdr_&~j+ZEb8InJG4 z-8$p#Uk^Uhv4qa>0sQdaDyTdeD7CuRweKPRQXY@C8ja3# zyK#znDi+MzhgUTtIHkTDE0;_XEsllogqa^Rnca(`t14F5jWT5wBh9aASQNepZd=nmygb9n%NmtdR|M23ugC z^xqgMhSJukEgx@Oj!A=)sB?ZaJ-!U$`DXGxsualkLzLxg?#^kedvRKGvc(TWcsC>> zFEgHoce=rh($BiR789@K(=*qcmTw;`%BT7B+M~m$d~e2gBmZIwA7Dw;Z^fqQD4I6= zhw)BrcrkOU_)?Gw%~ipYQ8QgUHM8W5t%cmwUWeU|4`O(lIrF@32*dMlG5Dd}#qA!i zC|S z46GWpPnj_=m9&rS%r%{ z`m?oi6b;`=ujPq2PV%kC-L*$Bbn*rm-dhUa&U&14R159KIk8*iC+yy7=Uv(6FpjKk zP7Cv4Y5+iloa<_(69l3ov~ z*JWwPGwRYR7)#Bo?q(}aRoJkiFoYQmfixYZ;DuB@_|I43v!W|FKd>b$@A{zTfie&E zDHVq=E*9~7e0bt(U$(EFjG@o=V}75jiZJPK2{T%ZSMuKZlF_qks?;U7*K0zOa9G(| z9V!}25iNCd}TX(#ot0H}3ei&JY`pknw! zj9V{#-+x+ny^?woO|D(R{mElcx7(kI>k9eyL5X7O($>)1pDgYse8p<%+p`YQ;q{fX zMaeRI#-xwrzrj~v_0Lv>6+iS&nwHBualw4}$w2hpmcp7R)3IDFp5F>!Qh}3!m86<(Is`1n6>DGSSR;qEst4q zy_-4hujO%{l?lC?KUEA_dkMnfE!wqNiPA~N+#X*bj4TsraZA1fTZZ$teDAmF-j5e^ zr7vcEB6Yh>N6QZ@aG*=An7VA9xFtDpCQ^IT?0FNenKpdmY|mb=^r@5Fkz1BcK}#PM zzKB+%`i%wX*XYR0y()0&t3K}s3Mf6vX0l=r{ylC)6JIrc(6?dG9vl938Yyb`m@>e( zQE@~vay}Kdp~}D3Jg|8Nnx@Jf;N)a3`;f?SS`QRu&1YahlQ8bDH>K04{WvpTNwKGB zB&%Np@#}djj(udqLtY<+dJhkp<_^Y4OI>d8?8CNRP3Z6}3*Ulb=vS14PWS7uY2#|V zE^uRvU4N00_6a+Vr?8EKxAa%2F;B8H{HCe$lFUAInDrX*f5V}sClEH@oZXJObK?0T zWG6{3h;lO3uemT+=IBQ272?r{*_ho{@{`u}V)SkwG*_O8M`}}r>ysu_36V2z=Wm#) z=)^3~Tn=wG2rZ93Lx(%AbX|A^q5VhmZPo%be{Re=<8f@!`3LfM2BWLg2k*t0bAm$? zJ`1}9ue-y!w3j-abWD-*z?-{glDQW{8Gpl!o&U6eN?tZ=vp!0$%n1aa3t{O|Z7!5| z>fiabu*=&8t(&eqp#2Rlt29}>x)J?`O~tje*4Teovc>`qY3b@ID@<2ji#BPmI25 z#;08(v2=1O+ge}n{_(vCYt5qR@+gihvfz$^I(%3$m?PIN$HzC4Gve2i4pm9wVT1I{ zniS!-wjU>5{D8KnBJoq6JDqaVXy2~`nzU19le%?yIWdTrXL)kYkx;giy1}b@$-S$( zD6ag{rtYXve0*^WRwjGIJ!Q$g?C-@&qYPg8<${{g<2iayDbh9HVP(!@*i_4GipFFZ zj*8{j0Ch#d(|Wjm97j)ir)IZFKLrd>76?Tc~NJ`Hu>^LTHrH@9V9!J%}?u$(!P z>GqNtY(E-KM(x}*ntHeG7bbyfiu`B_k}_%klCIn>U! z6Q8BFP;EOE5C2}qu!bN$8&xhwRH@Uyy%&FO-UrKl`|42WHvo>tcoSP9G)}Y=D(+z%Ic+sOA19#y>ptxC zs1JOD?ug{dbP+VZC2t+Ni^QWkB53$2T!#}^&Haq$<}dLX5~Z3ZE6X&Oegcnf8_INodzc`! z{qh_$9M2@XUHDOb3A0xX#-)eeJnz_plk8@o{m_wk+Vnz~(Q!%5aZAkgE)&mGpDSW+|3UGV8{*zQLyjDN18pxvu+qIhb>#l@)zfFFY2SmU zNhRV>#Q;XV*@?#=-iuyp(UJwIDz)wBSlH^U)bb^3*02W$DGg$JspN_lx$tOxwB*8^ zK>UA)ajMT498#-8`R1eGCtu0Dwh`C9HD`oYbwzIJOQd8@7s3 zmZ{!fvT~X3+>$Z6C!rQ;A${#y+}q5SyCQxf_~w^YdL7E;m)^)+zBun;Lx5 ze~bd5%BXjF^pJdHMUEj}-Msj(7=f zc|1|ph6@G*_{ORUFG!D&o=cf{5u(Zbb6OlbCtCEb&E@gKfm~D-izUK}%d5L`OkXWN zoTtP47gMO$O=d?VQ?5nnV?-QJL&WbS4sw=DAtx8Ki5bZUr4_i+I+eqctR;_4hoJ#m z(D`(8p7uD0)k@*i^lpImWgR+2tirm8d3bRxge@z+!Y4O@bEf*T)zgJ?AJ~>i_u#9# zC;_#zu(7(Jz+#7WgA%|CDt$IruC$xax zOUX0!$&kGAPMEm6PH4Ps#n(wn7=HDfV&7O}M2XvYd#pWQ>F4uruQy`WI}4hYufUEQ z<578d7jzq2Q(tmfBh*|mu)QT7cIt#w$>Q3V@&{k+Bu9KtKUPUC+GcG$w9U3&Ey&Vt<|`Lk=0I6q;n@Mw7%<#N`1b!s&t1Fyp3LL*9tzs1?u(fn4uTRf<1 zh0Yc!yV-N_5)gMu)@^oFn~mcNXdJ)j{d|TM-7w&fno^ zAepVzCot+w2hMgrC6=o#!0LUH0sOuxhXu?<)b_#R>lW$b`eVezyIK6xp#v>-Td_AL zp_P1_7rIORtmP{x-J5~Hjwi*)7nQa0VfhYXtZz` za~t~eXiYo1%EO8qrxoBy8_)umLT7QGhq3)bH!$2rW zzU29(4$L3n!fp0eRF|y(4gZ>9VnJVq{3^lBLkqCTy&jQ?Gf~*;3f4SbA#99VaLkBH zxYlkw_b>OSPTyaYFT~kRI~6&{(VbSBhvE1yjyI(DrDUELue6F4um3aQhDF7S-&c*eJ}(j1OULnm z>lpN{mOp>_er)-S9R1dZZuiI0_U;L^IO51oSF#jwA@i|$ehZd<%*LX5X;7Q0LF3dm z{28i4wR1C2pk+nJXI;3Vzw|pd`m!=z=6(#qq<=ucDY@?as@s8C3mj;+az3sbuE2*D zdqkO@HT7m_!%1d+O68vAlJq{&ocy{#cAh7(Jnko>Z!!5d+{ZajkOb-4S56&t>2QK`D0A{EjPyzM*w zEZG9ZhdB0Ak4OBJTpI7+DO~b$IqI+#^A4nPZ*&^JI*n(Hg%=lQ8KTf>3=co7MA{ll zCic*l91CN%ov>QeY?+BI=Q4Ppr{LaKshscJ14qiOY0>X2!U`s!$RdX)qAC@g^M`Zr zsb|pI9Lx*%<9PYHD)-G_jz=CYtlyN+-SWF0q8N*YY3)!W_j+2dq^4)O9u+dH(eKP^ zIBV(h;E=JrxpbxCe!4GAZ>6Ak*&5`XFM)t6M4=DchYV%xY)u~esZQUtaAa!sV2ooSrY}B*uiJj$ zeZ2~uva3X|jjob^Bt5{h?&I=r1xqd_@z$Fp@%&;h$^YFB1D7K4zE(@__?E$1JDKAQ z*Wz8}K`g8MhLv9SY}eHft2`SqKc*G` z3*3N?j*^S}SZL|Y zAg0R9?ilV{;-$FaWWuwON1*dP1Ga0FSZzLzl>cTv^Mvp%|3v*3wO<2f-j zo6gg(z*h1S@3-pAlCxWJ?MWCjH*{phpM2go?8EgxGdbsdJep3{`~Mxq79Vq2U!8;E z>>FqdYAxA@-_ZJ-0sAe?5G%(fa+#l;(>l*qTwdUai8muzGv$@Y3H^xd$VN1a(x;7N z*B1Nb(#H)czIW@UopH~Vu{;9(eKsIse`BZDW+z?Kpt=KNTW9gAPX z__iOGY3uRS@G6Y_@DBeuS727zF`S#A!&J*F$llwQo7}_cdrQvcK@KcwwGXZDNq+8u zOwN|G)7I;eobtnx-TjxNKq-sEzHWoT)gG+x;E#JRH5j)jjoRZoAldo8!bWWv+$JoM z%-wWxvwI#_Tri_)*f028{Ro2|t5ET9IQ+Y`#Gd0av!DD28Yh29&u$z%Ml_+O-zuSE z(2S+VJ=yK~K)O5Z7s|s^snPTaR!iOHK!Y_Cd$}-5HJ^$C>ES(N$)kz#elt#IsO%3J z9qh(oKc+#uMH)W-nub|#<$K>wa#hxk6OiN}kE465$d=&bbBU$k+oPpAF?w)GRks+tV=k=HI_mkl9`Ck-{ zDw8p{t3O|EkexZwD)92N5eElLCcgP;jC`rjGl?zvTe4&>t&FBa_fgb3?1Bd!u6tiN zyce#ogW11X5}#L_vUpJr&lZ=%dPN3jOAUDEz1QO6o)~&=xC)1x7o|_GHJ#q?gOTe_ zsVTh0{-d5K3T#T7-_cwa_flL5lX*?QQW$u=6zb#2-=5NE*LNlAa=P)$wlHkk>?Y@O znIkI8U`G?FX}f-tSwETG-Fr}EU;Qh#MJ4i(+I(zx9gheLNpvj=t8X)vhQB#io& z%3@bJXE$ENkNzgyddUqp(s~Fx$prUquE{-82e8~%kCq)>=n$*Vq9G>Gxx5?~J#LA( ztIc?(N-|dEtTs%{6YErNirLS1NsS#yzZfX@Ext@TIziE6&|a+9*o)ob95$rNz45PJ z*!)=PdtvgMxce2$Vv-p!_BGy~G+4 z>a^jH#Ru?T(?PU27>m+YU$Ci3GRx$hda+mbbBKD4Q>?qb?!8YxPvE_OT{KreQ}LxaFv|(6#xF>&0U#4yxoJx z{8petxnyc|-3M>o0qj%NhnlMwV6EJVXU-kZLa8NBk=*8Jjc)Xu>5BGa%0zed7&xaG z^2N2s_zF9Qe_JJeX5VrB(jboe=*?w@8&PLckE_kqxpLYL42jfd={7yl-=sapUTQA2 z>s)sHoIs0Ci8QV2$z=abUY>JKlABiwQn~NI34plOAs+&(4fmy9eX`e|NnjpWhN5 zmgi6=bNB{sEqMK6I7Y`erF%vgmqw+q^BQ%kN2XBUVL7gD)aB-a!JOD>K3vCpa)bXu zC>>2_zu6fNvya0824Rf$Pav10j_Z1()x6jmqy;^LPr zSZXvKTlHjCHA=E|Mujo&lpU?NbfR-sFZP~Nf%`8ssJkkeN#~^(bH`G-`!V3y`>`yX z7R-i|In)kyzW zVcnZHY`Q^q390z=N>~*4m?;=PL}nufcjm#)54@XasUoDXT*T*j@O#7(Xs>L`BDZw* z8kWwm|2p&KputQSc-(7QSsM;r?FsXyYE+$EghioUA@<7u++*?tP!H2nB6u{Ucz zDA*^)gN_cxm@`RsT&DbR8YW$0z%7dR!M#zd?nQ5A{=AGa5sUF;aJL-$%}K zt$5nP5+>5)socFcXG@;qbQ^Wv*pbck|CNftI6;d=zOedPi$CimSI*F#O#({b zQ#Vj{1AK&;+bRTqTqIVi97c9~CH{QA7U4BIoE0%${1?%V8krkmbwihBNAl<@GjxaK z--Ach5lqjPoQ#K6=(y`So<&PtV{;qUIedXfhGgg2?LiOsQ*i$k#?fUDM0tbUbF6-b znRYHrsZ~hNfFZ`$&&J|?GWYVz2N&x1;`zMxOn5wiL*yAhqihiKpY6b|jsuw!+!C>F zDs1XrhS8CN7=2e%dvrj3t3Oc7{48^>133PM3$vd~Jt`%Yx5v-NyK!mEl-*%}cd2m1 zVM7`O_vN9pTG%fakmtImu#?o4+v|r>uM?3sR)Le7vv8>5wc=f~<0$aFhnJ~d)Rf+) zGMU3~{P_sc50%B>n$g&PJq)kTZO1?-TYivyB-OsAXjq^u*6+_@{3%}?8X1ACGsX-~ z>xlE;T5^KE3e*D~=zeG~j)Y5YZbUFYURPuGr!fdyGoCw~exOsl>|i<+!utF~xE?QL zrG6Z*ZaD}a?_=WW#SAfQNG_YF9Yg(}0Sr=cq;gCYog>GK=O?N~dGZ)Jhu#-4jgnum zUWwXQHliv>cIkBMjduxJtaxS2W+fRs7*o*IF82jS3|}cGUvJL3BRjEC?*xqce-v&N zu1G4pgrR5A2^V^u#?QTbFr_?zryixzcU2Qkl`~q2%n<#Se)u(U zeQ_!23@o%2?DxosZccp}(DnkjxB-d9eYta#16S)P^JTL*7Wn$&=2tzA?x(>SvAy}? zX#pGmXi+`3Eync@W#-nF+#H_77fYOZ^Qj7de3_5_1&R`ThhrIg}teE(-OJ0vO&X=yrGjPW0)|DeL3#=*Dt*ns*duwrs)| zcj?b7?#@}&wK#O*xgz3Fyr|wk3-_;&qjRZvwn>Y?W}3|K+e!h{pq;do{izD2;F4QcO}v{{=i;5 zYdwVX-oJuhkq%A#WuEzAYqsd^!xv%a@%8!xWag72^heTGyBkfa!dSiC7-_BD+3Cm_ z4%IxPxS%mz#QR=>;r<60(Jw*VTH=b>zU6TH)D~vnBvV5%fW6d5v*j;c>ik)NkTEW_ z(Z7pd{n|0lFNc;pLOIw&i5=B-WWPczwwyHOba-%C<0xca%HgM7sm#(fL}K}1mi(W) z)JsKb6rQ}{I3G`%AIG>I9dYQ&Q}HgZ6?UWs@`2qGJgR;R&znKG{W6TBJY9H7N0m34 zx8|T3y_h%L5$`>V;FLF2l1$UZI1y>Xgi{ed|zqZa*qrW}@=J6ufi~Vyl8Naz=S1k~AaOT)uY) z9vnd1Ro&RPUzO;WxfyrE&6qPrYL36&hp%(5;b3QHZi|%u(8y5k|J#{yDqE1N>dAl}s0f=a%F4lR~;S@5qabw~Fx>98swE z8vSETS)eVwq}}ph9+53M?{|>v(~iG9R$!t2aX6J+g|qZ>#XO9{ckxQ{I%nl zP79Ez)fVRQlJ9m@_IrGLC!+HUxJ|x;vz;4-eO4eZq^U}-;04&!Nq?DAA=~YbN8)8w zHp$MzlwQviX**hReVY=IR-Y-E_MtHU*^;kYwW2}dNZvGzV9lOT+?d_^~dZv1T{LxbuPHW>h4P+tp(0`f@}M(5IX7Xu97CqIc3! zXq=fWGMj|ZCc&HC4qU-quNfFvcN}wGccz8P1t@|KDE2r11h=$qjG2G=P~*BepE&iS!Kmfp`CEU< zbWCLbaVa$Ls7HOc%;YXBM5N*>-1DLo3wv#ZzS#{?TAR#>d3%rpju?UliBSb6^QG$OPJaF(&4=hvfhoB+&4Rn_gN(# zT^P(+JDy_4<^B+bq}7#XNWa^J%O%(Q;hMoh^NnQC1y00ix1MyW%0{3?4C8K`6jQSl z+;wX*WY9u9ORK<}{mxt`vbm_=1>t6YRk7wx2rfDo!{0F8C%sn zLHVpzaJwLPhh4Yf$D^C#h3;%9%b+2N6_b#iDHM-hxt-3PX%o@z@ZBL4S%Q_+`WEj)eYBShfoh$4UnN+<1vux}b z@AC(-^G>5}$T;!sr5+1mfvq!M;?!7O_WA4sx5dR+r+5W}?vlm3(v26>Wgn%S4@{pZ zaqHM5MTdu)!dX-LG}hE$-o~BKmyDm+j|Vb%ZxWV$mYRb~GP@mqFZ#ARiO8yPxDlJk zynF-r{+fd*WAMwQJnqf-hS~Oo>=e2g8yof$-#ay4S~p+T78(UxIvwP=3D3FGCNc4q4s?yvkmv-cok20wvWha@&t z-HY0mk-S!yjp1vy3*&lKl*2nOlho$dv!goyGp2VO7>ec-@rUcsnG2shJrKSKIPcH$x8D-JiwA zGP^cEoEuO6gPUhp4m9>;K`zf@u0=bP#70PW1eJ3?h9L&)Ye0 zN8$^qgZ1L=0nOPoGaQw+-qJ63S!_R}BK+l^JmQV~*~#`Gr8c|eaRwqKH)XMB7@w`~ z%k$k+a6y`$Gy1pW>4EK`*0orqIjAFa*C)hTUd0c)0Zd7>WOzb2Cm&cZ0)4FcZJ7n% zBwZ81FTvAI58+pnEx7Q04Z7sL!*LfEtO&XSwd1Rir;xo;m*h9=umNA=y3n{yZ;s;` z(fRim@#In$%5$>o>mbZL}IIv-_#`jNR}PZmNkqCb~Wn{w)niKwu*@xZ}1$Z#|e?E(Q9c6 zPbtmwHk+uyJ_}Q+*(;jU{Bt=YcN1!T)bYZ#7QqjPQe(|cnIW~o<+y>|rrZ>6qs^)Q z{RFD?I`Hu9J7TTvThva-69cU$rgt&_k#9^E>w$@{GZDtZJhYb$x`uZpc9w47Gc`Z zOpNQK!?sU#IR9b-o$rHZm&jgCd)Z%kM43*uJ^6REJvYQ9GV`4;*DaVJqGT>k|G3oW z*Nx$W8-6@sc@G&g2SfurUD2$EcqJr7jq+{6^SL)G}?S1cD!_=A9vkFecyDgGPW z7r$i=cjx(sqC=QEPm0yBGSGtP5>3N;FCY=9uoQ0Mx!f_zJ zBbR5&-R%qmDpxfMMcOznpB0KNcAgwO<{l!`7eliNd9s%g2X^1@-67;FA_GQIcWO8e zt`3qKX#>{1o`n6EHo`0=i&3wYId4NYU%#jkV+(buxm}4%!#+xOyb;RPyWrH7JSx9$ z#u($)GUNLNkt1H>%&eQZ>nG04CPF8sK{I zc||aLox*~8GMtL!EFU59lV6^cb!>ImLE2oFmtG4-_xDt}7;=TtMc9w57Hy&+Eb zS|IY>o3K_(_A`3-W5S$U*jQ}M>Do%%e>+q%l-4SqNw5C)f$K$Nx*5)%l-b2`9`wAs z5qk3M&zISe<^LtHlYwLwq~**0=qknVvlVdv(1L&Zwx))8EF%qz(Xb(%?NypFb%5%t6fz|qf(5TJDfIA!U-6)UtD?{WvCYN!&w8Wy*)mS@tJm)80 zgwyh&boElBitMh95AVyk7Wy3Sq|Lw26L|5Sz*W%suLrSX$nls#!@4N|E}h?qal&I?Sg3lu<|sy$SY5JzWVdVf)>0S+C}=^ zW@An45s_;iLlwseDA!+6yqOx0@#8viTqW6FGmOvM%|rHYWlX)-R&l9kB)0cXLHBib z9I>MY{h-b+0$%{mRcCOYid-2;EJ^0-jW zO00=u+elwV9aTo#4#kKs_vYGLX)N--jB0yL_I%WoUzP{4r+KD4|0Ksi_J#HemNLwU zGVx`JlJIsb7CFO|ak$1q)Qq*^oifQQ-aP~9(Npo~yf}t71aiOde&t`gZQ=cj<{ac5lxx0ksOv#iCHDKSiU76HO zjYli5!EMP1PCoGpBU?W}*}__ZKh5ao;lR!xKjKns7#+QSh~S5QxZ1Wm=i6(E{pQ(R zXW505$9JMdi0m-EHyzf~9;0YQ6dl85?@oyyt8PgC^XBg`YTAXlnT9;<>%a%<(-gA| z0$7tFdG40Md}Hd3BC8xu?<09Jd)0AaYinM~iWi6VB)g}=K=>IgK;JpB+}zC#cGU;* zQ`m6o^)>kVT(X#VMDfNhTd`|^GyBU7lJ?kC{#%gFfpa_Hc4xBrj%YspU?mxl>D05H zB=i$z;;zpTJo-=O55G&#$yXTo`-?lk!tVpH$3J*qgTZpv{zMS|% zW{>}Mr?O<{dN;J@?I-;dX3xB^Iwh9dWhU)Dh#Jp!Qe%@fNlsH=**WN zo}jm7ce?hFXSKV`P)^X`&2SmrZk&zjnmzeGRl())Gw`^(J<8EpIFI;&+8#2KV9=Wr zZ%co}6RAT^%%H{rp}3G}W%AgZ?yL7Ur7 z{PuheY&(3wgU!P@FUXAV@7Icb;YKtju>OA>odsAH+ZKjFQ3(qh3q-|41u^+&Efo<3 z12M4`EbIUUQS3Z+f{NYUiG|(W-QAt{-S<4_z2CRi{G4--%wBuV{4;x>Pm=iF{nhEP zn~d}9s$H)P<{hv%lEhwOlWG-G=Mi13MlYh-%j>F@zJ`z5ySlRuUv{mWYq!KZe3YZB z=Sky^Wo2)2R++_`8G}OZ$>+(Qnssg-{hOw@w(IAsSNC<4(%M26I#trxBWZPDrx$YY z)*wB_I!$w<)2iE#Sgn$LS-yWhZ`D51h4=L0G}bdfrW_h0FGil02X1?%D9^o@?%ZF8 z)yXI^yIbm{-)*#zbFxew9wC~P5j<9WNmXN zeU&!FI^V!v5Bzn~3EBQg+Tn8r2N87euVU5$VZ)EcjF|41IwZR0r_{c|HZ#9-@ z!&swxWlMcOI7UmKUM8DuUb@3=np}L`M@xUTY1qhR(l6^ZSr<`K9V+J0JM_ix&zIK} ztDM#^9;2n|&laE6t~zYyOnH%dS2mY^E_GLz*JqvXiR-Jf{wGWAlRDJ!)mh(LZ=2tc zH!m~mfEnH8IM3ZawpQ7keVggGJip~l1D?a3SyZ#uxglvT%#lieIJdg7AD`{K)#O)y z);i3r%hJ!31DOg~4qIC4ws})+4=>f$?0GV2OvO7^kvHu$!o7v08#X~&t@|qVC+85S zZYA|)wdqnTva@V;>@H{HOUOJwZ%te9plr{Upplt!>4#^c1^y&U^4DFG(lrgr&yLXtS=SFc`Rh3;~c4ma-GdTo!@vpKr!-tzuB_w+u=R*&cW zE;iC+o?CtQHjQ?h!*`qw(`#a`IQdrOk{s-HK$_+sXn8ECDVe6tu=+1cmQ(GEYD1?6 zy6U}yek^*L=l<7AQ-^W3QpxQt?bX|=$J!vZt~AsA6+haRlwm)vAl4unc)(UMHIMCl zrGEN_cPBoj1o2&=liD1;wdtQix<4VKdUy8GIsRVyx=oC}NLHO+bgb22Pknuvmi1xB zjuyX@H>6u=d##Y0wQhq;>*)%aq)Bsk-L@f2?;Po?J!1-MI7Y~AcCvnqX{&oCwbm=qF1pq;&~~C_Nezx&B~yMcmLk3nWOz^yb*nYN znp)z#wK(;ke@n+Pl9TT?Ix>3^boO+qcBi{Mj+-q>2iMAtFpp5 zBhkQ;RoPFyvW5*?VAVavTFBkYYp(Unzr}hVA6y*+ltwKU^xNsIDv7SBH4z)K>jks(;%dI-2LyzVkfzznl-G z)8#Ezcso0p`SP1JbhLvy)MOve+tu~avgR7_C{oTGsIDu|&a}2(46)9&9HJ4SU*%Hr z7J2Z8buVw;mz@(!>#3#OugnswGj`^em!XrSM9Ns}Z>_(wZex(f+jr4A{VQpe>;1$Q zEYfbs0`c$EO=smPp!ZMzXBDq>T+Y4sXaBcgO}W)pQvC+W=#|@98<71<*tgGBMoGrv zQQA7Mk8YhaK&;Y7Y+XO~(&^4QtmfTAbn}!V&fS(EbObcxzNPHJ}OBWvTT=$!L$`e=R)t>ku2j`NI8pO1HCS8Q)>@V1!c^RbLeX5o1MM3L&v4*;ONEW@kvyVPlyicwLx6qx< zS&yoDyo^2fP5PAjZdd4EXO-QVQDcKcbX3l(^5Sv( zRoRQU%A)+5ddXfR-`=+#jxMFY&U$LUwDmM3e_eHq+agi59JE)Xw)(+klXQ<=XQlA2 zV)4g=W!?tXOde@31G`_BX)Ov%mCm`eHv2hT-TKoUB#S8*hqfm1>EHB!cyW@62kZGpBK1&BmVJWB(IB_sL>6?5>>cltZ1@*VCToY`T3{ zVeQ)#3t>jfrD>>ei^U>+`)NgZd+E>CF zus*4O4Goed*6pQ%5}!XwvLEN(!kQ>+?X){q)x=}gq|1())2@!zk7}Vi-cOP=_w1x} zgMsvb)5W%Fy}bGPM2?Tht3#5VG}ow%vf@Mr9XTdmdQJ?JUQ7SUt0d8`sSUKqa}SMi znNW$06mjy3l)bCnPX~Wv3&QD!6!-!mZW>LIubK^bETkSO0 z{8#e%-wQc2=!!h=)=5T;zH6n)6d}WwuakNO!ZfsDoKBfNP8#G&Bgc2n;d=F@IQCAf z6W`R8 zWO@7=q&sdewiS&mp|RmrB&AYSS)Y#m;yhEOeP|oa+0RRwmQT0}x1bWS#n z+#=QEZi%ul=J|c)wfa-`cTJioc}}uF4fi&#KiR{c!&&rAxwhKzpQ}bhJLw6RaLe!B zZ)=j>6=g^YlHLS9|yt#TrK213$?Msc2w{i5wP zi9^jzysy+)@9fT^bL{dYKxv8k++S06 zG*Rcf>;uSmB8A_T)3fX5$=|yTt%nt~C3re>$KKayVO z)ytxb!vi%>*+6Y)pCrxymXVKJ%q*bDB(gp1s4q9LXF9^<382CTL9Zn#699DinA8Q(-thX-kfs35KHn#1<^o4@?GZj$ZO zpkVEot+iC1Gg8vOYHmAO*-m3KR+hOl0;PD!A9-=7w`9rJO)eg>*U?1_YtpX>ol=i| z`?`c^jnDVxeX$Y}pX{PvJ(kOf-d>vGT1jfY?WsW@rc#WCAPDabn5S8lGhRSIy{UG-N;XwJsk#$&L)iAm4%NC#z%ZwIZ- zJ<$GhM_P65SabKt39&UVtNE9QX|CP*bVsFXde3vL?c}`Ua&`kfU7h^wDZ}^-WbL+; zX6hTdPzpH(>EbU%b?&|nV#`@r$5*!3czQ3l&37drf;CtJy6C6jjb(S4R#lUal+ce4 zt4fP!L*!7_MmjHQti&vBtI0bCYyKohO}Nb-u{Bpqa@#Kcb9+?Q!K^-UXA{qCluDJQ z6=sTGnO!peN`33)_7Bp3XFkn0kM{}Iu=nh&o|0IjxPE(jM8=JHCu>-*$$5JZS(Brs zhL+E%y9*DM;sMtseRvD?pU_kTf*t?M3@*Mzfn*7wvo)|gG5WyQlq%>ViIYnN0>9P6W_BIn4VNiAgc$JSQ9?E$(z z++Ay|<-g0fw{858vGQ^b>l9^pEMGzk$^86}tpS~~Y2Dw&WX;$vnwYtSHpiE3?)N}0kGmlw!_UdxQ|)ER@@VaMj5QF3owh1g2+%W)o3Tgx zP-z=dSdWyet99wOf)07Q?-Vk%jm=&odY%c<73I!s+9k^S}$!+ zLU>=fSr_e6dV{P@%CF;BM%Y5rhid)6kJ6)}k8~{jM)n=eFBN{))&q^AHTFNQ!yQ=r zW|xOvTNkcbPI_qj$^|uSb1$8?!C!Y2?4wSTwpz2lyI2E0vsUU5d+k2zgB5e>wb+N; zv)%kJMBAixkz$$i$r1aKIy_B!y?E)K+oHKxibzi0kETNcujSGGxVR1ayow6SJ;(@}3#yD420w@KCf_Us){R4cK*`pPz) zS-j=Qa7IRWEBh{qeD^ zmVU-}qP|lks%Er0mOEk#Qe7<^7os+A|GA zMD@a=d)6Ap>dJaK^^8v?T^ddKbnw=#h5ul}s6uPp{olUh-38a&z8 z79ZVI^MpN=A7#Duah=PO{%w72-D?2PK)#X#&XeR!KR2y;X1HugNV0q;q*!5H2dVdn zf^y?xUMbPJv;+k`VSPv^_9U&Zb2bgp0!=Gx(x^>Rpj|Pk#`=IATYs^FJJpp!2cFml zee%)I54-8zjSpp7!}F4J)^b_CDoo>t{*?G*on&cb9iH*)C+^gROK(}HfHlc`dU|Wo zv|Y5_2t&)n9lUyLbVoVlob1JhoeCDJ54wllzjx97@ z=_u{gs1xg=glO}Bef6Wi$hSF1#DDH-IqLFQMg-*MorM>&Fr#XM+gsbc^8IvlfA-mS zaF=@}SBhssLwzGBZ1V>`fi*U#Lv!IkdT zfX*MSmaLW5s2b0f9^$^Ge<>~6XomECuwS|!Js|_)YwNX^m!%``kuEsvYF#{$S5BtP zlt243=(5S=eP{dY&&&&?@WpE~k@p?5 zEgUg{@*^TlYhS$XBi zkTUu;!v(o;H&kn-_R)Ipwo1WOnRVOY*81wGonD+;S6gTOE+?ZRt{kw{AUFxw$)a?RrEr-l~OhGtWbB0sG4***1O zrVLUeAJ35I>S6WG(Lz$Zx@+5Z;X30I&s2vE()pW*NdR-lzVQWR_H_>_K0kx*n~_yR zT5OU+bvjAGqh+j+LPuo9h3VFp@p<&>e+6`Gvu0{vyPEa1@lwkzcC)SC!jk{r3-@Z@ zF!fn}ONx3`Ri_r+bnH6zG`sDlOP8}&HP16_Tv1XRrL@$5SM~MRyW+BLS6wahxPvUr z@Q}TP7E4r21?}h^uOmax%b%r#bj!DeR+`{@HtY0r*;?(Dl~{!L%Jyf}V(ByMtWavl zqByOVD?9HLrjdkc?X=3ztzuouq*MLQ%iIt3)V=F@ah_S*_PmB_@b;Q|VEOw5_B<)j=#Tu1Y_IbUuy??ztd?tFq;8%a$M3(K_T#?D)e_N`Q{@C5 z`L(0?ykITDb$(hnc!>O&%zO3j#WmBUO}2$ke@n_nOCJQ4wB|DQpUtt?l3e#UDqT{& zzXoYxkFuJZl}Mg-dM@YN$5>m_4%8w=wu=4P>{30bi1wb;O4pwd9bRU)cs(koz23&_ z5w}3AjcZ!Hd+oYR7|i?fVH@Q7kG$Hbot;iNHC~!7DJ=2n)2f4aj9xi>Q;s~#pb^hr z$dWVpb#7JEFd1`5mZh z&rX+!K6|8W|1|og$O0?hx<=x2xvDm3FhC>rRMP>Oy*1tL*3xHVZE2fjpKVdoE7EDt zOj*(|K|chH75BB#a>p~D4hxD=C%3nv#RjQE>N?33_CcyY4U|c*CdfSJ2(8vERc_8G zVr5}XfRzg_$?CxqrN_UcGHzQ%b^q2{$M9^!rL2GCO19H-{UUqr)M2fo3k9U-ob>vl zRHEfL;JF+cUs30z3AQp+oNMhYmtuK6?W>J!QMxSHO}kca!MlQOqyhK;3;EuX;9D8> zKp!u?`N&=;$JW(%DU;+u^Fb2RD!b*e`I1%Mp{u@FpGjMXWYN55(`n%L%rYUduFi7Y zXxsX7g8Xa}t1G&Hk{a2$=g*ookrN7Oy+pphv1jk`9lIov_ZD*v+hEmtFh;IUNTYEM z!zC*9t8JO&*PtqX`t~dPxTm=2>W)1Bnr@k`=#(iEdAGbin3G0RZ{L#r7hE;lfuqv= zm+JkuA8py^57HOGLwI+My&P8Yy?Ew8t#YuFF4)RD>@OqqVBvVRs`j>AzV+2t#aMs+ zXNYyM*G)+?>#fwx++5PI4$~KUly<+|^>Vko8doPuqC0Z`#bbrk9&M8?v3F(Yx&|5& zKGh1_)=byD7%KBd^0n=ieU!PN@Ls4pkv-?Cr{ zuHq>P#T~SCqY1KoL|u)^mREw3`sgN)DBW1gQ*(3~to988q)Mf~l85{A@8+;BPwx{l zbzF08mc5W(`yQx;+P;_HHSb8a0abLnHBtKW4F7R&Kl!g0>$m6eVei(gGCa*ftNi;= z-j{2t$0M#=`FT(E;nv~ug7>(iT{6q|qGheA>>;%|V>cbqc(r8DJY1emeJRJ@)KiZP z(UYIIDa`?K}X>V83*&&ylCmS#OVN1kmeH$qzWt*j>&SF_EHi;&u-E2{GqJ6rB; zOJu`F)>B=`GdOEi4~*ei=^JNda%?aC>Xch&z8)&}o#xBan*(&^_13I8{!#KT_tqOd z^Xb=`S@ie8a4Y@3oi^8TRWxb)IVrl5^&lG$m2y01_&sQ^E#IhQ`4v&rs@|LL*fv+Q zJqpdMqsI=^S>;$aBx_lDu=TC@JUC-L9y(7>U$>XUnEbW|JQo~Wexn4=8Y=sCch%}U zx?5JMhVshcvYcf7gloSms9nJka?T zO|?y~L-M2XMS0+u(?6MaCjR-Ik@I^7t80prI!vjpj~XAgvh6%6qvy5JF1hDf`3l_; zw}KsY#rX&FecEr?UErtWK9E<7KiO_2&yUpPjeeZ(q5ALOHE9ugPV&39RENO9I)-OA zr=1lYEiQ9m#2a=>n?sM{_lbzalmgPqA12X;lY1vM%HmrAfS?|}w zN?#&L;);BbZ;y*<9i1!jSNrLiLVK)|JH}gU9qOr1Tz(y<4u;l)~wOq;_13T-mGb)?JV~0iqENkYc|);yzk+BI93C$#%a35aPjKiSf{df zX{*sbn)_G|?yW7c&UHQ}Uvsd|=IK?kr>9Ez#OIQe`@AEYy^%@lPDs1*rz9+YZ(YZ{ zKIPj{Iqw>$cSly&7HQnIMdEuI@vf+JIrK@UCk@nwEjwC0|FqUR)jI2pCbiU;=dHc% z4obzQ1EfQd%l^3w{Is4Om?t?KW>Bg=d)|zYFUy`uzSLK?#I3AZ{4l!)`n9q&b4A^D z=%tMOKAk#vT{2`U!ZQeUG_>bOagBc<+wHh7GyFfvP>=Qf?**!FjcwBC`#D(>SX>{@ z<9&|yT{J^l)+}DoQc|AVtS&AmB=3a@;>8&1S~#2ZbgAY4Gwrn?DzA8i>@6M|aQ~OC^%W$h5&#BDKSX39Yj!(y~j#_Sqn~Yc# zW3$-?>3>Jq%Pi8-O8=7mc?Z3bB@1q{#?DAal>rMyFBS-sz;RS%!B z9$o9EFT)0?oPTGnTfp<=tegI}Og*h^mr+k|5d79Kp6G93} zud~O*<3MAXT8}kU_Ehw=a93kmhNX*)8OlP8O-`yq3>Lz6>Ez`gcs8U|9gmcy ztP2xR-^wxiqiqQLIjpSxPU?5dA{E}$VO{NTZPqzLW$gn=Vf?jW9iXNE9?OSR(QCEq z+U8xaA;(80sOO;!I%`t_9qv{}cDp87F~joeAKrgloRd8-iZ+s-C+A!50+w2dV{Xdp zIwf`UlwtC->L}T>`kQ=teZ%VM-AG#P8*I6>IV!Vb+v@VZ4K=uTh_(z4)zPUHwO}Sc z=`n7!b)f4fnYQqQG&wp+p3X=o86Ws-BJWtcEE*)&I+T_#<65W}?@6RmQ(7!MDWx|0 zY9QZdO(z9Ul;Tx@0w*Rn-jJs!Ru%f^A zdpJVg9B|Y_8H=;NqpyC;IHv0B*`DHeJyF_k|I53!ytDbdw)M3@TPc{ifnJ*%tx*qi z>+C+iqyX>I1ZPgRmfzwUqt8~Ub*PK}-jG}W^L;1o>pN?5V+Z-{Szb0iJ1HCPypo*X zZPM=hY}>Nqx248N?mH#al}9PdzWrZ4Z~#JCiNleY%6Tpbu!Vs)v?*vq4r-V`BPt)!7XT_{XZ9Mi$Dg8=h~L z$P?@x(Q<}d?h~x{?OLg8A=YvpGfAddi{y#~YqoxY`Xe>Hx;5^keSPfp&j(MP+t1Io z?$}7HL#Y%={9a9l2E^;}**0~_#@Z-_8tS-b?XBtqrb$q0JDsuGSLav!D4U8Dl0HLT zTBCdm>EJ(UblimeI&MR8`N(|h75AC7Mdw-BEBuyAqwYu(o^6@=JW?9BbJb#}s!EkQ zRai#O(px)oY1pT%Iw9h#)q*;CF1M%p77W!PznbfXu#M8zt+hT|T1;oSu(ws$g|eJy zg|_@XDld=jmS?=9@cr}xasQq{zkjFZt(qfip7`lQzUSMpu!#)F@Kt*Lt|&AAaQ;{B zq`&`F&|Q(kWlhz8lI{CjN%*h5+-SqRvhA687xvJ`owDfbVzqQm3HsWgX#JJb(jPp7 zb+&aKeOR!Y=C4-JR>Q+xPk6Y=yw#ri^yoA>;r-kiI5&=U6C3D!w|&-K)*22^$)N-8 zchJqXZp-qR*|M;Ni=;&`}Bp^5^_p;a9oGOKC!lS!VVlw-ZO_?gAPcD=fA7j|VwmZ*Z7Gd6Z(G!^_ z%C^A^xexEG{ciP<)k*I9Y0oF|w|CUz+ZwA=-hA3VWWUw4<|~=eDojU4`RLihoz#!- zrzVVBC*679cN*{7XAgKS^X)sxmfMNqQgw{`dWo9{Q_1YaY(Ph5m-5jXZ zN=}!a#hyyrE-m%in2}chbzQAvi>qse=&$mt@detR!Z`M_e4ANEPsFfJ_vBI%*|MR&E&f)f@l4R& zq1p9$)@`=t^(u<(%Nc7I>$Z9ZH&K^;S7ej7Xpi+bt!&vR*xD_=BuBaxk`L@j^0&o9 ziM;bx;u5CF$mC77xqm~{Y54$2?!dDMxo25tb9J>9{K?wSIa%ZL&^H;ycOkXfwb2)& z23q%0uE_QaSv4TRODd+lCRH!z)Z{j-1-!F_E-krCPQ`?1;*hNDFI`gyMCZ_!JS!Rc zS>^XlJ83wfzkJ>LoqO!|>bv@tB+tGp*PMH5THXQP9QRdrw;rTl$`7-RIx@j3#B)>Y z4`z@|v)4-AH~tzImQe#9dTZequcT_nqf+77dn?<-Pu7i@cVyNgo7UeuSH|6%VQbU1 zg7yAh9c_``Pt$c}Z?fy1)VJFF9-%C0$;Rwk9`^lA{gtX!x%fnfKdE0{`~X5>DJlw6nAO zX>Vuu7A>8|&h8?9Hnbwn3hALNxWQ~lWxo>Zv>C<;pj>iJ30Gyn#HKRkd% z^a2crtKi1J*9#rZF%L*X{0S{Z?g_ddT@KMuoY)y6@pI7Cs2`s<|KTT*!%zUCpaX=F zAIfJ!(XGVI@u|=ZZ;xI^9XM76-V#?rU7#N1Bd*8s1?XwCD!K(th9dYve5NeAhqx#{ z2YxMdhVA6)LJz3Gv24(hd?wgWE;CvRO$*KNv(Qs$FSHJyU5Hs;&%}jbJGtlJ21ALx}t|Gb)En|)Yf7|7OBnaTM5oiLq z;@@%bEB+=-gZ$t@{vP>(FpqdVT87+6d`A2^2!Y?w8XP&6%CRhvfw&18g9^F?0y(}5 zje`_uOndiqmg z@bPF?j;}{|64yt^!eAIgY=a$eiue{>!#99RP>Y}Y4}C^{8k!LeKu^FLSWVm$GDBZD zLasXO#*aYTq3QW&bVfZS@=Fh~`m+WX+v>Mcd@5C2jCYXLG9r^-l;!O=$z-JzV`OEw+&A4oePlL8cr^9L3 z0_NN>bAt<*^Uc&!Ge3loUqw6;*5O;AQ=tU@Eu_Uahgo>jLnYwN*hmC-ctCzVniVy5 zV*x%lJmyf!GN(wI~KPwRbx@3att?@R?E56P$#6crzy4pf$0nF=l+- zCN}d*7IY)p2R!i{{(qln>eC@&Gv3WuHDfO$Isl5}m%|pkKqq{0)YLW)C{Ju^Q)MVi z+zT?`T~SkybMh~FgH9u7#(70e_M=HR?IK0nWfej-{ez ze!7nzgEw`?2VWF?@v&%A^qz^~5~Snvj^wW6+oOKyY4jXw=4e;cpSUmD3Xb7RK`wA3 zE(WGAu+V&P8%zzm1m?OS8Vx6R5dDTaqx*or|9{Pu1ua8x1NDFoaE*8~x)wc*n*JgJ z{}O)@(hv_N-j6r)nGZe~Um8Cg{|ihlehuxQGx2!T^hsConZW!XFnxJ#bSa@T90Lbp zQ#U`tFua+|YQbM()5m1Me}R4YqG&K|hfw0J&;*|eoekIEEpZFfT=$&9&jB+pokRbF z*-hwW8GZ&17r%;gGelT<2Q*=IB8FQ`YfH&7} zD~QdBT@H!GPl3Bei5(M81L!1QE( zXdLt;pBqj=TX+Z0$j^c%_|7m2BB2``gz_BQiN-?^J{|(_6Hza;GHUwN^XNJ#hwn;$ z9+c|2PMdvz9k+0AwD~5 zdgq(?#`s)N3wjb?MPH%s(ZlErs00(>Gr3Q&27bbCav9M!a0bp2k3lP-x6lY!3&H%m zo}op^&jZuv_C}kL+Xnye>(L7^4ZjS1fL;L8OPfCGCb>6Ij$C!HCwGOo8s7AwBk`uc zi$fcb8;p)e8^d0_sfFhM<6(G;_e9Nqb9pd-rq|IqP#w%TH}%ZSk>=0A%vG6DQ@>0N zHs@bEj+=AXoI|EZFn^gEnh#pwGosDFoD=3eJ%O6vp{bY6Q8Px(*w2KTIyVhW4KwFj zCe-vkbJ1DErk^uozZ9{lA!d$mKz=6P^fT*GGf&hZXZ}phxHmP{)H^e#4!{?3E@0~1 zTh!DEQ$yQ8ar_T3^Y&|W5t#aB#)LUv20=wIb=LGVwNNu|)1rxB<`y$1PT|ct^ak=1 zn{(ZqTbWVw`^|z*K+XAR#+5lITA{trGVm5}#$I83UDWh^?eVR_)E6^W%=r`x3%~=+ z`MZStH}J-r+FKCJn0o{(ArG-RS4=;nXbd@1PygU^qP0;oCQL8=08Jrh>dJ9g2-^(g z&0K2E^#Ec|FmqRb;+Nn}Y{s7%mu4*BOO=hdJcZ!z#QPdwapu zr5NHvV8-qSFn#=F;t6;&KA+%wpr&`2jt|F=M*E|C&@7M*Oh0Vq$0GP-j%`PGLKHp& z`5dSh`iop|m=DXyoq=xnS1=fV1q4nLo8ERSYJYNnGeG7 z`N0()^0_tWAT$HI6deG^AtO8|HxkVO(J+G8%q^eL$Hb>m)6bdS;6AaLzaNw9j_(8u z@bh3X-t?EIKb%T@ir5D_<7c3~(3kKI%v^6yfFQ)5xEMMN;_<~{G;AbxK#xErxCaU3 z+M|1*AXEoOa^_mHI&{TfCYKLwiVjA%KvAeiY_5fSqh>Dt53K?>U?T{hnT7g60eoq6 zA6gE~^{MG4O~3Mn*z{w$Io=mu5SJouf?hI zego5An4Y8+zAt%CFz4rK^aq>(Q;Q#wGv}A7#dBc@n0cWw$ILmlo!HbGGk0Ev!gw?8 z?x8)2&F|Wrry+P#2hCVA=bY)4OuuGo!ETP5bIQySgNT=+h0uX;0lx)G;m!GF{ydw5 z84vx)wFYluQ>WjdnbB&fnGgD-<-wnvIX}kZA3!F&=~>MAy#UO)Z^nKjv=5m1D=o1Z z`@6u5<0ZuD&{|L&{~OkWsa?0wcH|#`>E&h-d!WaOUGb(ynVz5tdL4Yo&qJTXZTu2g z2qTHjc<+hkhnkR;d|EJbV-GO%(>CB^|DSX2;+??M<0s^D;1|P6I0~j7bU-Jg;i##r zXYpszQmE-ylhOT<1u~L90A?=BOnegG2Q~F&2c#!HgpNhWq2?Uk1g6itgEj;g@^w)& zPNQKfnA&gV6;eDVo)B`i7|DYSt!{`q5DVRD_k$6A8 zE1Cpm{xSWdsXwO1jp3LXrylSeAAqJOzXFW_Q&Zle4^cD52S7nE^JxyqfUgavJ}pM8 zpwrO_&=&s+HMKDhCZw$Gr_=BjxWia#aUzmuuK~vZVE8r%KfcqSef-_+1jvF~s$K4?dJ|CF6IfQr& zyn!-cM=lvmUsx6$O=>Tsf|(=Cytx|xlViQm(l8u<2c3g{fPZ*%y<_IO>%?E6KDdGx zRD#D~>gqZO#GAhP8h#Jn%y-A}S)m0q0MpA?KusNP#&I)GOoM)4=8=yuj(m0WHJS>y z;0y6HFn=|IMNpJ{4fqS)iPxje!Stx6?&l+C`lcV`zQQzkOwL?ywa2f8;!uvH_5;k$4#-;aj8U(I~i!KZTA(&77MFEk;}q67bp4k6`+u9K^Z7 z%$?@i@hN^AOyYQMC`!(YxD_0Pn&iUJTHua9f|}ml0qsTn8NGpaLW5x#m_9rbeF1GC z7spGJ8-~^(z6rbWPUM>6x8M&$INl$M!c5{lXlK;)x2AXAN<0-d!Um{8&Ri=s#CPR$ zz0sH81|cvMf;fH*^+L<@neSkF2h%UUCqIwaOfcsV(>oVIFOV~Ra!xdecqIA{a^Z`Z z&*06qs=4mlMD8j~C6^s7jTVM3_`GON)bvnoQ3v8MD1^TP9q|)jG?@D_rXLziKA!jz zItn82%fSN_0?Czy@p#jhEkbR?)zDG!3(Pf1e{>4@Cg^5Jk9R~Lp{7>~#mC`ipw)>N zpuJ&=iD3Xdff9VCIL9mF&%ta+N3H_e3i`nt;xuRic;HRH)gKLjCy7U-9rVlgo ztr=U+#E0Mx)PisDgU|m&PoNjkzNncSo$$%%BeWoz9^HYKhX)V~li?+K(>q;3>w@VO z9;2quImGenU}|!8)buYt_?|G!#Ar2h9L9s0E4PzdhjxY-m<>b7Wre)>rO?{M=w8%} z3Bj*KcfwJ;sZXY6O$0OFnDJre)O5rH!StA(#AXcThlkJ=(n1H0|3;JGF5V7KfSDUs z5Snqi7c6q#=wB#>H}k0JIWH5N{%-@h2KX9iHDXgo2jfj``3k#BIJ3%&LAJoigIq( zn+xHvo}3q26!nJ3_(kvm-xg})pP{C|se+FHPvRFa37SKCa`A8*OpUCF2J(3`caI~^ z1?E~NH+m2L$A!5qgA!rQCwC5i6g9osar|reOgs`@1zjK&%-mRj{B5`nrpM?` zJ`+9%Y6gcpQUKE7mAvVV1`(IWw?mJi4loUrxB^tg&qH^hMZgVz4NgH#;+yC$sDd}W z^BL6iJ7(T3gKx^QRCFF>z@LP^_z=|e7C-RW@ILtI_!;=Ja359^=YgE~60i|(`s0Im z)8EWN+mQPRoxxlejUZ>{)>o+MDT=}-Xv*=9=m4|ftr461b!{# z!>>YLpo`G~XfC(|Gl`d>C(()MM=<^1RN`3h#M{W_ffV=xX8s+Dwt)nQOP^HUz+Z7!BLWkAZx6)0@4=TX2E67&yWu;#a8YQF@~-iKn3HiL0Y| z;UBsBXdL+ChoPqbT#YXcrbk;wE(!wSJ2;RZ45qJZh^B)Z`}(EP$3U0Xjk> zj`c@PFBXX(1%JTw@w3U7#7CgMXfT+5aXE2g_)1(EHND?e{4+2;k?9vJkgo^hp%D4P zXc%n8n;!cgemBej)9(h6e}X@P7J+K`P%u5&6ykXNIf%p819J}F0y8#ET{%zA4t0eS zSPNZ>nsM_RHT5D3IWw1UUVv$xw;2x&T~`4%z5QX+z&Nl()75dKACZD zYVme3wW2(jKE<3PmGP%hbN(!Z^kDkddE_7AzoB{14p0Mz!Cf%5$BcP1z6+w&_!%?T zp2U|V_YhqHXYh+4gHd8r15AB1^S0?f7obbYWkrv|N&|5Oiu`}fm^xk#@O_^zEN#q-&)zI$X zfH&6x&CvJI1iZ-qfX#Rp)YQp8&=dZWD+Feqm(9)b#S1@ni62E_n7jE8nm1WG|2 z^55YFz9QNRodu?c?MQq9B8Vq}nOB>k_u(z{;#eNojqeIU_*du-xQb6k>%$da z2*xi!6VX7lHJT4K{g1iMEQF6DXL=Gd|9&Bkfz8kthQk()FNdr6Fmw;B!<%{i41P5} z1b+do3iV73-8p9ZunFiySWE5-YUcmF_(phhE$5G3BkqeH0@G*3p+4lULt6Y=u;I6& z@n|R<1#>;Pgxp6keT*-;-uQ+v5Il&3$iG8PFYJl_A%6^A1vT)uATQqZzNWt@Mm!x> zgXuZUU(p;N2M3@u@la@p4@J#2!W?`&-dt;#{yUubJ3J*f9}PiUKmoivngbmRpP@eS zDky>fhxSINpgW-n|Ew~^yYPcy9h`#?) z%$%#<__Q2r1m<^X=16nSm>S;_?hr?#htZKHk1jw>Q8&Ge8N=VeoTp|!oeF1QC75wr zoV*!}JK-eW%&+(HukmJnIf=iEUWaNh3QRq}K|UG(5=_t4k+>(A`m~vxIS&QD224LP zlQIy1ABF!PkM;rn<=p;%{H7%( z6&XoWQ`1UByOfp|Sq(&#O_b44Mo1JYqY{-!R;bWW$_$y&US>v$DF4T+t;0=O;V%0h}|gJ0FaD zTx*8Oas%YKJB)AV_9*7F1J#$y2O(#`67H>6ku#fj@oe>8&iwzH4?|Nq^Xq;2L@ta& zZvOsXL08H8f;Sc{c@Nt--HhG zDxSuJF<$-%1(BVzzh2%kK3DgaU*gY@ncbHU#TRk~Ud(^+G<<-f>VtSC55ckW7-UxF zJk2}IFwU9Mo{Q^Ol0V|g>Tz5i8!%Jdgli&m{d)CBMA z&YTN)oB9Fnh|KPW+(54bmqHEnRCnfound=|9|`jLcoSQZGoUZ-l_&5b{DW82tuYu^ zs0-j(T&AAF*`r(X9<)V29FA)E!Dn&?c9VPH6y!Z}hh7&H!<<;Zi2mF1`SS0mB`?6Y zawp`h>Y*-zb5Raw=zoBjI8Hqjb$sp+uBA5zjpeiOvpg0@;}&$q3;O3^w|o{ZmP_*A zs4C~b6_l2<1HHu^F;D*uzK7f5C^`E?QMoqesjKq^JfA$tR+8;hkWi%TqOSwy{HU+!&T~nKKnEOj=S)eeslg5c~7{Lwff8|*c|IE(Q7W>z*l38oPB$bya{E{MXw;leLG_z;YYc;&o$%~>g+i~;@8FktD*DNdFdSRd@9?Xf=jT3bm$Nrz9!ya`gg(ewSl6{axD}ZbdFC^#XX85g zUtWao{&m^c?Pq~jO6$A_s24

f(4p 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

    nr5;9Rh0JoL`3=@C!KeKFS>rA3y9?H#x#Lcd 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

    >O=!8I9O>|db=1-`A1_3>PdokIW=B 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%0A-|5Xx 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

    @-%P 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 B$}0c> diff --git a/benchmarks/perf-tool/knn-perf-tool.py b/benchmarks/perf-tool/knn-perf-tool.py deleted file mode 100644 index 48eedc427..000000000 --- a/benchmarks/perf-tool/knn-perf-tool.py +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -"""Script for user to run the testing tool.""" - -import okpt.main - -okpt.main.main() diff --git a/benchmarks/perf-tool/okpt/__init__.py b/benchmarks/perf-tool/okpt/__init__.py deleted file mode 100644 index c3bffc54c..000000000 --- a/benchmarks/perf-tool/okpt/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - diff --git a/benchmarks/perf-tool/okpt/diff/diff.py b/benchmarks/perf-tool/okpt/diff/diff.py deleted file mode 100644 index 23f424ab9..000000000 --- a/benchmarks/perf-tool/okpt/diff/diff.py +++ /dev/null @@ -1,142 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Provides the Diff class.""" - -from enum import Enum -from typing import Any, Dict, Tuple - - -class InvalidTestResultsError(Exception): - """Exception raised when the test results are invalid. - - The results can be invalid if they have different fields, non-numeric - values, or if they don't follow the standard result format. - """ - def __init__(self, msg: str): - self.message = msg - super().__init__(self.message) - - -def _is_numeric(a) -> bool: - return isinstance(a, (int, float)) - - -class TestResultFields(str, Enum): - METADATA = 'metadata' - RESULTS = 'results' - TEST_PARAMETERS = 'test_parameters' - - -class TestResultNames(str, Enum): - BASE = 'base_result' - CHANGED = 'changed_result' - - -class Diff: - """Diff class for validating and diffing two test result files. - - Methods: - diff: Returns the diff between two test results. (changed - base) - """ - def __init__( - self, - base_result: Dict[str, - Any], - changed_result: Dict[str, - Any], - metadata: bool - ): - """Initializes test results and validate them.""" - self.base_result = base_result - self.changed_result = changed_result - self.metadata = metadata - - # make sure results have proper test result fields - is_valid, key, result = self._validate_keys() - if not is_valid: - raise InvalidTestResultsError( - f'{result} has a missing or invalid key `{key}`.' - ) - - self.base_results = self.base_result[TestResultFields.RESULTS] - self.changed_results = self.changed_result[TestResultFields.RESULTS] - - # make sure results have the same fields - is_valid, key, result = self._validate_structure() - if not is_valid: - raise InvalidTestResultsError( - f'key `{key}` is not present in {result}.' - ) - - # make sure results have numeric values - is_valid, key, result = self._validate_types() - if not is_valid: - raise InvalidTestResultsError( - f'key `{key}` in {result} points to a non-numeric value.' - ) - - def _validate_keys(self) -> Tuple[bool, str, str]: - """Ensure both test results have `metadata` and `results` keys.""" - check_keydict = lambda key, res: key in res and isinstance( - res[key], dict) - - # check if results have a `metadata` field and if `metadata` is a dict - if self.metadata: - if not check_keydict(TestResultFields.METADATA, self.base_result): - return (False, TestResultFields.METADATA, TestResultNames.BASE) - if not check_keydict(TestResultFields.METADATA, - self.changed_result): - return ( - False, - TestResultFields.METADATA, - TestResultNames.CHANGED - ) - # check if results have a `results` field and `results` is a dict - if not check_keydict(TestResultFields.RESULTS, self.base_result): - return (False, TestResultFields.RESULTS, TestResultNames.BASE) - if not check_keydict(TestResultFields.RESULTS, self.changed_result): - return (False, TestResultFields.RESULTS, TestResultNames.CHANGED) - return (True, '', '') - - def _validate_structure(self) -> Tuple[bool, str, str]: - """Ensure both test results have the same keys.""" - for k in self.base_results: - if not k in self.changed_results: - return (False, k, TestResultNames.CHANGED) - for k in self.changed_results: - if not k in self.base_results: - return (False, k, TestResultNames.BASE) - return (True, '', '') - - def _validate_types(self) -> Tuple[bool, str, str]: - """Ensure both test results have numeric values.""" - for k, v in self.base_results.items(): - if not _is_numeric(v): - return (False, k, TestResultNames.BASE) - for k, v in self.changed_results.items(): - if not _is_numeric(v): - return (False, k, TestResultNames.BASE) - return (True, '', '') - - def diff(self) -> Dict[str, Any]: - """Return the diff between the two test results. (changed - base)""" - results_diff = { - key: self.changed_results[key] - self.base_results[key] - for key in self.base_results - } - - # add metadata if specified - if self.metadata: - return { - f'{TestResultNames.BASE}_{TestResultFields.METADATA}': - self.base_result[TestResultFields.METADATA], - f'{TestResultNames.CHANGED}_{TestResultFields.METADATA}': - self.changed_result[TestResultFields.METADATA], - 'diff': - results_diff - } - return results_diff diff --git a/benchmarks/perf-tool/okpt/io/args.py b/benchmarks/perf-tool/okpt/io/args.py deleted file mode 100644 index f8c5d8809..000000000 --- a/benchmarks/perf-tool/okpt/io/args.py +++ /dev/null @@ -1,178 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Parses and defines command line arguments for the program. - -Defines the subcommands `test` and `diff` and the corresponding -files that are required by each command. - -Functions: - define_args(): Define the command line arguments. - get_args(): Returns a dictionary of the command line args. -""" - -import argparse -import sys -from dataclasses import dataclass -from io import TextIOWrapper -from typing import Union - -_read_type = argparse.FileType('r') -_write_type = argparse.FileType('w') - - -def _add_config(parser, name, **kwargs): - """"Add configuration file path argument.""" - opts = { - 'type': _read_type, - 'help': 'Path of configuration file.', - 'metavar': 'config_path', - **kwargs, - } - parser.add_argument(name, **opts) - - -def _add_result(parser, name, **kwargs): - """"Add results files paths argument.""" - opts = { - 'type': _read_type, - 'help': 'Path of one result file.', - 'metavar': 'result_path', - **kwargs, - } - parser.add_argument(name, **opts) - - -def _add_results(parser, name, **kwargs): - """"Add results files paths argument.""" - opts = { - 'nargs': '+', - 'type': _read_type, - 'help': 'Paths of result files.', - 'metavar': 'result_paths', - **kwargs, - } - parser.add_argument(name, **opts) - - -def _add_output(parser, name, **kwargs): - """"Add output file path argument.""" - opts = { - 'type': _write_type, - 'help': 'Path of output file.', - 'metavar': 'output_path', - **kwargs, - } - parser.add_argument(name, **opts) - - -def _add_metadata(parser, name, **kwargs): - opts = { - 'action': 'store_true', - **kwargs, - } - parser.add_argument(name, **opts) - - -def _add_test_cmd(subparsers): - test_parser = subparsers.add_parser('test') - _add_config(test_parser, 'config') - _add_output(test_parser, 'output') - - -def _add_diff_cmd(subparsers): - diff_parser = subparsers.add_parser('diff') - _add_metadata(diff_parser, '--metadata') - _add_result( - diff_parser, - 'base_result', - help='Base test result.', - metavar='base_result' - ) - _add_result( - diff_parser, - 'changed_result', - help='Changed test result.', - metavar='changed_result' - ) - _add_output(diff_parser, '--output', default=sys.stdout) - - -@dataclass -class TestArgs: - log: str - command: str - config: TextIOWrapper - output: TextIOWrapper - - -@dataclass -class DiffArgs: - log: str - command: str - metadata: bool - base_result: TextIOWrapper - changed_result: TextIOWrapper - output: TextIOWrapper - - -def get_args() -> Union[TestArgs, DiffArgs]: - """Define, parse and return command line args. - - Returns: - A dict containing the command line args. - """ - parser = argparse.ArgumentParser( - description= - 'Run performance tests against the OpenSearch plugin and various ANN ' - 'libaries.' - ) - - def define_args(): - """Define tool commands.""" - - # add log level arg - parser.add_argument( - '--log', - default='info', - type=str, - choices=['debug', - 'info', - 'warning', - 'error', - 'critical'], - help='Log level of the tool.' - ) - - subparsers = parser.add_subparsers( - title='commands', - dest='command', - help='sub-command help' - ) - subparsers.required = True - - # add subcommands - _add_test_cmd(subparsers) - _add_diff_cmd(subparsers) - - define_args() - args = parser.parse_args() - if args.command == 'test': - return TestArgs( - log=args.log, - command=args.command, - config=args.config, - output=args.output - ) - else: - return DiffArgs( - log=args.log, - command=args.command, - metadata=args.metadata, - base_result=args.base_result, - changed_result=args.changed_result, - output=args.output - ) diff --git a/benchmarks/perf-tool/okpt/io/config/parsers/base.py b/benchmarks/perf-tool/okpt/io/config/parsers/base.py deleted file mode 100644 index 795aab1b2..000000000 --- a/benchmarks/perf-tool/okpt/io/config/parsers/base.py +++ /dev/null @@ -1,67 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Base Parser class. - -Classes: - BaseParser: Base class for config parsers. - -Exceptions: - ConfigurationError: An error in the configuration syntax. -""" - -import os -from io import TextIOWrapper - -import cerberus - -from okpt.io.utils import reader - - -class ConfigurationError(Exception): - """Exception raised for errors in the tool configuration. - - Attributes: - message -- explanation of the error - """ - - def __init__(self, message: str): - self.message = f'{message}' - super().__init__(self.message) - - -def _get_validator_from_schema_name(schema_name: str): - """Get the corresponding Cerberus validator from a schema name.""" - curr_file_dir = os.path.dirname(os.path.abspath(__file__)) - schemas_dir = os.path.join(os.path.dirname(curr_file_dir), 'schemas') - schema_file_path = os.path.join(schemas_dir, f'{schema_name}.yml') - schema_obj = reader.parse_yaml_from_path(schema_file_path) - return cerberus.Validator(schema_obj) - - -class BaseParser: - """Base class for config parsers. - - Attributes: - validator: Cerberus validator for a particular schema - errors: Cerberus validation errors (if any are found during validation) - - Methods: - parse: Parse config. - """ - - def __init__(self, schema_name: str): - self.validator = _get_validator_from_schema_name(schema_name) - self.errors = '' - - def parse(self, file_obj: TextIOWrapper): - """Convert file object to dict, while validating against config schema.""" - config_obj = reader.parse_yaml(file_obj) - is_config_valid = self.validator.validate(config_obj) - if not is_config_valid: - raise ConfigurationError(self.validator.errors) - - return self.validator.document diff --git a/benchmarks/perf-tool/okpt/io/config/parsers/test.py b/benchmarks/perf-tool/okpt/io/config/parsers/test.py deleted file mode 100644 index c47e30ecc..000000000 --- a/benchmarks/perf-tool/okpt/io/config/parsers/test.py +++ /dev/null @@ -1,81 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Provides ToolParser. - -Classes: - ToolParser: Tool config parser. -""" -from dataclasses import dataclass -from io import TextIOWrapper -from typing import List - -from okpt.io.config.parsers import base -from okpt.test.steps.base import Step, StepConfig -from okpt.test.steps.factory import create_step - - -@dataclass -class TestConfig: - test_name: str - test_id: str - endpoint: str - port: int - timeout: int - num_runs: int - show_runs: bool - setup: List[Step] - steps: List[Step] - cleanup: List[Step] - - -class TestParser(base.BaseParser): - """Parser for Test config. - - Methods: - parse: Parse and validate the Test config. - """ - - def __init__(self): - super().__init__('test') - - def parse(self, file_obj: TextIOWrapper) -> TestConfig: - """See base class.""" - config_obj = super().parse(file_obj) - - implicit_step_config = dict() - if 'endpoint' in config_obj: - implicit_step_config['endpoint'] = config_obj['endpoint'] - - if 'port' in config_obj: - implicit_step_config['port'] = config_obj['port'] - - # Each step should have its own parse - take the config object and check if its valid - setup = [] - if 'setup' in config_obj: - setup = [create_step(StepConfig(step["name"], step, implicit_step_config)) for step in config_obj['setup']] - - steps = [create_step(StepConfig(step["name"], step, implicit_step_config)) for step in config_obj['steps']] - - cleanup = [] - if 'cleanup' in config_obj: - cleanup = [create_step(StepConfig(step["name"], step, implicit_step_config)) for step - in config_obj['cleanup']] - - test_config = TestConfig( - endpoint=config_obj['endpoint'], - port=config_obj['port'], - timeout=config_obj['timeout'], - test_name=config_obj['test_name'], - test_id=config_obj['test_id'], - num_runs=config_obj['num_runs'], - show_runs=config_obj['show_runs'], - setup=setup, - steps=steps, - cleanup=cleanup - ) - - return test_config diff --git a/benchmarks/perf-tool/okpt/io/config/parsers/util.py b/benchmarks/perf-tool/okpt/io/config/parsers/util.py deleted file mode 100644 index 454fec5a0..000000000 --- a/benchmarks/perf-tool/okpt/io/config/parsers/util.py +++ /dev/null @@ -1,116 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Utility functions for parsing""" - - -from okpt.io.config.parsers.base import ConfigurationError -from okpt.io.dataset import HDF5DataSet, BigANNNeighborDataSet, \ - BigANNVectorDataSet, DataSet, Context - - -def parse_dataset(dataset_format: str, dataset_path: str, - context: Context, custom_context=None) -> DataSet: - if dataset_format == 'hdf5': - return HDF5DataSet(dataset_path, context, custom_context) - - if dataset_format == 'bigann' and context == Context.NEIGHBORS: - return BigANNNeighborDataSet(dataset_path) - - if dataset_format == 'bigann': - return BigANNVectorDataSet(dataset_path) - - raise Exception("Unsupported data-set format") - - -def parse_string_param(key: str, first_map, second_map, default) -> str: - value = first_map.get(key) - if value is not None: - if type(value) is str: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - value = second_map.get(key) - if value is not None: - if type(value) is str: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - if default is None: - raise ConfigurationError("{} must be set".format(key)) - return default - - -def parse_int_param(key: str, first_map, second_map, default) -> int: - value = first_map.get(key) - if value is not None: - if type(value) is int: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - value = second_map.get(key) - if value is not None: - if type(value) is int: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - if default is None: - raise ConfigurationError("{} must be set".format(key)) - return default - - -def parse_bool_param(key: str, first_map, second_map, default) -> bool: - value = first_map.get(key) - if value is not None: - if type(value) is bool: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - value = second_map.get(key) - if value is not None: - if type(value) is bool: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - if default is None: - raise ConfigurationError("{} must be set".format(key)) - return default - - -def parse_dict_param(key: str, first_map, second_map, default) -> dict: - value = first_map.get(key) - if value is not None: - if type(value) is dict: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - value = second_map.get(key) - if value is not None: - if type(value) is dict: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - if default is None: - raise ConfigurationError("{} must be set".format(key)) - return default - - -def parse_list_param(key: str, first_map, second_map, default) -> list: - value = first_map.get(key) - if value is not None: - if type(value) is list: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - value = second_map.get(key) - if value is not None: - if type(value) is list: - return value - raise ConfigurationError("Invalid type for {}".format(key)) - - if default is None: - raise ConfigurationError("{} must be set".format(key)) - return default diff --git a/benchmarks/perf-tool/okpt/io/config/schemas/test.yml b/benchmarks/perf-tool/okpt/io/config/schemas/test.yml deleted file mode 100644 index 4d5c21a15..000000000 --- a/benchmarks/perf-tool/okpt/io/config/schemas/test.yml +++ /dev/null @@ -1,35 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -# defined using the cerberus validation API -# https://docs.python-cerberus.org/en/stable/index.html -endpoint: - type: string - default: "localhost" -port: - type: integer - default: 9200 -timeout: - type: integer - default: 60 -test_name: - type: string -test_id: - type: string -num_runs: - type: integer - default: 1 - min: 1 - max: 10000 -show_runs: - type: boolean - default: false -setup: - type: list -steps: - type: list -cleanup: - type: list diff --git a/benchmarks/perf-tool/okpt/io/dataset.py b/benchmarks/perf-tool/okpt/io/dataset.py deleted file mode 100644 index 001563bab..000000000 --- a/benchmarks/perf-tool/okpt/io/dataset.py +++ /dev/null @@ -1,222 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Defines DataSet interface and implements particular formats - -A DataSet is the basic functionality that it can be read in chunks, or -read completely and reset to the start. - -Currently, we support HDF5 formats from ann-benchmarks and big-ann-benchmarks -datasets. - -Classes: - HDF5DataSet: Format used in ann-benchmarks - BigANNNeighborDataSet: Neighbor format for big-ann-benchmarks - BigANNVectorDataSet: Vector format for big-ann-benchmarks -""" -import os -from abc import ABC, ABCMeta, abstractmethod -from enum import Enum -from typing import cast -import h5py -import numpy as np - -import struct - - -class Context(Enum): - """DataSet context enum. Can be used to add additional context for how a - data-set should be interpreted. - """ - INDEX = 1 - QUERY = 2 - NEIGHBORS = 3 - CUSTOM = 4 - - -class DataSet(ABC): - """DataSet interface. Used for reading data-sets from files. - - Methods: - read: Read a chunk of data from the data-set - size: Gets the number of items in the data-set - reset: Resets internal state of data-set to beginning - """ - __metaclass__ = ABCMeta - - @abstractmethod - def read(self, chunk_size: int): - pass - - @abstractmethod - def size(self): - pass - - @abstractmethod - def reset(self): - pass - - -class HDF5DataSet(DataSet): - """ Data-set format corresponding to `ANN Benchmarks - `_ - """ - - def __init__(self, dataset_path: str, context: Context, custom_context=None): - file = h5py.File(dataset_path) - self.data = cast(h5py.Dataset, file[self._parse_context(context, custom_context)]) - self.current = 0 - - def read(self, chunk_size: int): - if self.current >= self.size(): - return None - - end_i = self.current + chunk_size - if end_i > self.size(): - end_i = self.size() - - v = cast(np.ndarray, self.data[self.current:end_i]) - self.current = end_i - return v - - def size(self): - return self.data.len() - - def reset(self): - self.current = 0 - - @staticmethod - def _parse_context(context: Context, custom_context=None) -> str: - if context == Context.NEIGHBORS: - return "neighbors" - - if context == Context.INDEX: - return "train" - - if context == Context.QUERY: - return "test" - - if context == Context.CUSTOM: - return custom_context - - raise Exception("Unsupported context") - - -class BigANNNeighborDataSet(DataSet): - """ Data-set format for neighbor data-sets for `Big ANN Benchmarks - `_""" - - def __init__(self, dataset_path: str): - self.file = open(dataset_path, 'rb') - self.file.seek(0, os.SEEK_END) - num_bytes = self.file.tell() - self.file.seek(0) - - if num_bytes < 8: - raise Exception("File is invalid") - - self.num_queries = int.from_bytes(self.file.read(4), "little") - self.k = int.from_bytes(self.file.read(4), "little") - - # According to the website, the number of bytes that will follow will - # be: num_queries X K x sizeof(uint32_t) bytes + num_queries X K x - # sizeof(float) - if (num_bytes - 8) != 2 * (self.num_queries * self.k * 4): - raise Exception("File is invalid") - - self.current = 0 - - def read(self, chunk_size: int): - if self.current >= self.size(): - return None - - end_i = self.current + chunk_size - if end_i > self.size(): - end_i = self.size() - - v = [[int.from_bytes(self.file.read(4), "little") for _ in - range(self.k)] for _ in range(end_i - self.current)] - - self.current = end_i - return v - - def size(self): - return self.num_queries - - def reset(self): - self.file.seek(8) - self.current = 0 - - -class BigANNVectorDataSet(DataSet): - """ Data-set format for vector data-sets for `Big ANN Benchmarks - `_ - """ - - def __init__(self, dataset_path: str): - self.file = open(dataset_path, 'rb') - self.file.seek(0, os.SEEK_END) - num_bytes = self.file.tell() - self.file.seek(0) - - if num_bytes < 8: - raise Exception("File is invalid") - - self.num_points = int.from_bytes(self.file.read(4), "little") - self.dimension = int.from_bytes(self.file.read(4), "little") - bytes_per_num = self._get_data_size(dataset_path) - - if (num_bytes - 8) != self.num_points * self.dimension * bytes_per_num: - raise Exception("File is invalid") - - self.reader = self._value_reader(dataset_path) - self.current = 0 - - def read(self, chunk_size: int): - if self.current >= self.size(): - return None - - end_i = self.current + chunk_size - if end_i > self.size(): - end_i = self.size() - - v = np.asarray([self._read_vector() for _ in - range(end_i - self.current)]) - self.current = end_i - return v - - def _read_vector(self): - return np.asarray([self.reader(self.file) for _ in - range(self.dimension)]) - - def size(self): - return self.num_points - - def reset(self): - self.file.seek(8) # Seek to 8 bytes to skip re-reading metadata - self.current = 0 - - @staticmethod - def _get_data_size(file_name): - ext = file_name.split('.')[-1] - if ext == "u8bin": - return 1 - - if ext == "fbin": - return 4 - - raise Exception("Unknown extension") - - @staticmethod - def _value_reader(file_name): - ext = file_name.split('.')[-1] - if ext == "u8bin": - return lambda file: float(int.from_bytes(file.read(1), "little")) - - if ext == "fbin": - return lambda file: struct.unpack(' TextIOWrapper: - """Given a file path, get a readable file object. - - Args: - file path - - Returns: - Writeable file object - """ - return open(path, 'r', encoding='UTF-8') - - -def parse_yaml(file: TextIOWrapper) -> Dict[str, Any]: - """Parses YAML file from file object. - - Args: - file: file object to parse - - Returns: - A dict representing the YAML file. - """ - return yaml.load(file, Loader=yaml.SafeLoader) - - -def parse_yaml_from_path(path: str) -> Dict[str, Any]: - """Parses YAML file from file path. - - Args: - path: file path to parse - - Returns: - A dict representing the YAML file. - """ - file = reader.get_file_obj(path) - return parse_yaml(file) - - -def parse_json(file: TextIOWrapper) -> Dict[str, Any]: - """Parses JSON file from file object. - - Args: - file: file object to parse - - Returns: - A dict representing the JSON file. - """ - return json.load(file) - - -def parse_json_from_path(path: str) -> Dict[str, Any]: - """Parses JSON file from file path. - - Args: - path: file path to parse - - Returns: - A dict representing the JSON file. - """ - file = reader.get_file_obj(path) - return json.load(file) diff --git a/benchmarks/perf-tool/okpt/io/utils/writer.py b/benchmarks/perf-tool/okpt/io/utils/writer.py deleted file mode 100644 index 1f14bfd94..000000000 --- a/benchmarks/perf-tool/okpt/io/utils/writer.py +++ /dev/null @@ -1,40 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -"""Provides functions for writing to file. - -Functions: - get_file_obj(): Get a writeable file object. - write_json(): Writes a python dictionary to a JSON file -""" - -import json -from io import TextIOWrapper -from typing import Any, Dict, TextIO, Union - - -def get_file_obj(path: str) -> TextIOWrapper: - """Get a writeable file object from a file path. - - Args: - file path - - Returns: - Writeable file object - """ - return open(path, 'w', encoding='UTF-8') - - -def write_json(data: Dict[str, Any], - file: Union[TextIOWrapper, TextIO], - pretty=False): - """Writes a dictionary to a JSON file. - - Args: - data: A dict to write to JSON. - file: Path of output file. - """ - indent = 2 if pretty else 0 - json.dump(data, file, indent=indent) diff --git a/benchmarks/perf-tool/okpt/main.py b/benchmarks/perf-tool/okpt/main.py deleted file mode 100644 index 3e6e022d4..000000000 --- a/benchmarks/perf-tool/okpt/main.py +++ /dev/null @@ -1,55 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -""" Runner script that serves as the main controller of the testing tool.""" - -import logging -import sys -from typing import cast - -from okpt.diff import diff -from okpt.io import args -from okpt.io.config.parsers import test -from okpt.io.utils import reader, writer -from okpt.test import runner - - -def main(): - """Main function of entry module.""" - cli_args = args.get_args() - output = cli_args.output - if cli_args.log: - log_level = getattr(logging, cli_args.log.upper()) - logging.basicConfig(level=log_level) - - if cli_args.command == 'test': - cli_args = cast(args.TestArgs, cli_args) - - # parse config - parser = test.TestParser() - test_config = parser.parse(cli_args.config) - logging.info('Configs are valid.') - - # run tests - test_runner = runner.TestRunner(test_config=test_config) - test_result = test_runner.execute() - - # write test results - logging.debug( - f'Test Result:\n {writer.write_json(test_result, sys.stdout, pretty=True)}' - ) - writer.write_json(test_result, output, pretty=True) - elif cli_args.command == 'diff': - cli_args = cast(args.DiffArgs, cli_args) - - # parse test results - base_result = reader.parse_json(cli_args.base_result) - changed_result = reader.parse_json(cli_args.changed_result) - - # get diff - diff_result = diff.Diff(base_result, changed_result, - cli_args.metadata).diff() - writer.write_json(data=diff_result, file=output, pretty=True) diff --git a/benchmarks/perf-tool/okpt/test/__init__.py b/benchmarks/perf-tool/okpt/test/__init__.py deleted file mode 100644 index ff4fd04d1..000000000 --- a/benchmarks/perf-tool/okpt/test/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. diff --git a/benchmarks/perf-tool/okpt/test/profile.py b/benchmarks/perf-tool/okpt/test/profile.py deleted file mode 100644 index d96860f9a..000000000 --- a/benchmarks/perf-tool/okpt/test/profile.py +++ /dev/null @@ -1,86 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Provides decorators to profile functions. - -The decorators work by adding a `measureable` (time, memory, etc) field to a -dictionary returned by the wrapped function. So the wrapped functions must -return a dictionary in order to be profiled. -""" -import functools -import time -from typing import Callable - - -class TimerStoppedWithoutStartingError(Exception): - """Error raised when Timer is stopped without having been started.""" - - def __init__(self): - super().__init__() - self.message = 'Timer must call start() before calling end().' - - -class _Timer(): - """Timer class for timing. - - Methods: - start: Starts the timer. - end: Stops the timer and returns the time elapsed since start. - - Raises: - TimerStoppedWithoutStartingError: Timer must start before ending. - """ - - def __init__(self): - self.start_time = None - - def start(self): - """Starts the timer.""" - self.start_time = time.perf_counter() - - def end(self) -> float: - """Stops the timer. - - Returns: - The time elapsed in milliseconds. - """ - # ensure timer has started before ending - if self.start_time is None: - raise TimerStoppedWithoutStartingError() - - elapsed = (time.perf_counter() - self.start_time) * 1000 - self.start_time = None - return elapsed - - -def took(f: Callable): - """Profiles a functions execution time. - - Args: - f: Function to profile. - - Returns: - A function that wraps the passed in function and adds a time took field - to the return value. - """ - - @functools.wraps(f) - def wrapper(*args, **kwargs): - """Wrapper function.""" - timer = _Timer() - timer.start() - result = f(*args, **kwargs) - time_took = timer.end() - - # if result already has a `took` field, don't modify the result - if isinstance(result, dict) and 'took' in result: - return result - # `result` may not be a dictionary, so it may not be unpackable - elif isinstance(result, dict): - return {**result, 'took': time_took} - return {'took': time_took} - - return wrapper diff --git a/benchmarks/perf-tool/okpt/test/runner.py b/benchmarks/perf-tool/okpt/test/runner.py deleted file mode 100644 index 150154691..000000000 --- a/benchmarks/perf-tool/okpt/test/runner.py +++ /dev/null @@ -1,107 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Provides a test runner class.""" -import logging -import platform -import sys -from datetime import datetime -from typing import Any, Dict, List - -import psutil - -from okpt.io.config.parsers import test -from okpt.test.test import Test, get_avg - - -def _aggregate_runs(runs: List[Dict[str, Any]]): - """Aggregates and averages a list of test results. - - Args: - results: A list of test results. - num_runs: Number of times the tests were ran. - - Returns: - A dictionary containing the averages of the test results. - """ - aggregate: Dict[str, Any] = {} - for run in runs: - for key, value in run.items(): - if key in aggregate: - aggregate[key].append(value) - else: - aggregate[key] = [value] - - aggregate = {key: get_avg(value) for key, value in aggregate.items()} - return aggregate - - -class TestRunner: - """Test runner class for running tests and aggregating the results. - - Methods: - execute: Run the tests and aggregate the results. - """ - - def __init__(self, test_config: test.TestConfig): - """"Initializes test state.""" - self.test_config = test_config - self.test = Test(test_config) - - def _get_metadata(self): - """"Retrieves the test metadata.""" - svmem = psutil.virtual_memory() - return { - 'test_name': - self.test_config.test_name, - 'test_id': - self.test_config.test_id, - 'date': - datetime.now().strftime('%m/%d/%Y %H:%M:%S'), - 'python_version': - sys.version, - 'os_version': - platform.platform(), - 'processor': - platform.processor() + ', ' + - str(psutil.cpu_count(logical=True)) + ' cores', - 'memory': - str(svmem.used) + ' (used) / ' + str(svmem.available) + - ' (available) / ' + str(svmem.total) + ' (total)', - } - - def execute(self) -> Dict[str, Any]: - """Runs the tests and aggregates the results. - - Returns: - A dictionary containing the aggregate of test results. - """ - logging.info('Setting up tests.') - self.test.setup() - logging.info('Beginning to run tests.') - runs = [] - for i in range(self.test_config.num_runs): - logging.info( - f'Running test {i + 1} of {self.test_config.num_runs}' - ) - runs.append(self.test.execute()) - - logging.info('Finished running tests.') - aggregate = _aggregate_runs(runs) - - # add metadata to test results - test_result = { - 'metadata': - self._get_metadata(), - 'results': - aggregate - } - - # include info about all test runs if specified in config - if self.test_config.show_runs: - test_result['runs'] = runs - - return test_result diff --git a/benchmarks/perf-tool/okpt/test/steps/base.py b/benchmarks/perf-tool/okpt/test/steps/base.py deleted file mode 100644 index 829980421..000000000 --- a/benchmarks/perf-tool/okpt/test/steps/base.py +++ /dev/null @@ -1,60 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -"""Provides base Step interface.""" - -from dataclasses import dataclass -from typing import Any, Dict, List - -from okpt.test import profile - - -@dataclass -class StepConfig: - step_name: str - config: Dict[str, object] - implicit_config: Dict[str, object] - - -class Step: - """Test step interface. - - Attributes: - label: Name of the step. - - Methods: - execute: Run the step and return a step response with the label and - corresponding measures. - """ - - label = 'base_step' - - def __init__(self, step_config: StepConfig): - self.step_config = step_config - - def _action(self): - """Step logic/behavior to be executed and profiled.""" - pass - - def _get_measures(self) -> List[str]: - """Gets the measures for a particular test""" - pass - - def execute(self) -> List[Dict[str, Any]]: - """Execute step logic while profiling various measures. - - Returns: - Dict containing step label and various step measures. - """ - action = self._action - - # profile the action with measure decorators - add if necessary - action = getattr(profile, 'took')(action) - - result = action() - if isinstance(result, dict): - return [{'label': self.label, **result}] - - raise ValueError('Invalid return by a step') diff --git a/benchmarks/perf-tool/okpt/test/steps/factory.py b/benchmarks/perf-tool/okpt/test/steps/factory.py deleted file mode 100644 index 2033f2672..000000000 --- a/benchmarks/perf-tool/okpt/test/steps/factory.py +++ /dev/null @@ -1,50 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -"""Factory for creating steps.""" - -from okpt.io.config.parsers.base import ConfigurationError -from okpt.test.steps.base import Step, StepConfig - -from okpt.test.steps.steps import CreateIndexStep, DisableRefreshStep, RefreshIndexStep, DeleteIndexStep, \ - TrainModelStep, DeleteModelStep, ForceMergeStep, ClearCacheStep, IngestStep, IngestMultiFieldStep, \ - IngestNestedFieldStep, QueryStep, QueryWithFilterStep, QueryNestedFieldStep, GetStatsStep, WarmupStep - - -def create_step(step_config: StepConfig) -> Step: - if step_config.step_name == CreateIndexStep.label: - return CreateIndexStep(step_config) - elif step_config.step_name == DisableRefreshStep.label: - return DisableRefreshStep(step_config) - elif step_config.step_name == RefreshIndexStep.label: - return RefreshIndexStep(step_config) - elif step_config.step_name == TrainModelStep.label: - return TrainModelStep(step_config) - elif step_config.step_name == DeleteModelStep.label: - return DeleteModelStep(step_config) - elif step_config.step_name == DeleteIndexStep.label: - return DeleteIndexStep(step_config) - elif step_config.step_name == IngestStep.label: - return IngestStep(step_config) - elif step_config.step_name == IngestMultiFieldStep.label: - return IngestMultiFieldStep(step_config) - elif step_config.step_name == IngestNestedFieldStep.label: - return IngestNestedFieldStep(step_config) - elif step_config.step_name == QueryStep.label: - return QueryStep(step_config) - elif step_config.step_name == QueryWithFilterStep.label: - return QueryWithFilterStep(step_config) - elif step_config.step_name == QueryNestedFieldStep.label: - return QueryNestedFieldStep(step_config) - elif step_config.step_name == ForceMergeStep.label: - return ForceMergeStep(step_config) - elif step_config.step_name == ClearCacheStep.label: - return ClearCacheStep(step_config) - elif step_config.step_name == GetStatsStep.label: - return GetStatsStep(step_config) - elif step_config.step_name == WarmupStep.label: - return WarmupStep(step_config) - - raise ConfigurationError(f'Invalid step {step_config.step_name}') diff --git a/benchmarks/perf-tool/okpt/test/steps/steps.py b/benchmarks/perf-tool/okpt/test/steps/steps.py deleted file mode 100644 index 99b2728dc..000000000 --- a/benchmarks/perf-tool/okpt/test/steps/steps.py +++ /dev/null @@ -1,987 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. -"""Provides steps for OpenSearch tests. - -Some OpenSearch operations return a `took` field in the response body, -so the profiling decorators aren't needed for some functions. -""" -import json -from abc import abstractmethod -from typing import Any, Dict, List - -import numpy as np -import requests -import time - -from opensearchpy import OpenSearch, RequestsHttpConnection - -from okpt.io.config.parsers.base import ConfigurationError -from okpt.io.config.parsers.util import parse_string_param, parse_int_param, parse_dataset, parse_bool_param, \ - parse_list_param -from okpt.io.dataset import Context -from okpt.io.utils.reader import parse_json_from_path -from okpt.test.steps import base -from okpt.test.steps.base import StepConfig - - -class OpenSearchStep(base.Step): - """See base class.""" - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.endpoint = parse_string_param('endpoint', step_config.config, - step_config.implicit_config, - 'localhost') - default_port = 9200 if self.endpoint == 'localhost' else 80 - self.port = parse_int_param('port', step_config.config, - step_config.implicit_config, default_port) - self.timeout = parse_int_param('timeout', step_config.config, {}, 60) - self.opensearch = get_opensearch_client(str(self.endpoint), - int(self.port), int(self.timeout)) - - -class CreateIndexStep(OpenSearchStep): - """See base class.""" - - label = 'create_index' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - index_spec = parse_string_param('index_spec', step_config.config, {}, - None) - self.body = parse_json_from_path(index_spec) - if self.body is None: - raise ConfigurationError('Index body must be passed in') - - def _action(self): - """Creates an OpenSearch index, applying the index settings/mappings. - - Returns: - An OpenSearch index creation response body. - """ - self.opensearch.indices.create(index=self.index_name, body=self.body) - return {} - - def _get_measures(self) -> List[str]: - return ['took'] - - -class DisableRefreshStep(OpenSearchStep): - """See base class.""" - - label = 'disable_refresh' - - def _action(self): - """Disables the refresh interval for an OpenSearch index. - - Returns: - An OpenSearch index settings update response body. - """ - self.opensearch.indices.put_settings( - body={'index': { - 'refresh_interval': -1 - }}) - - return {} - - def _get_measures(self) -> List[str]: - return ['took'] - - -class RefreshIndexStep(OpenSearchStep): - """See base class.""" - - label = 'refresh_index' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - - def _action(self): - while True: - try: - self.opensearch.indices.refresh(index=self.index_name) - return {'store_kb': get_index_size_in_kb(self.opensearch, - self.index_name)} - except: - pass - - def _get_measures(self) -> List[str]: - return ['took', 'store_kb'] - - -class ForceMergeStep(OpenSearchStep): - """See base class.""" - - label = 'force_merge' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - self.max_num_segments = parse_int_param('max_num_segments', - step_config.config, {}, None) - - def _action(self): - while True: - try: - self.opensearch.indices.forcemerge( - index=self.index_name, - max_num_segments=self.max_num_segments) - return {} - except: - pass - - def _get_measures(self) -> List[str]: - return ['took'] - -class ClearCacheStep(OpenSearchStep): - """See base class.""" - - label = 'clear_cache' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - - def _action(self): - while True: - try: - self.opensearch.indices.clear_cache( - index=self.index_name) - return {} - except: - pass - - def _get_measures(self) -> List[str]: - return ['took'] - - -class WarmupStep(OpenSearchStep): - """See base class.""" - - label = 'warmup_operation' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.index_name = parse_string_param('index_name', step_config.config, {}, - None) - - def _action(self): - """Performs warmup operation on an index.""" - warmup_operation(self.endpoint, self.port, self.index_name) - return {} - - def _get_measures(self) -> List[str]: - return ['took'] - - -class TrainModelStep(OpenSearchStep): - """See base class.""" - - label = 'train_model' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - self.model_id = parse_string_param('model_id', step_config.config, {}, - 'Test') - self.train_index_name = parse_string_param('train_index', - step_config.config, {}, None) - self.train_index_field = parse_string_param('train_field', - step_config.config, {}, - None) - self.dimension = parse_int_param('dimension', step_config.config, {}, - None) - self.description = parse_string_param('description', step_config.config, - {}, 'Default') - self.max_training_vector_count = parse_int_param( - 'max_training_vector_count', step_config.config, {}, 10000000000000) - - method_spec = parse_string_param('method_spec', step_config.config, {}, - None) - self.method = parse_json_from_path(method_spec) - if self.method is None: - raise ConfigurationError('method must be passed in') - - def _action(self): - """Train a model for an index. - - Returns: - The trained model - """ - - # Build body - body = { - 'training_index': self.train_index_name, - 'training_field': self.train_index_field, - 'description': self.description, - 'dimension': self.dimension, - 'method': self.method, - 'max_training_vector_count': self.max_training_vector_count - } - - # So, we trained the model. Now we need to wait until we have to wait - # until the model is created. Poll every - # 1/10 second - requests.post('http://' + self.endpoint + ':' + str(self.port) + - '/_plugins/_knn/models/' + str(self.model_id) + '/_train', - json.dumps(body), - headers={'content-type': 'application/json'}) - - sleep_time = 0.1 - timeout = 100000 - i = 0 - while i < timeout: - time.sleep(sleep_time) - model_response = get_model(self.endpoint, self.port, self.model_id) - if 'state' in model_response.keys() and model_response['state'] == \ - 'created': - return {} - i += 1 - - raise TimeoutError('Failed to create model') - - def _get_measures(self) -> List[str]: - return ['took'] - - -class DeleteModelStep(OpenSearchStep): - """See base class.""" - - label = 'delete_model' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - self.model_id = parse_string_param('model_id', step_config.config, {}, - 'Test') - - def _action(self): - """Train a model for an index. - - Returns: - The trained model - """ - delete_model(self.endpoint, self.port, self.model_id) - return {} - - def _get_measures(self) -> List[str]: - return ['took'] - - -class DeleteIndexStep(OpenSearchStep): - """See base class.""" - - label = 'delete_index' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - - def _action(self): - """Delete the index - - Returns: - An empty dict - """ - delete_index(self.opensearch, self.index_name) - return {} - - def _get_measures(self) -> List[str]: - return ['took'] - - -class BaseIngestStep(OpenSearchStep): - """See base class.""" - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - self.field_name = parse_string_param('field_name', step_config.config, - {}, None) - self.bulk_size = parse_int_param('bulk_size', step_config.config, {}, - 300) - self.implicit_config = step_config.implicit_config - dataset_format = parse_string_param('dataset_format', - step_config.config, {}, 'hdf5') - dataset_path = parse_string_param('dataset_path', step_config.config, - {}, None) - self.dataset = parse_dataset(dataset_format, dataset_path, - Context.INDEX) - - self.input_doc_count = parse_int_param('doc_count', step_config.config, {}, - self.dataset.size()) - self.doc_count = min(self.input_doc_count, self.dataset.size()) - - def _action(self): - - def action(doc_id): - return {'index': {'_index': self.index_name, '_id': doc_id}} - - # Maintain minimal state outside of this loop. For large data sets, too - # much state may cause out of memory failure - for i in range(0, self.doc_count, self.bulk_size): - partition = self.dataset.read(self.bulk_size) - self._handle_data_bulk(partition, action, i) - self.dataset.reset() - - return {} - - def _get_measures(self) -> List[str]: - return ['took'] - - @abstractmethod - def _handle_data_bulk(self, partition, action, i): - pass - - -class IngestStep(BaseIngestStep): - """See base class.""" - - label = 'ingest' - - def _handle_data_bulk(self, partition, action, i): - if partition is None: - return - body = bulk_transform(partition, self.field_name, action, i) - bulk_index(self.opensearch, self.index_name, body) - - -class IngestMultiFieldStep(BaseIngestStep): - """See base class.""" - - label = 'ingest_multi_field' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - dataset_path = parse_string_param('dataset_path', step_config.config, - {}, None) - - self.attributes_dataset_name = parse_string_param('attributes_dataset_name', - step_config.config, {}, None) - - self.attributes_dataset = parse_dataset('hdf5', dataset_path, - Context.CUSTOM, self.attributes_dataset_name) - - self.attribute_spec = parse_list_param('attribute_spec', - step_config.config, {}, []) - - self.partition_attr = self.attributes_dataset.read(self.doc_count) - self.action_buffer = None - - def _handle_data_bulk(self, partition, action, i): - if partition is None: - return - body = self.bulk_transform_with_attributes(partition, self.partition_attr, self.field_name, - action, i, self.attribute_spec) - bulk_index(self.opensearch, self.index_name, body) - - def bulk_transform_with_attributes(self, partition: np.ndarray, partition_attr, field_name: str, - action, offset: int, attributes_def) -> List[Dict[str, Any]]: - """Partitions and transforms a list of vectors into OpenSearch's bulk - injection format. - Args: - partition: An array of vectors to transform. - partition_attr: dictionary of additional data to transform - field_name: field name for action - action: Bulk API action. - offset: to start counting from - attributes_def: definition of additional doc fields - Returns: - An array of transformed vectors in bulk format. - """ - actions = [] - _ = [ - actions.extend([action(i + offset), None]) - for i in range(len(partition)) - ] - idx = 1 - part_list = partition.tolist() - for i in range(len(partition)): - actions[idx] = {field_name: part_list[i]} - attr_idx = i + offset - attr_def_idx = 0 - for attribute in attributes_def: - attr_def_name = attribute['name'] - attr_def_type = attribute['type'] - - if attr_def_type == 'str': - val = partition_attr[attr_idx][attr_def_idx].decode() - if val != 'None': - actions[idx][attr_def_name] = val - elif attr_def_type == 'int': - val = int(partition_attr[attr_idx][attr_def_idx].decode()) - actions[idx][attr_def_name] = val - attr_def_idx += 1 - idx += 2 - - return actions - - -class IngestNestedFieldStep(BaseIngestStep): - """See base class.""" - - label = 'ingest_nested_field' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - dataset_path = parse_string_param('dataset_path', step_config.config, - {}, None) - - self.attributes_dataset_name = parse_string_param('attributes_dataset_name', - step_config.config, {}, None) - - self.attributes_dataset = parse_dataset('hdf5', dataset_path, - Context.CUSTOM, self.attributes_dataset_name) - - self.attribute_spec = parse_list_param('attribute_spec', - step_config.config, {}, []) - - self.partition_attr = self.attributes_dataset.read(self.doc_count) - - if self.dataset.size() != self.doc_count: - raise ValueError("custom doc_count is not supported for nested field") - self.action_buffer = None - self.action_parent_id = None - self.count = 0 - - def _handle_data_bulk(self, partition, action, i): - if partition is None: - return - body = self.bulk_transform_with_nested(partition, self.partition_attr, self.field_name, - action, i, self.attribute_spec) - if len(body) > 0: - bulk_index(self.opensearch, self.index_name, body) - - def bulk_transform_with_nested(self, partition: np.ndarray, partition_attr, field_name: str, - action, offset: int, attributes_def) -> List[Dict[str, Any]]: - """Partitions and transforms a list of vectors into OpenSearch's bulk - injection format. - Args: - partition: An array of vectors to transform. - partition_attr: dictionary of additional data to transform - field_name: field name for action - action: Bulk API action. - offset: to start counting from - attributes_def: definition of additional doc fields - Returns: - An array of transformed vectors in bulk format. - """ - # offset is index of start row. We need number of parent doc - 1. - # The number of parent document can be calculated by using partition_attr data. - # We need to keep the last parent doc aside so that additional data can be added later. - parent_id_idx = next((index for (index, d) in enumerate(attributes_def) if d.get('name') == 'parent_id'), None) - if parent_id_idx is None: - raise ValueError("parent_id should be provided as attribute spec") - if attributes_def[parent_id_idx]['type'] != 'int': - raise ValueError("parent_id should be int type") - - first_index = offset - last_index = offset + len(partition) - 1 - num_of_actions = int(partition_attr[last_index][parent_id_idx].decode()) - int(partition_attr[first_index][parent_id_idx].decode()) - if self.action_buffer is None: - self.action_buffer = {"nested_field": []} - self.action_parent_id = int(partition_attr[first_index][parent_id_idx].decode()) - - actions = [] - _ = [ - actions.extend([action(i + self.action_parent_id), None]) - for i in range(num_of_actions) - ] - - idx = 1 - part_list = partition.tolist() - for i in range(len(partition)): - self.count += 1 - nested = {field_name: part_list[i]} - attr_idx = i + offset - attr_def_idx = 0 - current_parent_id = None - for attribute in attributes_def: - attr_def_name = attribute['name'] - attr_def_type = attribute['type'] - if attr_def_name == "parent_id": - current_parent_id = int(partition_attr[attr_idx][attr_def_idx].decode()) - attr_def_idx += 1 - continue - - if attr_def_type == 'str': - val = partition_attr[attr_idx][attr_def_idx].decode() - if val != 'None': - nested[attr_def_name] = val - elif attr_def_type == 'int': - val = int(partition_attr[attr_idx][attr_def_idx].decode()) - nested[attr_def_name] = val - attr_def_idx += 1 - - if self.action_parent_id == current_parent_id: - self.action_buffer["nested_field"].append(nested) - else: - actions.extend([action(self.action_parent_id), self.action_buffer]) - self.action_buffer = {"nested_field": []} - self.action_buffer["nested_field"].append(nested) - self.action_parent_id = current_parent_id - idx += 2 - - if self.count == self.doc_count: - actions.extend([action(self.action_parent_id), self.action_buffer]) - - return actions - - -class BaseQueryStep(OpenSearchStep): - """See base class.""" - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.k = parse_int_param('k', step_config.config, {}, 100) - self.r = parse_int_param('r', step_config.config, {}, 1) - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - self.field_name = parse_string_param('field_name', step_config.config, - {}, None) - self.calculate_recall = parse_bool_param('calculate_recall', - step_config.config, {}, False) - dataset_format = parse_string_param('dataset_format', - step_config.config, {}, 'hdf5') - dataset_path = parse_string_param('dataset_path', - step_config.config, {}, None) - self.dataset = parse_dataset(dataset_format, dataset_path, - Context.QUERY) - - input_query_count = parse_int_param('query_count', - step_config.config, {}, - self.dataset.size()) - self.query_count = min(input_query_count, self.dataset.size()) - - self.neighbors_format = parse_string_param('neighbors_format', - step_config.config, {}, 'hdf5') - self.neighbors_path = parse_string_param('neighbors_path', - step_config.config, {}, None) - - def _action(self): - - results = {} - query_responses = [] - for _ in range(self.query_count): - query = self.dataset.read(1) - if query is None: - break - query_responses.append( - query_index(self.opensearch, self.index_name, - self.get_body(query[0]) , self.get_exclude_fields())) - - results['took'] = [ - float(query_response['took']) for query_response in query_responses - ] - results['client_time'] = [ - float(query_response['client_time']) for query_response in query_responses - ] - results['memory_kb'] = get_cache_size_in_kb(self.endpoint, self.port) - - if self.calculate_recall: - ids = [[int(hit['_id']) - for hit in query_response['hits']['hits']] - for query_response in query_responses] - results['recall@K'] = recall_at_r(ids, self.neighbors, - self.k, self.k, self.query_count) - self.neighbors.reset() - results[f'recall@{str(self.r)}'] = recall_at_r( - ids, self.neighbors, self.r, self.k, self.query_count) - self.neighbors.reset() - - self.dataset.reset() - - return results - - def _get_measures(self) -> List[str]: - measures = ['took', 'memory_kb', 'client_time'] - - if self.calculate_recall: - measures.extend(['recall@K', f'recall@{str(self.r)}']) - - return measures - - @abstractmethod - def get_body(self, vec): - pass - - def get_exclude_fields(self): - return [self.field_name] - -class QueryStep(BaseQueryStep): - """See base class.""" - - label = 'query' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - self.neighbors = parse_dataset(self.neighbors_format, self.neighbors_path, - Context.NEIGHBORS) - self.implicit_config = step_config.implicit_config - - def get_body(self, vec): - return { - 'size': self.k, - 'query': { - 'knn': { - self.field_name: { - 'vector': vec, - 'k': self.k - } - } - } - } - - -class QueryWithFilterStep(BaseQueryStep): - """See base class.""" - - label = 'query_with_filter' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - neighbors_dataset = parse_string_param('neighbors_dataset', - step_config.config, {}, None) - - self.neighbors = parse_dataset(self.neighbors_format, self.neighbors_path, - Context.CUSTOM, neighbors_dataset) - - self.filter_type = parse_string_param('filter_type', step_config.config, {}, 'SCRIPT') - self.filter_spec = parse_string_param('filter_spec', step_config.config, {}, None) - self.score_script_similarity = parse_string_param('score_script_similarity', step_config.config, {}, 'l2') - - self.implicit_config = step_config.implicit_config - - def get_body(self, vec): - filter_json = json.load(open(self.filter_spec)) - if self.filter_type == 'FILTER': - return { - 'size': self.k, - 'query': { - 'knn': { - self.field_name: { - 'vector': vec, - 'k': self.k, - 'filter': filter_json - } - } - } - } - elif self.filter_type == 'SCRIPT': - return { - 'size': self.k, - 'query': { - 'script_score': { - 'query': { - 'bool': { - 'filter': filter_json - } - }, - 'script': { - 'source': 'knn_score', - 'lang': 'knn', - 'params': { - 'field': self.field_name, - 'query_value': vec, - 'space_type': self.score_script_similarity - } - } - } - } - } - elif self.filter_type == 'BOOL_POST_FILTER': - return { - 'size': self.k, - 'query': { - 'bool': { - 'filter': filter_json, - 'must': [ - { - 'knn': { - self.field_name: { - 'vector': vec, - 'k': self.k - } - } - } - ] - } - } - } - else: - raise ConfigurationError('Not supported filter type {}'.format(self.filter_type)) - -class QueryNestedFieldStep(BaseQueryStep): - """See base class.""" - - label = 'query_nested_field' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - neighbors_dataset = parse_string_param('neighbors_dataset', - step_config.config, {}, None) - - self.neighbors = parse_dataset(self.neighbors_format, self.neighbors_path, - Context.CUSTOM, neighbors_dataset) - - self.implicit_config = step_config.implicit_config - - def get_body(self, vec): - return { - 'size': self.k, - 'query': { - 'nested': { - 'path': 'nested_field', - 'query': { - 'knn': { - 'nested_field.' + self.field_name: { - 'vector': vec, - 'k': self.k - } - } - } - } - } - } - -class GetStatsStep(OpenSearchStep): - """See base class.""" - - label = 'get_stats' - - def __init__(self, step_config: StepConfig): - super().__init__(step_config) - - self.index_name = parse_string_param('index_name', step_config.config, - {}, None) - - def _action(self): - """Get stats for cluster/index etc. - - Returns: - Stats with following info: - - number of committed and search segments in the index - """ - results = {} - segment_stats = get_segment_stats(self.opensearch, self.index_name) - shards = segment_stats["indices"][self.index_name]["shards"] - num_of_committed_segments = 0 - num_of_search_segments = 0; - for shard_key in shards.keys(): - for segment in shards[shard_key]: - num_of_committed_segments += segment["num_committed_segments"] - num_of_search_segments += segment["num_search_segments"] - - results['committed_segments'] = num_of_committed_segments - results['search_segments'] = num_of_search_segments - return results - - def _get_measures(self) -> List[str]: - return ['committed_segments', 'search_segments'] - -# Helper functions - (AKA not steps) -def bulk_transform(partition: np.ndarray, field_name: str, action, - offset: int) -> List[Dict[str, Any]]: - """Partitions and transforms a list of vectors into OpenSearch's bulk - injection format. - Args: - offset: to start counting from - partition: An array of vectors to transform. - field_name: field name for action - action: Bulk API action. - Returns: - An array of transformed vectors in bulk format. - """ - actions = [] - _ = [ - actions.extend([action(i + offset), None]) - for i in range(len(partition)) - ] - actions[1::2] = [{field_name: vec} for vec in partition.tolist()] - return actions - - -def delete_index(opensearch: OpenSearch, index_name: str): - """Deletes an OpenSearch index. - - Args: - opensearch: An OpenSearch client. - index_name: Name of the OpenSearch index to be deleted. - """ - opensearch.indices.delete(index=index_name, ignore=[400, 404]) - - -def get_model(endpoint, port, model_id): - """ - Retrieve a model from an OpenSearch cluster - Args: - endpoint: Endpoint OpenSearch is running on - port: Port OpenSearch is running on - model_id: ID of model to be deleted - Returns: - Get model response - """ - response = requests.get('http://' + endpoint + ':' + str(port) + - '/_plugins/_knn/models/' + model_id, - headers={'content-type': 'application/json'}) - return response.json() - - -def delete_model(endpoint, port, model_id): - """ - Deletes a model from OpenSearch cluster - Args: - endpoint: Endpoint OpenSearch is running on - port: Port OpenSearch is running on - model_id: ID of model to be deleted - Returns: - Deleted model response - """ - response = requests.delete('http://' + endpoint + ':' + str(port) + - '/_plugins/_knn/models/' + model_id, - headers={'content-type': 'application/json'}) - return response.json() - - -def warmup_operation(endpoint, port, index): - """ - Performs warmup operation on index to load native library files - of that index to reduce query latencies. - Args: - endpoint: Endpoint OpenSearch is running on - port: Port OpenSearch is running on - index: index name - Returns: - number of shards the plugin succeeded and failed to warm up. - """ - response = requests.get('http://' + endpoint + ':' + str(port) + - '/_plugins/_knn/warmup/' + index, - headers={'content-type': 'application/json'}) - return response.json() - - -def get_opensearch_client(endpoint: str, port: int, timeout=60): - """ - Get an opensearch client from an endpoint and port - Args: - endpoint: Endpoint OpenSearch is running on - port: Port OpenSearch is running on - timeout: timeout for OpenSearch client, default value 60 - Returns: - OpenSearch client - - """ - # TODO: fix for security in the future - return OpenSearch( - hosts=[{ - 'host': endpoint, - 'port': port - }], - use_ssl=False, - verify_certs=False, - connection_class=RequestsHttpConnection, - timeout=timeout, - ) - - -def recall_at_r(results, neighbor_dataset, r, k, query_count): - """ - Calculates the recall@R for a set of queries against a ground truth nearest - neighbor set - Args: - results: 2D list containing ids of results returned by OpenSearch. - results[i][j] i refers to query, j refers to - result in the query - neighbor_dataset: 2D dataset containing ids of the true nearest - neighbors for a set of queries - r: number of top results to check if they are in the ground truth k-NN - set. - k: k value for the query - query_count: number of queries - Returns: - Recall at R - """ - correct = 0.0 - total_num_of_results = 0 - for query in range(query_count): - true_neighbors = neighbor_dataset.read(1) - if true_neighbors is None: - break - true_neighbors_set = set(true_neighbors[0][:k]) - true_neighbors_set.discard(-1) - min_r = min(r, len(true_neighbors_set)) - total_num_of_results += min_r - for j in range(min_r): - if results[query][j] in true_neighbors_set: - correct += 1.0 - - return correct / total_num_of_results - - -def get_index_size_in_kb(opensearch, index_name): - """ - Gets the size of an index in kilobytes - Args: - opensearch: opensearch client - index_name: name of index to look up - Returns: - size of index in kilobytes - """ - return int( - opensearch.indices.stats(index_name, metric='store')['indices'] - [index_name]['total']['store']['size_in_bytes']) / 1024 - - -def get_cache_size_in_kb(endpoint, port): - """ - Gets the size of the k-NN cache in kilobytes - Args: - endpoint: endpoint of OpenSearch cluster - port: port of endpoint OpenSearch is running on - Returns: - size of cache in kilobytes - """ - response = requests.get('http://' + endpoint + ':' + str(port) + - '/_plugins/_knn/stats', - headers={'content-type': 'application/json'}) - stats = response.json() - - keys = stats['nodes'].keys() - - total_used = 0 - for key in keys: - total_used += int(stats['nodes'][key]['graph_memory_usage']) - return total_used - - -def query_index(opensearch: OpenSearch, index_name: str, body: dict, - excluded_fields: list): - start_time = round(time.time()*1000) - queryResponse = opensearch.search(index=index_name, - body=body, - _source_excludes=excluded_fields) - end_time = round(time.time() * 1000) - queryResponse['client_time'] = end_time - start_time - return queryResponse - - -def bulk_index(opensearch: OpenSearch, index_name: str, body: List): - return opensearch.bulk(index=index_name, body=body) - -def get_segment_stats(opensearch: OpenSearch, index_name: str): - return opensearch.indices.segments(index=index_name) diff --git a/benchmarks/perf-tool/okpt/test/test.py b/benchmarks/perf-tool/okpt/test/test.py deleted file mode 100644 index c947545ad..000000000 --- a/benchmarks/perf-tool/okpt/test/test.py +++ /dev/null @@ -1,188 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# -# The OpenSearch Contributors require contributions made to -# this file be licensed under the Apache-2.0 license or a -# compatible open source license. - -"""Provides a base Test class.""" -from math import floor -from typing import Any, Dict, List - -from okpt.io.config.parsers.test import TestConfig -from okpt.test.steps.base import Step - - -def get_avg(values: List[Any]): - """Get average value of a list. - - Args: - values: A list of values. - - Returns: - The average value in the list. - """ - valid_total = len(values) - running_sum = 0.0 - - for value in values: - if value == -1: - valid_total -= 1 - continue - running_sum += value - - if valid_total == 0: - return -1 - return running_sum / valid_total - - -def _pxx(values: List[Any], p: float): - """Calculates the pXX statistics for a given list. - - Args: - values: List of values. - p: Percentile (between 0 and 1). - - Returns: - The corresponding pXX metric. - """ - lowest_percentile = 1 / len(values) - highest_percentile = (len(values) - 1) / len(values) - - # return -1 if p is out of range or if the list doesn't have enough elements - # to support the specified percentile - if p < 0 or p > 1: - return -1.0 - elif p < lowest_percentile or p > highest_percentile: - if p == 1.0 and len(values) > 1: - return float(values[len(values) - 1]) - return -1.0 - else: - return float(values[floor(len(values) * p)]) - - -def _aggregate_steps(step_results: List[Dict[str, Any]], - measure_labels=None): - """Aggregates the steps for a given Test. - - The aggregation process extracts the measures from each step and calculates - the total time spent performing each step measure, including the - percentile metrics, if possible. - - The aggregation process also extracts the test measures by simply summing - up the respective step measures. - - A step measure is formatted as `{step_name}_{measure_name}`, for example, - {bulk_index}_{took} or {query_index}_{memory}. The braces are not included - in the actual key string. - - Percentile/Total step measures are give as - `{step_name}_{measure_name}_{percentile|total}`. - - Test measures are just step measure sums so they just given as - `test_{measure_name}`. - - Args: - steps: List of test steps to be aggregated. - measures: List of step metrics to account for. - - Returns: - A complete test result. - """ - if measure_labels is None: - measure_labels = ['took'] - test_measures = { - f'test_{measure_label}': 0 - for measure_label in measure_labels - } - step_measures: Dict[str, Any] = {} - - # iterate over all test steps - for step in step_results: - step_label = step['label'] - - step_measure_labels = list(step.keys()) - step_measure_labels.remove('label') - - # iterate over all measures in each test step - for measure_label in step_measure_labels: - - step_measure = step[measure_label] - step_measure_label = f'{measure_label}' if step_label == 'get_stats' else f'{step_label}_{measure_label}' - - # Add cumulative test measures from steps to test measures - if measure_label in measure_labels: - test_measures[f'test_{measure_label}'] += sum(step_measure) if \ - isinstance(step_measure, list) else step_measure - - if step_measure_label in step_measures: - _ = step_measures[step_measure_label].extend(step_measure) \ - if isinstance(step_measure, list) else \ - step_measures[step_measure_label].append(step_measure) - else: - step_measures[step_measure_label] = step_measure if \ - isinstance(step_measure, list) else [step_measure] - - aggregate = {**test_measures} - # calculate the totals and percentile statistics for each step measure - # where relevant - for step_measure_label, step_measure in step_measures.items(): - step_measure.sort() - - aggregate[step_measure_label + '_total'] = float(sum(step_measure)) - - p50 = _pxx(step_measure, 0.50) - if p50 != -1: - aggregate[step_measure_label + '_p50'] = p50 - p90 = _pxx(step_measure, 0.90) - if p90 != -1: - aggregate[step_measure_label + '_p90'] = p90 - p99 = _pxx(step_measure, 0.99) - if p99 != -1: - aggregate[step_measure_label + '_p99'] = p99 - p99_9 = _pxx(step_measure, 0.999) - if p99_9 != -1: - aggregate[step_measure_label + '_p99.9'] = p99_9 - p100 = _pxx(step_measure, 1.00) - if p100 != -1: - aggregate[step_measure_label + '_p100'] = p100 - - return aggregate - - -class Test: - """A base Test class, representing a collection of steps to profiled and - aggregated. - - Methods: - setup: Performs test setup. Usually for steps not intended to be - profiled. - run_steps: Runs the test steps, aggregating the results into the - `step_results` instance field. - cleanup: Perform test cleanup. Useful for clearing the state of a - persistent process like OpenSearch. Cleanup steps are executed after - each run. - execute: Runs steps, cleans up, and aggregates the test result. - """ - def __init__(self, test_config: TestConfig): - """Initializes the test state. - """ - self.test_config = test_config - self.setup_steps: List[Step] = test_config.setup - self.test_steps: List[Step] = test_config.steps - self.cleanup_steps: List[Step] = test_config.cleanup - - def setup(self): - _ = [step.execute() for step in self.setup_steps] - - def _run_steps(self): - step_results = [] - _ = [step_results.extend(step.execute()) for step in self.test_steps] - return step_results - - def _cleanup(self): - _ = [step.execute() for step in self.cleanup_steps] - - def execute(self): - results = self._run_steps() - self._cleanup() - return _aggregate_steps(results) diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/index.json b/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/index.json deleted file mode 100644 index 7e8ddda8e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/index.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1, - "knn.algo_param.ef_search": 100 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "faiss", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json b/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json deleted file mode 100644 index 3e04d12c4..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bool": - { - "should": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 70 - } - } - }, - { - "term": - { - "color": "green" - } - }, - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "yellow" - } - }, - { - "term": - { - "taste": "sweet" - } - } - ] - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml b/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml deleted file mode 100644 index ba8850e1d..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml +++ /dev/null @@ -1,40 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss HNSW Relaxed Filter Test" -test_id: "Faiss HNSW Relaxed Filter Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-hnsw/filtering/relaxed-filter/index.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query_with_filter - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-with-relaxed-filters.hdf5 - neighbors_dataset: neighbors_filter_5 - filter_spec: release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json - filter_type: FILTER diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/index.json b/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/index.json deleted file mode 100644 index 7e8ddda8e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/index.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1, - "knn.algo_param.ef_search": 100 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "faiss", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json b/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json deleted file mode 100644 index 9e6356f1c..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 60 - } - } - }, - { - "term": - { - "taste": "bitter" - } - }, - { - "bool": - { - "should": - [ - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "green" - } - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml b/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml deleted file mode 100644 index 94f4073c7..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml +++ /dev/null @@ -1,40 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss HNSW Restrictive Filter Test" -test_id: "Faiss HNSW Restrictive Filter Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-hnsw/filtering/restrictive-filter/index.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query_with_filter - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-with-restrictive-filters.hdf5 - neighbors_dataset: neighbors_filter_4 - filter_spec: release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json - filter_type: FILTER diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/index.json b/benchmarks/perf-tool/release-configs/faiss-hnsw/index.json deleted file mode 100644 index 7e8ddda8e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/index.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1, - "knn.algo_param.ef_search": 100 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "faiss", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/index.json b/benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/index.json deleted file mode 100644 index 338ceb1f4..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/index.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1, - "knn.algo_param.ef_search": 100 - } - }, - "mappings": { - "_source": { - "excludes": ["nested_field"] - }, - "properties": { - "nested_field": { - "type": "nested", - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "faiss", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/simple-nested-test.yml b/benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/simple-nested-test.yml deleted file mode 100644 index 151b2014d..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/nested/simple/simple-nested-test.yml +++ /dev/null @@ -1,37 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss HNSW Nested Field Test" -test_id: "Faiss HNSW Nested Field Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-hnsw/nested/simple/index.json - - name: ingest_nested_field - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-nested.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' }, { name: 'parent_id', type: 'int'} ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query_nested_field - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-nested.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-nested.hdf5 - neighbors_dataset: neighbour_nested \ No newline at end of file diff --git a/benchmarks/perf-tool/release-configs/faiss-hnsw/test.yml b/benchmarks/perf-tool/release-configs/faiss-hnsw/test.yml deleted file mode 100644 index c4740acf5..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnsw/test.yml +++ /dev/null @@ -1,35 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss HNSW Test" -test_id: "Faiss HNSW Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-hnsw/index.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean.hdf5 diff --git a/benchmarks/perf-tool/release-configs/faiss-hnswpq/index.json b/benchmarks/perf-tool/release-configs/faiss-hnswpq/index.json deleted file mode 100644 index 479703412..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnswpq/index.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "model_id": "test-model" - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnswpq/method-spec.json b/benchmarks/perf-tool/release-configs/faiss-hnswpq/method-spec.json deleted file mode 100644 index 2d67bf2df..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnswpq/method-spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name":"hnsw", - "engine":"faiss", - "space_type": "l2", - "parameters":{ - "ef_construction": 256, - "m": 16, - "encoder": { - "name": "pq", - "parameters": { - "m": 16 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-hnswpq/test.yml b/benchmarks/perf-tool/release-configs/faiss-hnswpq/test.yml deleted file mode 100644 index f573ede9c..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnswpq/test.yml +++ /dev/null @@ -1,59 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss HNSW PQ Test" -test_id: "Faiss HNSW PQ Test" -num_runs: 3 -show_runs: false -setup: - - name: delete_index - index_name: train_index - - name: create_index - index_name: train_index - index_spec: release-configs/faiss-hnswpq/train-index-spec.json - - name: ingest - index_name: train_index - field_name: train_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - doc_count: 50000 - - name: refresh_index - index_name: train_index -steps: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index - - name: train_model - model_id: test-model - train_index: train_index - train_field: train_field - dimension: 128 - method_spec: release-configs/faiss-hnswpq/method-spec.json - max_training_vector_count: 50000 - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-hnswpq/index.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean.hdf5 diff --git a/benchmarks/perf-tool/release-configs/faiss-hnswpq/train-index-spec.json b/benchmarks/perf-tool/release-configs/faiss-hnswpq/train-index-spec.json deleted file mode 100644 index 804a5707e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-hnswpq/train-index-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": 24, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "train_field": { - "type": "knn_vector", - "dimension": 128 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/index.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/index.json deleted file mode 100644 index ade7fa377..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/index.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "model_id": "test-model" - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/method-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/method-spec.json deleted file mode 100644 index 51ae89877..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/method-spec.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name":"ivf", - "engine":"faiss", - "space_type": "l2", - "parameters":{ - "nlist": 128, - "nprobes": 8 - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-spec.json deleted file mode 100644 index 3e04d12c4..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-spec.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bool": - { - "should": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 70 - } - } - }, - { - "term": - { - "color": "green" - } - }, - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "yellow" - } - }, - { - "term": - { - "taste": "sweet" - } - } - ] - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-test.yml b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-test.yml deleted file mode 100644 index adb25a04d..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-test.yml +++ /dev/null @@ -1,64 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss IVF Relaxed Filter Test" -test_id: "Faiss IVF Relaxed Filter Test" -num_runs: 3 -show_runs: false -setup: - - name: delete_index - index_name: train_index - - name: create_index - index_name: train_index - index_spec: release-configs/faiss-ivf/filtering/relaxed-filter/train-index-spec.json - - name: ingest - index_name: train_index - field_name: train_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - doc_count: 50000 - - name: refresh_index - index_name: train_index -steps: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index - - name: train_model - model_id: test-model - train_index: train_index - train_field: train_field - dimension: 128 - method_spec: release-configs/faiss-ivf/filtering/relaxed-filter/method-spec.json - max_training_vector_count: 50000 - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-ivf/filtering/relaxed-filter/index.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query_with_filter - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-with-relaxed-filters.hdf5 - neighbors_dataset: neighbors_filter_5 - filter_spec: release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-spec.json - filter_type: FILTER diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/train-index-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/train-index-spec.json deleted file mode 100644 index 137fac9d8..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/relaxed-filter/train-index-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "train_field": { - "type": "knn_vector", - "dimension": 128 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/index.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/index.json deleted file mode 100644 index ade7fa377..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/index.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "model_id": "test-model" - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/method-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/method-spec.json deleted file mode 100644 index 51ae89877..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/method-spec.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name":"ivf", - "engine":"faiss", - "space_type": "l2", - "parameters":{ - "nlist": 128, - "nprobes": 8 - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-spec.json deleted file mode 100644 index 9e6356f1c..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-spec.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 60 - } - } - }, - { - "term": - { - "taste": "bitter" - } - }, - { - "bool": - { - "should": - [ - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "green" - } - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-test.yml b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-test.yml deleted file mode 100644 index bad047eab..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-test.yml +++ /dev/null @@ -1,64 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss IVF restrictive Filter Test" -test_id: "Faiss IVF restrictive Filter Test" -num_runs: 3 -show_runs: false -setup: - - name: delete_index - index_name: train_index - - name: create_index - index_name: train_index - index_spec: release-configs/faiss-ivf/filtering/restrictive-filter/train-index-spec.json - - name: ingest - index_name: train_index - field_name: train_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - doc_count: 50000 - - name: refresh_index - index_name: train_index -steps: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index - - name: train_model - model_id: test-model - train_index: train_index - train_field: train_field - dimension: 128 - method_spec: release-configs/faiss-ivf/filtering/restrictive-filter/method-spec.json - max_training_vector_count: 50000 - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-ivf/filtering/restrictive-filter/index.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query_with_filter - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-with-restrictive-filters.hdf5 - neighbors_dataset: neighbors_filter_4 - filter_spec: release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-spec.json - filter_type: FILTER diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/train-index-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/train-index-spec.json deleted file mode 100644 index 804a5707e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/filtering/restrictive-filter/train-index-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": 24, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "train_field": { - "type": "knn_vector", - "dimension": 128 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/index.json b/benchmarks/perf-tool/release-configs/faiss-ivf/index.json deleted file mode 100644 index 479703412..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/index.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "model_id": "test-model" - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/method-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/method-spec.json deleted file mode 100644 index 51ae89877..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/method-spec.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name":"ivf", - "engine":"faiss", - "space_type": "l2", - "parameters":{ - "nlist": 128, - "nprobes": 8 - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/test.yml b/benchmarks/perf-tool/release-configs/faiss-ivf/test.yml deleted file mode 100644 index 367c42594..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/test.yml +++ /dev/null @@ -1,59 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss IVF" -test_id: "Faiss IVF" -num_runs: 3 -show_runs: false -setup: - - name: delete_index - index_name: train_index - - name: create_index - index_name: train_index - index_spec: release-configs/faiss-ivf/train-index-spec.json - - name: ingest - index_name: train_index - field_name: train_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - doc_count: 50000 - - name: refresh_index - index_name: train_index -steps: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index - - name: train_model - model_id: test-model - train_index: train_index - train_field: train_field - dimension: 128 - method_spec: release-configs/faiss-ivf/method-spec.json - max_training_vector_count: 50000 - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-ivf/index.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean.hdf5 diff --git a/benchmarks/perf-tool/release-configs/faiss-ivf/train-index-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivf/train-index-spec.json deleted file mode 100644 index 804a5707e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivf/train-index-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": 24, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "train_field": { - "type": "knn_vector", - "dimension": 128 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivfpq/index.json b/benchmarks/perf-tool/release-configs/faiss-ivfpq/index.json deleted file mode 100644 index 479703412..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivfpq/index.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "model_id": "test-model" - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivfpq/method-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivfpq/method-spec.json deleted file mode 100644 index 204b0a653..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivfpq/method-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name":"ivf", - "engine":"faiss", - "space_type": "l2", - "parameters":{ - "nlist": 128, - "nprobes": 8, - "encoder": { - "name": "pq", - "parameters": { - "m": 16, - "code_size": 8 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/faiss-ivfpq/test.yml b/benchmarks/perf-tool/release-configs/faiss-ivfpq/test.yml deleted file mode 100644 index c3f63348b..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivfpq/test.yml +++ /dev/null @@ -1,59 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Faiss IVF PQ Test" -test_id: "Faiss IVF PQ Test" -num_runs: 3 -show_runs: false -setup: - - name: delete_index - index_name: train_index - - name: create_index - index_name: train_index - index_spec: release-configs/faiss-ivfpq/train-index-spec.json - - name: ingest - index_name: train_index - field_name: train_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - doc_count: 50000 - - name: refresh_index - index_name: train_index -steps: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index - - name: train_model - model_id: test-model - train_index: train_index - train_field: train_field - dimension: 128 - method_spec: release-configs/faiss-ivfpq/method-spec.json - max_training_vector_count: 50000 - - name: create_index - index_name: target_index - index_spec: release-configs/faiss-ivfpq/index.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean.hdf5 diff --git a/benchmarks/perf-tool/release-configs/faiss-ivfpq/train-index-spec.json b/benchmarks/perf-tool/release-configs/faiss-ivfpq/train-index-spec.json deleted file mode 100644 index 804a5707e..000000000 --- a/benchmarks/perf-tool/release-configs/faiss-ivfpq/train-index-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": 24, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "train_field": { - "type": "knn_vector", - "dimension": 128 - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/index.json b/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/index.json deleted file mode 100644 index 7a9ff2890..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/index.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "lucene", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json b/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json deleted file mode 100644 index 3e04d12c4..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bool": - { - "should": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 70 - } - } - }, - { - "term": - { - "color": "green" - } - }, - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "yellow" - } - }, - { - "term": - { - "taste": "sweet" - } - } - ] - } -} diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml b/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml deleted file mode 100644 index 3bbb99a0f..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml +++ /dev/null @@ -1,38 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Lucene HNSW Relaxed Filter Test" -test_id: "Lucene HNSW Relaxed Filter Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/lucene-hnsw/filtering/relaxed-filter/index.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: query_with_filter - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-with-relaxed-filters.hdf5 - neighbors_dataset: neighbors_filter_5 - filter_spec: release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-spec.json - filter_type: FILTER diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/index.json b/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/index.json deleted file mode 100644 index 7a9ff2890..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/index.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "lucene", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json b/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json deleted file mode 100644 index 9e6356f1c..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 60 - } - } - }, - { - "term": - { - "taste": "bitter" - } - }, - { - "bool": - { - "should": - [ - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "green" - } - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml b/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml deleted file mode 100644 index aa4c5193f..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml +++ /dev/null @@ -1,38 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Lucene HNSW Restrictive Filter Test" -test_id: "Lucene HNSW Restrictive Filter Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/lucene-hnsw/filtering/restrictive-filter/index.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: query_with_filter - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-with-restrictive-filters.hdf5 - neighbors_dataset: neighbors_filter_4 - filter_spec: release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-spec.json - filter_type: FILTER diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/index.json b/benchmarks/perf-tool/release-configs/lucene-hnsw/index.json deleted file mode 100644 index 7a9ff2890..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/index.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "lucene", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/index.json b/benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/index.json deleted file mode 100644 index b41b51c77..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/index.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1 - } - }, - "mappings": { - "_source": { - "excludes": ["nested_field"] - }, - "properties": { - "nested_field": { - "type": "nested", - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "lucene", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/simple-nested-test.yml b/benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/simple-nested-test.yml deleted file mode 100644 index be825487a..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/nested/simple/simple-nested-test.yml +++ /dev/null @@ -1,37 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Lucene HNSW Nested Field Test" -test_id: "Lucene HNSW Nested Field Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/lucene-hnsw/nested/simple/index.json - - name: ingest_nested_field - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-nested.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' }, { name: 'parent_id', type: 'int'} ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query_nested_field - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean-nested.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean-nested.hdf5 - neighbors_dataset: neighbour_nested \ No newline at end of file diff --git a/benchmarks/perf-tool/release-configs/lucene-hnsw/test.yml b/benchmarks/perf-tool/release-configs/lucene-hnsw/test.yml deleted file mode 100644 index b253ee08e..000000000 --- a/benchmarks/perf-tool/release-configs/lucene-hnsw/test.yml +++ /dev/null @@ -1,33 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Lucene HNSW" -test_id: "Lucene HNSW" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/lucene-hnsw/index.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean.hdf5 diff --git a/benchmarks/perf-tool/release-configs/nmslib-hnsw/index.json b/benchmarks/perf-tool/release-configs/nmslib-hnsw/index.json deleted file mode 100644 index eb714c5c8..000000000 --- a/benchmarks/perf-tool/release-configs/nmslib-hnsw/index.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 24, - "number_of_replicas": 1, - "knn.algo_param.ef_search": 100 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "nmslib", - "parameters": { - "ef_construction": 256, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/release-configs/nmslib-hnsw/test.yml b/benchmarks/perf-tool/release-configs/nmslib-hnsw/test.yml deleted file mode 100644 index 94ad9b131..000000000 --- a/benchmarks/perf-tool/release-configs/nmslib-hnsw/test.yml +++ /dev/null @@ -1,35 +0,0 @@ -endpoint: [ENDPOINT] -port: [PORT] -test_name: "Nmslib HNSW Test" -test_id: "Nmslib HNSW Test" -num_runs: 3 -show_runs: false -steps: - - name: delete_index - index_name: target_index - - name: create_index - index_name: target_index - index_spec: release-configs/nmslib-hnsw/index.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 1 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: dataset/sift-128-euclidean.hdf5 diff --git a/benchmarks/perf-tool/release-configs/run_all_tests.sh b/benchmarks/perf-tool/release-configs/run_all_tests.sh deleted file mode 100755 index e65d5b5c4..000000000 --- a/benchmarks/perf-tool/release-configs/run_all_tests.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash -set -e - -# Description: -# Run a performance test for release -# Dataset should be available in perf-tool/dataset before running this script -# -# Example: -# ./run-test.sh --endpoint localhost -# -# Usage: -# ./run-test.sh \ -# --endpoint -# --port 80 \ -# --num-runs 3 \ -# --outputs ~/outputs - -while [ "$1" != "" ]; do - case $1 in - -url | --endpoint ) shift - ENDPOINT=$1 - ;; - -p | --port ) shift - PORT=$1 - ;; - -n | --num-runs ) shift - NUM_RUNS=$1 - ;; - -o | --outputs ) shift - OUTPUTS=$1 - ;; - * ) echo "Unknown parameter" - echo $1 - exit 1 - ;; - esac - shift -done - -if [ ! -n "$ENDPOINT" ]; then - echo "--endpoint should be specified" - exit -fi - -if [ ! -n "$PORT" ]; then - PORT=80 - echo "--port is not specified. Using default values $PORT" -fi - -if [ ! -n "$NUM_RUNS" ]; then - NUM_RUNS=3 - echo "--num-runs is not specified. Using default values $NUM_RUNS" -fi - -if [ ! -n "$OUTPUTS" ]; then - OUTPUTS="$HOME/outputs" - echo "--outputs is not specified. Using default values $OUTPUTS" -fi - - -curl -X PUT "http://$ENDPOINT:$PORT/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' -{ - "persistent" : { - "knn.algo_param.index_thread_qty" : 4 - } -} -' - -TESTS="./release-configs/faiss-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml -./release-configs/faiss-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml -./release-configs/faiss-hnsw/nested/simple/simple-nested-test.yml -./release-configs/faiss-hnsw/test.yml -./release-configs/faiss-hnswpq/test.yml -./release-configs/faiss-ivf/filtering/relaxed-filter/relaxed-filter-test.yml -./release-configs/faiss-ivf/filtering/restrictive-filter/restrictive-filter-test.yml -./release-configs/faiss-ivf/test.yml -./release-configs/faiss-ivfpq/test.yml -./release-configs/lucene-hnsw/filtering/relaxed-filter/relaxed-filter-test.yml -./release-configs/lucene-hnsw/filtering/restrictive-filter/restrictive-filter-test.yml -./release-configs/lucene-hnsw/nested/simple/simple-nested-test.yml -./release-configs/lucene-hnsw/test.yml -./release-configs/nmslib-hnsw/test.yml" - -if [ ! -d $OUTPUTS ] -then - mkdir $OUTPUTS -fi - -for TEST in $TESTS -do - ORG_FILE=$TEST - NEW_FILE="$ORG_FILE.tmp" - OUT_FILE=$(grep test_id $ORG_FILE | cut -d':' -f2 | sed -r 's/^ "|"$//g' | sed 's/ /_/g') - echo "cp $ORG_FILE $NEW_FILE" - cp $ORG_FILE $NEW_FILE - sed -i "/^endpoint:/c\endpoint: $ENDPOINT" $NEW_FILE - sed -i "/^port:/c\port: $PORT" $NEW_FILE - sed -i "/^num_runs:/c\num_runs: $NUM_RUNS" $NEW_FILE - python3 knn-perf-tool.py test $NEW_FILE $OUTPUTS/$OUT_FILE - #Sleep for 1 min to cool down cpu from the previous run - sleep 60 -done diff --git a/benchmarks/perf-tool/requirements.in b/benchmarks/perf-tool/requirements.in deleted file mode 100644 index fd3555aab..000000000 --- a/benchmarks/perf-tool/requirements.in +++ /dev/null @@ -1,7 +0,0 @@ -Cerberus -opensearch-py -PyYAML -numpy -h5py -requests -psutil diff --git a/benchmarks/perf-tool/requirements.txt b/benchmarks/perf-tool/requirements.txt deleted file mode 100644 index fdfe205f8..000000000 --- a/benchmarks/perf-tool/requirements.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: -# -# pip-compile -# -cerberus==1.3.4 - # via -r requirements.in -certifi==2024.7.4 - # via - # opensearch-py - # requests -charset-normalizer==2.0.4 - # via requests -h5py==3.3.0 - # via -r requirements.in -idna==3.7 - # via requests -numpy==1.24.2 - # via - # -r requirements.in - # h5py -opensearch-py==1.0.0 - # via -r requirements.in -psutil==5.8.0 - # via -r requirements.in -pyyaml==5.4.1 - # via -r requirements.in -requests==2.32.0 - # via -r requirements.in -urllib3==1.26.18 - # via - # opensearch-py - # requests - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/index-spec.json b/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/index-spec.json deleted file mode 100644 index 5542ef387..000000000 --- a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/index-spec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "number_of_shards": 3, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "model_id": "test-model" - } - } - } -} diff --git a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/method-spec.json b/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/method-spec.json deleted file mode 100644 index 1aa7f809f..000000000 --- a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/method-spec.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name":"ivf", - "engine":"faiss", - "parameters":{ - "nlist":16, - "nprobes": 4 - } -} diff --git a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/test.yml b/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/test.yml deleted file mode 100644 index 027ba8683..000000000 --- a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/test.yml +++ /dev/null @@ -1,62 +0,0 @@ -endpoint: localhost -test_name: faiss_sift_ivf -test_id: "Test workflow for faiss ivf" -num_runs: 3 -show_runs: true -setup: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index - - name: delete_index - index_name: train_index - - name: create_index - index_name: train_index - index_spec: sample-configs/faiss-sift-ivf/train-index-spec.json - - name: ingest - index_name: train_index - field_name: train_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: train_index -steps: - - name: train_model - model_id: test-model - train_index: train_index - train_field: train_field - dimension: 128 - method_spec: sample-configs/faiss-sift-ivf/method-spec.json - max_training_vector_count: 1000000000 - - name: create_index - index_name: target_index - index_spec: sample-configs/faiss-sift-ivf/index-spec.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 10 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: ../dataset/sift-128-euclidean.hdf5 -cleanup: - - name: delete_model - model_id: test-model - - name: delete_index - index_name: target_index diff --git a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/train-index-spec.json b/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/train-index-spec.json deleted file mode 100644 index 00a418e4f..000000000 --- a/benchmarks/perf-tool/sample-configs/faiss-sift-ivf/train-index-spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "settings": { - "index": { - "number_of_shards": 3, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "train_field": { - "type": "knn_vector", - "dimension": 128 - } - } - } -} diff --git a/benchmarks/perf-tool/sample-configs/filter-spec/filter-1-spec.json b/benchmarks/perf-tool/sample-configs/filter-spec/filter-1-spec.json deleted file mode 100644 index f529de4fe..000000000 --- a/benchmarks/perf-tool/sample-configs/filter-spec/filter-1-spec.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "range": - { - "age": - { - "gte": 20, - "lte": 100 - } - } - }, - { - "term": - { - "color": "red" - } - } - ] - } -} \ No newline at end of file diff --git a/benchmarks/perf-tool/sample-configs/filter-spec/filter-2-spec.json b/benchmarks/perf-tool/sample-configs/filter-spec/filter-2-spec.json deleted file mode 100644 index 9d4514e62..000000000 --- a/benchmarks/perf-tool/sample-configs/filter-spec/filter-2-spec.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "term": - { - "taste": "salty" - } - }, - { - "bool": - { - "should": - [ - { - "bool": - { - "must_not": - { - "exists": - { - "field": "color" - } - } - } - }, - { - "term": - { - "color": "blue" - } - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/benchmarks/perf-tool/sample-configs/filter-spec/filter-3-spec.json b/benchmarks/perf-tool/sample-configs/filter-spec/filter-3-spec.json deleted file mode 100644 index d69f8768e..000000000 --- a/benchmarks/perf-tool/sample-configs/filter-spec/filter-3-spec.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "range": - { - "age": - { - "gte": 20, - "lte": 80 - } - } - }, - { - "exists": - { - "field": "color" - } - }, - { - "exists": - { - "field": "taste" - } - } - ] - } -} \ No newline at end of file diff --git a/benchmarks/perf-tool/sample-configs/filter-spec/filter-4-spec.json b/benchmarks/perf-tool/sample-configs/filter-spec/filter-4-spec.json deleted file mode 100644 index 822d63b37..000000000 --- a/benchmarks/perf-tool/sample-configs/filter-spec/filter-4-spec.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "bool": - { - "must": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 60 - } - } - }, - { - "term": - { - "taste": "bitter" - } - }, - { - "bool": - { - "should": - [ - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "green" - } - } - ] - } - } - ] - } -} diff --git a/benchmarks/perf-tool/sample-configs/filter-spec/filter-5-spec.json b/benchmarks/perf-tool/sample-configs/filter-spec/filter-5-spec.json deleted file mode 100644 index 3e04d12c4..000000000 --- a/benchmarks/perf-tool/sample-configs/filter-spec/filter-5-spec.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bool": - { - "should": - [ - { - "range": - { - "age": - { - "gte": 30, - "lte": 70 - } - } - }, - { - "term": - { - "color": "green" - } - }, - { - "term": - { - "color": "blue" - } - }, - { - "term": - { - "color": "yellow" - } - }, - { - "term": - { - "taste": "sweet" - } - } - ] - } -} diff --git a/benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/index-spec.json b/benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/index-spec.json deleted file mode 100644 index 83ea79b15..000000000 --- a/benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/index-spec.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "refresh_interval": "10s", - "number_of_shards": 30, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "lucene", - "parameters": { - "ef_construction": 100, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/test.yml b/benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/test.yml deleted file mode 100644 index aa2ee6389..000000000 --- a/benchmarks/perf-tool/sample-configs/lucene-sift-hnsw-filter/test.yml +++ /dev/null @@ -1,41 +0,0 @@ -endpoint: localhost -test_name: lucene_sift_hnsw -test_id: "Test workflow for lucene hnsw" -num_runs: 1 -show_runs: false -setup: - - name: delete_index - index_name: target_index -steps: - - name: create_index - index_name: target_index - index_spec: sample-configs/lucene-sift-hnsw-filter/index-spec.json - - name: ingest_multi_field - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean-with-attr.hdf5 - attributes_dataset_name: attributes - attribute_spec: [ { name: 'color', type: 'str' }, { name: 'taste', type: 'str' }, { name: 'age', type: 'int' } ] - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 10 - - name: query_with_filter - k: 10 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean-with-attr.hdf5 - neighbors_format: hdf5 - neighbors_path: ../dataset/sift-128-euclidean-with-attr-with-filters.hdf5 - neighbors_dataset: neighbors_filter_1 - filter_spec: sample-configs/filter-spec/filter-1-spec.json - query_count: 100 -cleanup: - - name: delete_index - index_name: target_index \ No newline at end of file diff --git a/benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/index-spec.json b/benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/index-spec.json deleted file mode 100644 index 75abe7baa..000000000 --- a/benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/index-spec.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "settings": { - "index": { - "knn": true, - "knn.algo_param.ef_search": 512, - "refresh_interval": "10s", - "number_of_shards": 1, - "number_of_replicas": 0 - } - }, - "mappings": { - "properties": { - "target_field": { - "type": "knn_vector", - "dimension": 128, - "method": { - "name": "hnsw", - "space_type": "l2", - "engine": "nmslib", - "parameters": { - "ef_construction": 512, - "m": 16 - } - } - } - } - } -} diff --git a/benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/test.yml b/benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/test.yml deleted file mode 100644 index 6d96bf80c..000000000 --- a/benchmarks/perf-tool/sample-configs/nmslib-sift-hnsw/test.yml +++ /dev/null @@ -1,38 +0,0 @@ -endpoint: localhost -test_name: nmslib_sift_hnsw -test_id: "Test workflow for nmslib hnsw" -num_runs: 2 -show_runs: false -setup: - - name: delete_index - index_name: target_index -steps: - - name: create_index - index_name: target_index - index_spec: sample-configs/nmslib-sift-hnsw/index-spec.json - - name: ingest - index_name: target_index - field_name: target_field - bulk_size: 500 - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean.hdf5 - - name: refresh_index - index_name: target_index - - name: force_merge - index_name: target_index - max_num_segments: 10 - - name: warmup_operation - index_name: target_index - - name: query - k: 100 - r: 1 - calculate_recall: true - index_name: target_index - field_name: target_field - dataset_format: hdf5 - dataset_path: ../dataset/sift-128-euclidean.hdf5 - neighbors_format: hdf5 - neighbors_path: ../dataset/sift-128-euclidean.hdf5 -cleanup: - - name: delete_index - index_name: target_index