Skip to content

Commit fde4abd

Browse files
authored
Merge pull request #1227 from 545999961/master
update mteb eval
2 parents d1c3b3f + abd9ae8 commit fde4abd

6 files changed

Lines changed: 42 additions & 31 deletions

File tree

FlagEmbedding/abc/evaluation/searcher.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ def __call__(
138138
(not os.path.exists(os.path.join(corpus_embd_save_dir, "doc.npy")) or self.overwrite):
139139
os.makedirs(corpus_embd_save_dir, exist_ok=True)
140140
np.save(os.path.join(corpus_embd_save_dir, "doc.npy"), corpus_emb)
141+
142+
gc.collect()
143+
torch.cuda.empty_cache()
141144

142145
faiss_index = index(corpus_embeddings=corpus_emb)
143146
all_scores, all_indices = search(query_embeddings=queries_emb, faiss_index=faiss_index, k=self.search_top_k)

FlagEmbedding/abc/inference/AbsEmbedder.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,7 @@ def encode(
264264
return embeddings
265265

266266
def __del__(self):
267-
if self.pool is not None:
268-
self.stop_multi_process_pool(self.pool)
267+
self.stop_self_pool()
269268

270269
@abstractmethod
271270
def encode_single_device(

FlagEmbedding/abc/inference/AbsReranker.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,7 @@ def compute_score(
210210
return scores
211211

212212
def __del__(self):
213-
if self.pool is not None:
214-
self.stop_multi_process_pool(self.pool)
213+
self.stop_self_pool()
215214

216215
@abstractmethod
217216
def compute_score_single_gpu(

FlagEmbedding/evaluation/mteb/runner.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,15 @@ def read_results(self, output_folder, tasks):
8282
print('ERROR')
8383
break
8484

85-
temp_data = data['scores'][split][0]
86-
87-
if metric == 'ap':
88-
tasks_results[t_type][task_name] = round(temp_data['cos_sim']['ap'] * 100, 2)
89-
elif metric == 'cosine_spearman':
90-
tasks_results[t_type][task_name] = round(temp_data['cos_sim']['spearman'] * 100, 2)
91-
else:
92-
tasks_results[t_type][task_name] = round(temp_data[metric] * 100, 2)
85+
temp_datas = data['scores'][split][0]
86+
temp_data = None
87+
for td in temp_datas:
88+
if td['hf_subset'] == 'default':
89+
temp_data = td
90+
if temp_data is None:
91+
temp_data = temp_datas[0]
92+
tasks_results[t_type][task_name] = round(temp_data['main_score'] * 100, 2)
93+
9394
print(f"tasks_results: {tasks_results}")
9495
return tasks_results
9596

@@ -145,16 +146,13 @@ def run(self):
145146
task_types=task_types
146147
)
147148
output_folder = self.eval_args.output_dir
148-
new_tasks = []
149-
for task in tasks:
150-
if task.languages is not None:
151-
if len(task.languages) == len([e for e in languages if e in task.languages]):
152-
new_tasks.append(task)
153149

154-
for task in new_tasks:
150+
for task in tasks:
155151
task_name = task.metadata.name
156152
task_type = task.metadata.type
157153

154+
self.retriever.stop_pool()
155+
158156
if self.eval_args.use_special_instructions:
159157
try:
160158
instruction = get_task_def_by_task_name_and_type(task_name, task_type)

FlagEmbedding/evaluation/mteb/searcher.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import numpy as np
2+
13
from typing import List, Dict, Optional
24
from FlagEmbedding.abc.evaluation import EvalDenseRetriever, EvalReranker
35

@@ -41,6 +43,13 @@ def set_normalize_embeddings(self, normalize_embeddings: bool = True):
4143
"""
4244
self.embedder.normalize_embeddings = normalize_embeddings
4345

46+
def stop_pool(self):
47+
self.embedder.stop_self_pool()
48+
try:
49+
self.embedder.stop_self_query_pool()
50+
except:
51+
pass
52+
4453
def encode_queries(self, queries: List[str], **kwargs):
4554
"""Encode input queries.
4655
@@ -53,7 +62,7 @@ def encode_queries(self, queries: List[str], **kwargs):
5362
emb = self.embedder.encode_queries(queries)
5463
if isinstance(emb, dict):
5564
emb = emb["dense_vecs"]
56-
return emb
65+
return emb.astype(np.float32)
5766

5867
def encode_corpus(self, corpus: List[Dict[str, str]], **kwargs):
5968
"""Encode input corpus.
@@ -71,7 +80,7 @@ def encode_corpus(self, corpus: List[Dict[str, str]], **kwargs):
7180
emb = self.embedder.encode_corpus(input_texts)
7281
if isinstance(emb, dict):
7382
emb = emb["dense_vecs"]
74-
return emb
83+
return emb.astype(np.float32)
7584

7685
def encode(self, corpus: List[Dict[str, str]], **kwargs):
7786
"""Encode the imput.
@@ -89,7 +98,7 @@ def encode(self, corpus: List[Dict[str, str]], **kwargs):
8998
emb = self.embedder.encode_queries(input_texts)
9099
if isinstance(emb, dict):
91100
emb = emb["dense_vecs"]
92-
return emb
101+
return emb.astype(np.float32)
93102

94103
class MTEBEvalReranker(EvalReranker):
95104
"""

FlagEmbedding/inference/embedder/decoder_only/icl.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import queue
55
from multiprocessing import Queue
66

7+
import gc
78
import torch
89
import numpy as np
910
from transformers import AutoModel, AutoTokenizer
@@ -121,10 +122,8 @@ def __init__(
121122
self.query_pool = None
122123

123124
def __del__(self):
124-
if self.pool is not None:
125-
self.stop_multi_process_pool(self.pool)
126-
if self.query_pool is not None:
127-
self.stop_multi_process_pool(self.query_pool)
125+
self.stop_self_pool()
126+
self.stop_self_query_pool()
128127

129128
def set_examples(self, examples_for_task: Optional[List[dict]] = None):
130129
"""Set the prefix to the provided examples.
@@ -175,6 +174,14 @@ def get_detailed_example(instruction_format: str, instruction: str, query: str,
175174
"""
176175
return instruction_format.format(instruction, query, response)
177176

177+
def stop_self_query_pool(self):
178+
if self.query_pool is not None:
179+
self.stop_multi_process_pool(self.query_pool)
180+
self.query_pool = None
181+
self.model.to('cpu')
182+
gc.collect()
183+
torch.cuda.empty_cache()
184+
178185
def encode_queries(
179186
self,
180187
queries: Union[List[str], str],
@@ -209,9 +216,7 @@ def encode_queries(
209216
**kwargs
210217
)
211218

212-
if self.pool is not None:
213-
self.stop_multi_process_pool(self.pool)
214-
self.pool = None
219+
self.stop_self_pool()
215220
if self.query_pool is None:
216221
self.query_pool = self.start_multi_process_pool(ICLLLMEmbedder._encode_queries_multi_process_worker)
217222
embeddings = self.encode_multi_process(
@@ -244,9 +249,7 @@ def encode_corpus(
244249
Returns:
245250
Union[torch.Tensor, np.ndarray]: Return the embedding vectors in a numpy array or tensor.
246251
"""
247-
if self.query_pool is not None:
248-
self.stop_multi_process_pool(self.query_pool)
249-
self.query_pool = None
252+
self.stop_self_query_pool()
250253
return super().encode_corpus(
251254
corpus,
252255
batch_size=batch_size,

0 commit comments

Comments
 (0)