Skip to content

Continuous Benchmark #3187

Continuous Benchmark

Continuous Benchmark #3187

name: Continuous Benchmark
on:
workflow_dispatch:
inputs:
with_payload:
description: 'Flag that controls whether to search with or without payload (false or true)'
default: false
schedule:
# Run every 4 hours
- cron: "0 */4 * * *"
# Restrict to only running this workflow one at a time.
# Any new runs will be queued until the previous run is complete.
# Any existing pending runs will be cancelled and replaced with current run.
concurrency:
group: continuous-benchmark
jobs:
runBenchmark:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Benches
id: benches
run: |
export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }}
export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}
export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}
export WITH_PAYLOAD=${{ inputs.with_payload }}
export SUFFIX=$([ "${WITH_PAYLOAD}" = "true" ] && echo "-with-payload" || echo "")
bash -x tools/setup_ci.sh
declare -A DATASET_TO_ENGINE
DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark${SUFFIX}"
DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector${SUFFIX}"
DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark${SUFFIX}"
DATASET_TO_ENGINE["dbpedia-openai-100K-1536-angular"]="qdrant-bq-continuous-benchmark${SUFFIX}"
set +e
for dataset in "${!DATASET_TO_ENGINE[@]}"; do
export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]}
export DATASETS=$dataset
# Benchmark the dev branch:
export QDRANT_VERSION=ghcr/dev
export QDRANT__FEATURE_FLAGS__ALL=true
timeout 30m bash -x tools/run_ci.sh
# Benchmark the master branch:
export QDRANT_VERSION=docker/master
export QDRANT__FEATURE_FLAGS__ALL=false
timeout 30m bash -x tools/run_ci.sh
done
set -e
- name: Fail job if any of the benches failed
if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout'
run: exit 1
- name: Send slack message
uses: ./.github/workflows/actions/send-slack-msg
if: failure() || cancelled()
with:
bench_name: "runBenchmark"
job_status: ${{ job.status }}
failed_outputs: ${{ steps.benches.outputs.failed }}
qdrant_version: ${{ steps.benches.outputs.qdrant_version }}
engine_name: ${{ steps.benches.outputs.engine_name }}
dataset: ${{ steps.benches.outputs.dataset }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
runTenantsBenchmark:
runs-on: ubuntu-latest
needs: runBenchmark
if: ${{ always() }}
steps:
- uses: actions/checkout@v3
- uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Benches
id: benches
run: |
export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }}
export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}
export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}
export WITH_PAYLOAD=${{ inputs.with_payload }}
export SUFFIX=$([ "${WITH_PAYLOAD}" = "true" ] && echo "-with-payload" || echo "")
bash -x tools/setup_ci.sh
set +e
# Benchmark filtered search by tenants with mem limitation
export ENGINE_NAME="qdrant-all-on-disk-scalar-q${SUFFIX}"
export DATASETS="random-768-100-tenants"
export BENCHMARK_STRATEGY="tenants"
export CONTAINER_MEM_LIMIT=160mb
# Benchmark the dev branch:
export QDRANT_VERSION=ghcr/dev
export QDRANT__FEATURE_FLAGS__ALL=true
timeout 30m bash -x tools/run_ci.sh
# Benchmark the master branch:
export QDRANT_VERSION=docker/master
export QDRANT__FEATURE_FLAGS__ALL=false
timeout 30m bash -x tools/run_ci.sh
set -e
- name: Fail job if any of the benches failed
if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout'
run: exit 1
- name: Send slack message
uses: ./.github/workflows/actions/send-slack-msg
if: failure() || cancelled()
with:
bench_name: "runTenantsBenchmark"
job_status: ${{ job.status }}
failed_outputs: ${{ steps.benches.outputs.failed }}
qdrant_version: ${{ steps.benches.outputs.qdrant_version }}
engine_name: ${{ steps.benches.outputs.engine_name }}
dataset: ${{ steps.benches.outputs.dataset }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
runParallelBenchmark:
runs-on: ubuntu-latest
needs: runTenantsBenchmark
if: ${{ always() }}
steps:
- uses: actions/checkout@v3
- uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Benches
id: benches
run: |
export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }}
export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}
export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}
export WITH_PAYLOAD=${{ inputs.with_payload }}
export SUFFIX=$([ "${WITH_PAYLOAD}" = "true" ] && echo "-with-payload" || echo "")
bash -x tools/setup_ci.sh
set +e
# Benchmark parallel search&upload
export ENGINE_NAME="qdrant-continuous-benchmark${SUFFIX}"
export DATASETS="laion-small-clip"
export BENCHMARK_STRATEGY="parallel"
export POSTGRES_TABLE="benchmark_parallel_search_upload"
# Benchmark the dev branch:
export QDRANT_VERSION=ghcr/dev
export QDRANT__FEATURE_FLAGS__ALL=true
timeout 30m bash -x tools/run_ci.sh
# Benchmark the master branch:
export QDRANT_VERSION=docker/master
export QDRANT__FEATURE_FLAGS__ALL=false
timeout 30m bash -x tools/run_ci.sh
set -e
- name: Fail job if any of the benches failed
if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout'
run: exit 1
- name: Send slack message
uses: ./.github/workflows/actions/send-slack-msg
if: failure() || cancelled()
with:
bench_name: "runParallelBenchmark"
job_status: ${{ job.status }}
failed_outputs: ${{ steps.benches.outputs.failed }}
qdrant_version: ${{ steps.benches.outputs.qdrant_version }}
engine_name: ${{ steps.benches.outputs.engine_name }}
dataset: ${{ steps.benches.outputs.dataset }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK