| | from pprint import pprint |
| | from PIL import Image |
| | import os |
| | import time |
| | import requests |
| | import base64 |
| | import numpy as np |
| | from io import BytesIO |
| | import concurrent.futures |
| |
|
| | NUM_SEGMENTS = 10 |
| |
|
| | tic = time.time() |
| | video_dir = '/home/ubuntu/shared_storage/images' |
| | frames = [(os.path.splitext(item)[0], os.path.join(video_dir, item)) for item in os.listdir(video_dir)] |
| | frames = [item[1] for item in sorted(frames, key=lambda x: x[0])] |
| | indices = np.linspace(start=0, stop=len(frames)-1, num=NUM_SEGMENTS).astype(int) |
| | image_paths = [frames[ind] for ind in indices] |
| |
|
| | request = {} |
| | byte_images = [] |
| |
|
| | def image_path_handler(image_path): |
| | img = Image.open(image_path) |
| | byte_io = BytesIO() |
| | img.save(byte_io, format='PNG') |
| | encoded_image = base64.b64encode(byte_io.getvalue()).decode('utf-8') |
| | return encoded_image |
| |
|
| | with concurrent.futures.ThreadPoolExecutor(16) as executor: |
| | byte_images = list(executor.map(image_path_handler, image_paths)) |
| |
|
| | payload = { |
| | "images": byte_images * 16, |
| | "parameters": { |
| | "max_new_tokens": 90, |
| | "top_k": 4, |
| | "top_p": None, |
| | "temperature": 0.01, |
| | "no_repeat_ngram_size": None, |
| | } |
| | } |
| |
|
| | IP = '127.0.0.1' |
| | headers = {'Content-Type': 'application/json'} |
| | tic1 = time.time() |
| |
|
| | def loop_request(port): |
| | url = f'http://{IP}:{port}/generate' |
| | response = requests.post(url, json=payload, headers=headers) |
| | return response.text |
| |
|
| | num = 6 |
| | ports = [] |
| | for port in range(num): |
| | ports.append(str(8000 + port)) |
| |
|
| | |
| | |
| | |
| | |
| | with concurrent.futures.ThreadPoolExecutor(num) as executor: |
| | results = [executor.submit(loop_request, port) for port in ports] |
| |
|
| | toc = time.time() |
| | for result in results: |
| | print(result.result()) |
| |
|
| | print('stage 1', tic1 - tic) |
| | print('stage 2', toc - tic1) |
| |
|