soho-clip-embeddings-explorer / experimental /clip_app_performance_test.py
sohojoe's picture
clip_app_client should return tensors
7bef5db
from concurrent.futures import ThreadPoolExecutor, as_completed
import json
import os
import time
import numpy as np
import requests
import torch
from clip_app_client import ClipAppClient
test_image_url = "https://static.wixstatic.com/media/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg/v1/fill/w_454,h_333,fp_0.50_0.50,q_90/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg"
english_text = (
"It was the best of times, it was the worst of times, it was the age "
"of wisdom, it was the age of foolishness, it was the epoch of belief"
)
app_client = ClipAppClient()
preprocessed_image = app_client.preprocess_image(test_image_url)
def _send_text_request(number):
embeddings = app_client.text_to_embedding(english_text)
return number, embeddings
def _send_image_url_request(number):
embeddings = app_client.image_url_to_embedding(test_image_url)
return number, embeddings
def _send_preprocessed_image_request(number):
embeddings = app_client.preprocessed_image_to_embedding(preprocessed_image)
return number, embeddings
def process(numbers, send_func, max_workers=10):
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = [executor.submit(send_func, number) for number in numbers]
for future in as_completed(futures):
n_result, result = future.result()
print (f"{n_result} : {result.shape}")
if __name__ == "__main__":
n_calls = 300
# test text
numbers = list(range(n_calls))
start_time = time.monotonic()
process(numbers, _send_text_request)
end_time = time.monotonic()
total_time = end_time - start_time
avg_time_ms = total_time / n_calls * 1000
calls_per_sec = n_calls / total_time
print(f"Text...")
print(f" Average time taken: {avg_time_ms:.2f} ms")
print(f" Number of calls per second: {calls_per_sec:.2f}")
# test image url
numbers = list(range(n_calls))
start_time = time.monotonic()
process(numbers, _send_image_url_request)
end_time = time.monotonic()
total_time = end_time - start_time
avg_time_ms = total_time / n_calls * 1000
calls_per_sec = n_calls / total_time
print(f"Image passing url...")
print(f" Average time taken: {avg_time_ms:.2f} ms")
print(f" Number of calls per second: {calls_per_sec:.2f}")
# test image as vector
numbers = list(range(n_calls))
start_time = time.monotonic()
process(numbers, _send_preprocessed_image_request)
end_time = time.monotonic()
total_time = end_time - start_time
avg_time_ms = total_time / n_calls * 1000
calls_per_sec = n_calls / total_time
print(f"Preprocessed image...")
print(f" Average time taken: {avg_time_ms:.2f} ms")
print(f" Number of calls per second: {calls_per_sec:.2f}")
# from concurrent.futures import ThreadPoolExecutor
# import json
# import os
# import numpy as np
# import requests
# from concurrent.futures import ThreadPoolExecutor, as_completed
# import time
# import torch
# # hack for debugging, set HTTP_ADDRESS to "http://127.0.0.1:8000/"
# # os.environ["HTTP_ADDRESS"] = "http://192.168.7.79:8000"
# test_image_url = "https://static.wixstatic.com/media/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg/v1/fill/w_454,h_333,fp_0.50_0.50,q_90/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg"
# english_text = (
# "It was the best of times, it was the worst of times, it was the age "
# "of wisdom, it was the age of foolishness, it was the epoch of belief"
# )
# preprocessed_image = preprocess_image(test_image_url)
# def _send_text_request(number):
# embeddings = text_to_embedding(english_text)
# return number, embeddings
# def _send_image_url_request(number):
# embeddings = image_url_to_embedding(test_image_url)
# return number, embeddings
# def _send_preprocessed_image_request(number):
# embeddings = preprocessed_image_to_embedding(preprocessed_image)
# return number, embeddings
# def process(numbers, send_func, max_workers=10):
# with ThreadPoolExecutor(max_workers=max_workers) as executor:
# futures = [executor.submit(send_func, number) for number in numbers]
# for future in as_completed(futures):
# n_result, result = future.result()
# result = json.loads(result)
# print (f"{n_result} : {len(result[0])}")
# # def process_text(numbers, max_workers=10):
# # for n in numbers:
# # n_result, result = send_text_request(n)
# # result = json.loads(result)
# # print (f"{n_result} : {len(result[0])}")
# if __name__ == "__main__":
# n_calls = 300
# # test text
# # n_calls = 1
# numbers = list(range(n_calls))
# start_time = time.monotonic()
# process(numbers, _send_text_request)
# end_time = time.monotonic()
# total_time = end_time - start_time
# avg_time_ms = total_time / n_calls * 1000
# calls_per_sec = n_calls / total_time
# print(f"Text...")
# print(f" Average time taken: {avg_time_ms:.2f} ms")
# print(f" Number of calls per second: {calls_per_sec:.2f}")
# # test image url
# # n_calls = 1
# numbers = list(range(n_calls))
# start_time = time.monotonic()
# process(numbers, _send_image_url_request)
# end_time = time.monotonic()
# total_time = end_time - start_time
# avg_time_ms = total_time / n_calls * 1000
# calls_per_sec = n_calls / total_time
# print(f"Image passing url...")
# print(f" Average time taken: {avg_time_ms:.2f} ms")
# print(f" Number of calls per second: {calls_per_sec:.2f}")
# # test image as vector
# # n_calls = 1
# numbers = list(range(n_calls))
# start_time = time.monotonic()
# process(numbers, _send_preprocessed_image_request)
# end_time = time.monotonic()
# total_time = end_time - start_time
# avg_time_ms = total_time / n_calls * 1000
# calls_per_sec = n_calls / total_time
# print(f"Preprocessed image...")
# print(f" Average time taken: {avg_time_ms:.2f} ms")
# print(f" Number of calls per second: {calls_per_sec:.2f}")