python ray: использование «остановки луча» на узле кластера замедляет работу удаленной функции - PullRequest
0 голосов
/ 28 мая 2019

Я хочу распараллелить функцию, запущенную с использованием ray на python. Как я понимаю, Рэй может «изящно справляться со сбоями машин».

Таким образом, чтобы проверить, могу ли я использовать ray в своем коде с использованием кластера, я попытался распараллелить функцию на нескольких узлах и остановить один из узлов во время работы. Это приводит к очень медленному бегу по сравнению с обычным случаем, когда в середине нет остановки носа. То есть я хочу иметь возможность запускать функцию в пуле рабочих и отсоединять \ подключать узел, в то время как запуск в надежде, что это может обработать луч. При тестировании с помощью простого цикла это приводит к тому, что цикл становится действительно очень медленным (но не происходит сбой).

Я начал с записи на главном узле:

$ ray start --head --redis-port=6379

Затем на трех других узлах я подключаюсь к кластеру:

$ ray start --redis-address=IP:PORT

пока все хорошо. Теперь, если я вхожу в python с одним из узлов и запускаю следующий код, все работает как положено:

import ray
import time
import tqdm

ray.init(redis_address="IP:PORT")

@ray.remote
def f(i):
    time.sleep(1.0)
    return [ray.services.get_node_ip_address(), i]

res = []
workers = [f.remote(i) for i in range(1000)]
for w in tqdm(workers):
    res.append(ray.get(w))
print set([r[0] for r in res])

Этот код будет запущен на моем кластере примерно через 10 секунд.

Теперь, если я бегу

$ ray stop

на одном из кластеров, пока цикл работает, цикл займет ~ 1 час.

Чего мне не хватает?

...