Балансировка нагрузки с участием актеров в ray? - PullRequest
0 голосов
/ 08 ноября 2019

Если у меня есть функция, Ray может автоматически балансировать нагрузку, поэтому все мои работники заняты.

@ray.remote
def f(task):
    context = very_long_init_fun()
    return work(task,context=context) # this runs sometimes fast, sometimes slow

results = ray.get([f.remote(task) for task in tasks])

Если я использую актеры, я могу сохранить длительное время инициализации или кэшировать значениямежду задачами, но я теряю способность автоматически балансировать нагрузку между моими работниками. Если некоторые работники заканчивают работу раньше времени, они просто сидят и ничего не делают, хотя еще остается много работы.

@ray.remote
class StatefulWorker(object):
    def __init__(self):
        self.context = very_long_init_fun()

    def work(self,task):
        return work(task,context = self.context) # this runs sometimes fast, sometimes slow

actors = [StatefulWorker.remote() for _ in range(num_workers)]
results = []
# naive load balancing: evenly distribute the tasks between the workers
for task_i,task in enumerate(tasks):
    results.append(actors[task_i % num_workers].work.remote(task))
results = ray.get(results)

Вопрос : Есть ли хороший способ получитьрабочие состояния и балансировка нагрузки одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...