Skip to content

Continuous Benchmark #2244

Continuous Benchmark

Continuous Benchmark #2244

name: Continuous Benchmark
on:
repository_dispatch:
workflow_dispatch:
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 }}
bash -x tools/setup_ci.sh
declare -A DATASET_TO_ENGINE
DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark"
DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector"
DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark"
DATASET_TO_ENGINE["dbpedia-openai-100K-1536-angular"]="qdrant-bq-continuous-benchmark"
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
timeout 30m bash -x tools/run_ci.sh
# Benchmark the master branch:
export QDRANT_VERSION=docker/master
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 Notification
if: failure() || cancelled()
uses: slackapi/[email protected]
with:
payload: |
{
"text": "CI benchmarks (runBenchmark) run status: ${{ job.status }}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "CI benchmarks (runBenchmark) failed because of *${{ steps.benches.outputs.failed }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Engine: *${{ steps.benches.outputs.engine_name }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Dataset: *${{ steps.benches.outputs.dataset }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>"
}
}
]
}
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 }}
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"
export DATASETS="random-768-100-tenants"
export BENCHMARK_STRATEGY="tenants"
export CONTAINER_MEM_LIMIT=160mb
# Benchmark the dev branch:
export QDRANT_VERSION=ghcr/dev
timeout 30m bash -x tools/run_ci.sh
# Benchmark the master branch:
export QDRANT_VERSION=docker/master
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 Notification
if: failure() || cancelled()
uses: slackapi/[email protected]
with:
payload: |
{
"text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Engine: *${{ steps.benches.outputs.engine_name }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Dataset: *${{ steps.benches.outputs.dataset }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>"
}
}
]
}
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 }}
bash -x tools/setup_ci.sh
set +e
# Benchmark parallel search&upload
export ENGINE_NAME="qdrant-continuous-benchmark"
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
timeout 30m bash -x tools/run_ci.sh
# Benchmark the master branch:
export QDRANT_VERSION=docker/master
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 Notification
if: failure() || cancelled()
uses: slackapi/[email protected]
with:
payload: |
{
"text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Engine: *${{ steps.benches.outputs.engine_name }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Dataset: *${{ steps.benches.outputs.dataset }}*."
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>"
}
}
]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK