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}") | |