Skip to content

Commit 841267b

Browse files
committed
WIP: debug
1 parent 9ee9491 commit 841267b

3 files changed

Lines changed: 142 additions & 158 deletions

File tree

ansible/playbooks/playbook-transfer-speed.yml

Lines changed: 8 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -7,142 +7,37 @@
77
- name: Load variables
88
include_vars: "group_vars/transfer-speed.yml"
99

10-
- name: Load datasets
11-
include_vars: "group_vars/datasets.yml"
12-
1310
- name: Set bootstrap URI for non-first nodes
1411
set_fact:
1512
cluster_bootstrap_uri: "{{ 'http://' + hostvars[groups['remote_machines'][0]]['ansible_host'] + ':6335' if inventory_hostname != groups['remote_machines'][0] else '' }}"
1613

17-
- name: Execute cluster setup role
14+
- name: Setup Qdrant cluster node
1815
include_role:
19-
name: "run-transfer-speed"
16+
name: "setup-qdrant-cluster"
2017
vars:
2118
server_version: "{{ servers[0].version }}"
2219
server_registry: "{{ servers[0].registry }}"
2320

24-
- name: Verify cluster formation
25-
hosts: remote_machines[0]
26-
tasks:
27-
- name: Wait for all peers to join cluster
28-
ansible.builtin.uri:
29-
url: "http://localhost:6333/cluster"
30-
method: GET
31-
return_content: yes
32-
register: cluster_info
33-
until: (cluster_info.json.result.peers | default({}) | length) >= (groups['remote_machines'] | length)
34-
retries: 60
35-
delay: 5
36-
37-
- name: Display cluster info
38-
ansible.builtin.debug:
39-
msg: "Cluster has {{ cluster_info.json.result.peers | length }} peers"
40-
4121
- name: Run benchmark
4222
hosts: client_machines
4323
become: yes
4424
vars:
45-
node_urls: "{{ groups['remote_machines'] | map('extract', hostvars, 'ansible_host') | map('regex_replace', '^(.*)$', 'http://\\1:6333') | list }}"
25+
qdrant_uris: "{{ groups['remote_machines'] | map('extract', hostvars, 'ansible_host') | map('regex_replace', '^(.*)$', 'http://\\1:6333') | join(',') }}"
4626
tasks:
4727
- name: Load variables
4828
include_vars: "group_vars/transfer-speed.yml"
4929

5030
- name: Load datasets
5131
include_vars: "group_vars/datasets.yml"
5232

53-
- name: Ensure necessary packages are installed
33+
- name: Ensure python3-venv is installed
5434
ansible.builtin.package:
55-
name: "{{ item }}"
35+
name: python3-venv
5636
state: present
57-
loop:
58-
- python3-venv
59-
60-
- name: Get dataset info
61-
ansible.builtin.set_fact:
62-
dataset_info: "{{ datasets | selectattr('name', 'equalto', dataset_name) | first }}"
63-
64-
- name: Display dataset info
65-
ansible.builtin.debug:
66-
msg: "Dataset: {{ dataset_info.name }}, dims: {{ dataset_info.vector_size }}, link: {{ dataset_info.link }}"
67-
68-
- name: Ensure directories exist
69-
ansible.builtin.file:
70-
path: "{{ item }}"
71-
state: directory
72-
mode: '0755'
73-
loop:
74-
- "{{ working_dir }}"
75-
- "{{ working_dir }}/data"
76-
- "{{ working_dir }}/data/{{ dataset_name }}"
77-
78-
- name: Copy benchmark files
79-
ansible.builtin.copy:
80-
src: "{{ item.src }}"
81-
dest: "{{ item.dest }}"
82-
mode: "{{ item.mode | default('0644') }}"
83-
owner: "{{ ansible_user }}"
84-
loop:
85-
- { src: "roles/run-transfer-speed/files/shard_transfer.py", dest: "{{ working_dir }}/shard_transfer.py" }
86-
- { src: "roles/run-transfer-speed/files/run-bench.sh", dest: "{{ working_dir }}/run-bench.sh", mode: '0755' }
87-
- { src: "files/transfer-speed/requirements.txt", dest: "{{ working_dir }}/requirements.txt" }
8837

