|
""" |
|
This examples measures the inference speed of a certain model |
|
|
|
Usage: |
|
python evaluation_inference_speed.py |
|
OR |
|
python evaluation_inference_speed.py model_name |
|
""" |
|
from sentence_transformers import SentenceTransformer, util |
|
import sys |
|
import os |
|
import time |
|
import torch |
|
import gzip |
|
import csv |
|
|
|
|
|
torch.set_num_threads(4) |
|
|
|
|
|
model_name = sys.argv[1] if len(sys.argv) > 1 else 'bert-base-nli-mean-tokens' |
|
|
|
|
|
|
|
model = SentenceTransformer(model_name) |
|
|
|
|
|
nli_dataset_path = 'datasets/AllNLI.tsv.gz' |
|
sentences = set() |
|
max_sentences = 100000 |
|
|
|
|
|
|
|
if not os.path.exists(nli_dataset_path): |
|
util.http_get('https://sbert.net/datasets/AllNLI.tsv.gz', nli_dataset_path) |
|
|
|
with gzip.open(nli_dataset_path, 'rt', encoding='utf8') as fIn: |
|
reader = csv.DictReader(fIn, delimiter='\t', quoting=csv.QUOTE_NONE) |
|
for row in reader: |
|
sentences.add(row['sentence1']) |
|
if len(sentences) >= max_sentences: |
|
break |
|
|
|
sentences = list(sentences) |
|
print("Model Name:", model_name) |
|
print("Number of sentences:", len(sentences)) |
|
|
|
for i in range(3): |
|
print("Run", i) |
|
start_time = time.time() |
|
emb = model.encode(sentences, batch_size=32) |
|
end_time = time.time() |
|
diff_time = end_time - start_time |
|
print("Done after {:.2f} seconds".format(diff_time)) |
|
print("Speed: {:.2f} sentences / second".format(len(sentences) / diff_time)) |
|
print("=====") |
|
|