|
7 | 7 | - name: Load variables |
8 | 8 | include_vars: "group_vars/transfer-speed.yml" |
9 | 9 |
|
10 | | - - name: Load datasets |
11 | | - include_vars: "group_vars/datasets.yml" |
12 | | - |
13 | 10 | - name: Set bootstrap URI for non-first nodes |
14 | 11 | set_fact: |
15 | 12 | cluster_bootstrap_uri: "{{ 'http://' + hostvars[groups['remote_machines'][0]]['ansible_host'] + ':6335' if inventory_hostname != groups['remote_machines'][0] else '' }}" |
16 | 13 |
|
17 | | - - name: Execute cluster setup role |
| 14 | + - name: Setup Qdrant cluster node |
18 | 15 | include_role: |
19 | | - name: "run-transfer-speed" |
| 16 | + name: "setup-qdrant-cluster" |
20 | 17 | vars: |
21 | 18 | server_version: "{{ servers[0].version }}" |
22 | 19 | server_registry: "{{ servers[0].registry }}" |
23 | 20 |
|
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 | | - |
41 | 21 | - name: Run benchmark |
42 | 22 | hosts: client_machines |
43 | 23 | become: yes |
44 | 24 | 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(',') }}" |
46 | 26 | tasks: |
47 | 27 | - name: Load variables |
48 | 28 | include_vars: "group_vars/transfer-speed.yml" |
49 | 29 |
|
50 | 30 | - name: Load datasets |
51 | 31 | include_vars: "group_vars/datasets.yml" |
52 | 32 |
|
53 | | - - name: Ensure necessary packages are installed |
| 33 | + - name: Ensure python3-venv is installed |
54 | 34 | ansible.builtin.package: |
55 | | - name: "{{ item }}" |
| 35 | + name: python3-venv |
56 | 36 | 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" } |
88 | 37 |
|
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" |
146 | 41 |
|
147 | 42 | #- name: Export data into postgres |
148 | 43 | # hosts: db_hosts |
|
0 commit comments