89-
- name: Check if the dataset archive already exists
90-
ansible.builtin.stat:
91-
path: "{{ working_dir }}/data/{{ dataset_name }}.tgz"
92-
register: archive_stat
93-
94-
- name: Download the dataset archive
95-
ansible.builtin.get_url:
96-
url: "{{ dataset_info.link }}"
97-
dest: "{{ working_dir }}/data/{{ dataset_name }}.tgz"
98-
when: not archive_stat.stat.exists
99-
100-
- name: Check if the dataset directory is empty
101-
ansible.builtin.find:
102-
paths: "{{ working_dir }}/data/{{ dataset_name }}"
103-
file_type: any
104-
register: dest_dir_contents
105-
106-
- name: Extract the dataset archive
107-
ansible.builtin.unarchive:
108-
src: "{{ working_dir }}/data/{{ dataset_name }}.tgz"
109-
dest: "{{ working_dir }}/data/{{ dataset_name }}"
110-
remote_src: yes
111-
when: dest_dir_contents.matched == 0
112-
113-
- name: Run transfer benchmark
114-
ansible.builtin.shell: |
115-
{{ working_dir }}/run-bench.sh
116-
environment:
117-
QDRANT_URIS: "{{ node_urls | join(',') }}"
118-
DATASET_NAME: "{{ dataset_name }}"
119-
RUNS: "{{ runs }}"
120-
OUTPUT_FILENAME: "{{ working_dir }}/results.json"
121-
WORK_DIR: "{{ working_dir }}"
122-
register: benchmark_result
123-
124-
- name: Display benchmark output
125-
ansible.builtin.debug:
126-
msg: "{{ benchmark_result.stdout_lines }}"
127-
128-
- name: Read results file
129-
ansible.builtin.slurp:
130-
src: "{{ working_dir }}/results.json"
131-
register: results_file
132-
133-
- name: Set results fact
134-
set_fact:
135-
transfer_results: "{{ results_file.content | b64decode | from_json }}"
136-
137-
- name: Display results summary
138-
ansible.builtin.debug:
139-
msg: |
140-
Transfer Benchmark Results:
141-
- Dataset: {{ transfer_results.params.dataset }}
142-
- Points: {{ transfer_results.params.points }}
143-
- Throughput: {{ transfer_results.stats.throughput_mean }} pts/s
144-
- MB/s: {{ transfer_results.stats.mbps_mean }}
145-
- Duration: {{ transfer_results.stats.duration_mean }}s
38+
- name: Run transfer speed benchmark
39+
include_role:
40+
name: "run-transfer-speed"
14641

14742
#- name: Export data into postgres
14843
# hosts: db_hosts
Lines changed: 72 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,89 @@
11
---
2-
# Setup Qdrant cluster node and prepare for benchmark
2+
# Prepare and run transfer speed benchmark
33

4-
- name: Create working directory
4+
- name: Ensure directories exist
55
ansible.builtin.file:
6-
path: "{{ working_dir }}"
6+
path: "{{ item }}"
77
state: directory
88
mode: '0755'
9+
loop:
10+
- "{{ working_dir }}"
11+
- "{{ working_dir }}/data"
12+
- "{{ working_dir }}/data/{{ dataset_name }}"
13+
14+
- name: Get dataset info
15+
ansible.builtin.set_fact:
16+
dataset_info: "{{ datasets | selectattr('name', 'equalto', dataset_name) | first }}"
17+
18+
- name: Display dataset info
19+
ansible.builtin.debug:
20+
msg: "Dataset: {{ dataset_info.name }}, dims: {{ dataset_info.vector_size }}, link: {{ dataset_info.link }}"
921

10-
- name: Copy files to remote machine
22+
- name: Copy benchmark files
1123
ansible.builtin.copy:
1224
src: "{{ item.src }}"
1325
dest: "{{ item.dest }}"
1426
mode: "{{ item.mode | default('0644') }}"
1527
owner: "{{ ansible_user }}"
1628
loop:
17-
- { src: "../../files/transfer-speed/docker-compose-cluster.yaml", dest: "{{ working_dir }}/docker-compose.yaml" }
29+
- { src: "shard_transfer.py", dest: "{{ working_dir }}/shard_transfer.py" }
30+
- { src: "run-bench.sh", dest: "{{ working_dir }}/run-bench.sh", mode: '0755' }
31+
- { src: "../../files/transfer-speed/requirements.txt", dest: "{{ working_dir }}/requirements.txt" }
1832

19-
- name: Stop existing containers
20-
ansible.builtin.shell: |
21-
docker compose down || true
22-
docker rm -f qdrant-node || true
23-
args:
24-
chdir: "{{ working_dir }}"
25-
ignore_errors: yes
33+
- name: Check if the dataset archive already exists
34+
ansible.builtin.stat:
35+
path: "{{ working_dir }}/data/{{ dataset_name }}.tgz"
36+
register: archive_stat
2637

27-
- name: Remove old image to ensure fresh pull
28-
ansible.builtin.shell: |
29-
docker rmi -f {{ server_registry }}/qdrant/qdrant:{{ server_version }} || true
30-
ignore_errors: yes
38+
- name: Download the dataset archive
39+
ansible.builtin.get_url:
40+
url: "{{ dataset_info.link }}"
41+
dest: "{{ working_dir }}/data/{{ dataset_name }}.tgz"
42+
when: not archive_stat.stat.exists
43+
44+
- name: Check if the dataset directory is empty
45+
ansible.builtin.find:
46+
paths: "{{ working_dir }}/data/{{ dataset_name }}"
47+
file_type: any
48+
register: dest_dir_contents
3149

