У меня есть модель, развернутая на платформе ИИ, которая работает. Однако обрабатывать запросы очень медленно, слишком медленно, чтобы использовать их в prod, поэтому у меня была идея разделить данные для отправки нескольких запросов одновременно и обработать их одновременно разными узлами.
Вот мой код:
from multiprocessing import Pool
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
instances = [...] # 100 items
def f(data):
credentials = GoogleCredentials.get_application_default()
api = discovery.build('ml', 'v1', credentials=credentials, discoveryServiceUrl='https://storage.googleapis.com/cloud-ml/discovery/ml_v1_discovery.json')
PROJECT = ...
MODEL_NAME = ...
VERSION_NAME = ...
parent = "projects/{}/models/{}/versions/{}".format(PROJECT, MODEL_NAME, VERSION_NAME)
response = api.projects().predict(body={"instances": data}, name=parent).execute()
return response
p = Pool(4)
n = 4
print(p.map(f, [
(instances)
] * n))
Однако это не работает. Это должно быть примерно в 4 раза быстрее, чем если бы я отправлял все данные сразу, но на самом деле это занимает примерно то же время. В чем может быть проблема?