32-
- name: Start Qdrant node
50+
- name: Extract the dataset archive
51+
ansible.builtin.unarchive:
52+
src: "{{ working_dir }}/data/{{ dataset_name }}.tgz"
53+
dest: "{{ working_dir }}/data/{{ dataset_name }}"
54+
remote_src: yes
55+
when: dest_dir_contents.matched == 0
56+
57+
- name: Run transfer benchmark
3358
ansible.builtin.shell: |
34-
docker compose up -d
35-
args:
36-
chdir: "{{ working_dir }}"
59+
{{ working_dir }}/run-bench.sh
3760
environment:
38-
QDRANT_VERSION: "{{ server_version }}"
39-
CONTAINER_REGISTRY: "{{ server_registry }}"
40-
CLUSTER_BOOTSTRAP_URI: "{{ cluster_bootstrap_uri | default('') }}"
41-
register: compose_result
42-
failed_when: compose_result.rc != 0
43-
44-
- name: Wait for Qdrant to be ready
45-
ansible.builtin.uri:
46-
url: "http://localhost:6333/readyz"
47-
status_code: 200
48-
register: result
49-
until: result.status == 200
50-
retries: 60
51-
delay: 2
52-
53-
- name: Wait for node to join cluster
54-
ansible.builtin.uri:
55-
url: "http://localhost:6333/cluster"
56-
method: GET
57-
return_content: yes
58-
register: cluster_status
59-
until: cluster_status.json.result.peer_id is defined
60-
retries: 30
61-
delay: 2
62-
when: cluster_bootstrap_uri | default('') != ''
61+
QDRANT_URIS: "{{ qdrant_uris }}"
62+
DATASET_NAME: "{{ dataset_name }}"
63+
RUNS: "{{ runs }}"
64+
OUTPUT_FILENAME: "{{ working_dir }}/results.json"
65+
WORK_DIR: "{{ working_dir }}"
66+
register: benchmark_result
67+
68+
- name: Display benchmark output
69+
ansible.builtin.debug:
70+
msg: "{{ benchmark_result.stdout_lines }}"
71+
72+
- name: Read results file
73+
ansible.builtin.slurp:
74+
src: "{{ working_dir }}/results.json"
75+
register: results_file
76+
77+
- name: Set results fact
78+
set_fact:
79+
transfer_results: "{{ results_file.content | b64decode | from_json }}"
80+
81+
- name: Display results summary
82+
ansible.builtin.debug:
83+
msg: |
84+
Transfer Benchmark Results:
85+
- Dataset: {{ transfer_results.params.dataset }}
86+
- Points: {{ transfer_results.params.points }}
87+
- Throughput: {{ transfer_results.stats.throughput_mean }} pts/s
88+
- MB/s: {{ transfer_results.stats.mbps_mean }}
89+
- Duration: {{ transfer_results.stats.duration_mean }}s
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
# Setup Qdrant cluster node
3+
4+
- name: Create working directory
5+
ansible.builtin.file:
6+
path: "{{ working_dir }}"
7+
state: directory
8+
mode: '0755'
9+
10+
- name: Copy docker-compose file
11+
ansible.builtin.copy:
12+
src: "{{ item.src }}"
13+
dest: "{{ item.dest }}"
14+
mode: "{{ item.mode | default('0644') }}"
15+
owner: "{{ ansible_user }}"
16+
loop:
17+
- { src: "../../files/transfer-speed/docker-compose-cluster.yaml", dest: "{{ working_dir }}/docker-compose.yaml" }
18+
19+
- name: Stop existing containers
20+
ansible.builtin.shell: |
21+
docker compose down || true
22+
docker rm -f qdrant-node || true
23+
args:
24+
chdir: "{{ working_dir }}"
25+
ignore_errors: yes
26+
27+
- name: Remove old image to ensure fresh pull
28+
ansible.builtin.shell: |
29+
docker rmi -f {{ server_registry }}/qdrant/qdrant:{{ server_version }} || true
30+
ignore_errors: yes
31+
32+
- name: Start Qdrant node
33+
ansible.builtin.shell: |
34+
docker compose up -d
35+
args:
36+
chdir: "{{ working_dir }}"
37+
environment:
38+
QDRANT_VERSION: "{{ server_version }}"
39+
CONTAINER_REGISTRY: "{{ server_registry }}"
40+
CLUSTER_BOOTSTRAP_URI: "{{ cluster_bootstrap_uri | default('') }}"
41+
register: compose_result
42+
failed_when: compose_result.rc != 0
43+
44+
- name: Wait for Qdrant to be ready
45+
ansible.builtin.uri:
46+
url: "http://localhost:6333/readyz"
47+
status_code: 200
48+
register: result
49+
until: result.status == 200
50+
retries: 60
51+
delay: 2
52+
53+
- name: Wait for node to join cluster
54+
ansible.builtin.uri:
55+
url: "http://localhost:6333/cluster"
56+
method: GET
57+
return_content: yes
58+
register: cluster_status
59+
until: cluster_status.json.result.peer_id is defined
60+
retries: 30
61+
delay: 2
62+
when: cluster_bootstrap_uri | default('') != ''

0 commit comments

Comments
 (0)