Support concurrent Actor calls in Ray (#6053)

This commit is contained in:
Eric Liang
2019-11-04 01:14:35 -08:00
committed by GitHub
parent fbad6f543b
commit 8485304e83
21 changed files with 287 additions and 86 deletions
+29 -6
View File
@@ -142,14 +142,28 @@ def main():
def actor_sync():
ray.get(a.small_value.remote())
timeit("single client actor calls sync", actor_sync)
timeit("1:1 actor calls sync", actor_sync)
a = Actor.remote()
def actor_async():
ray.get([a.small_value.remote() for _ in range(1000)])
timeit("single client actor calls async", actor_async, 1000)
timeit("1:1 actor calls async", actor_async, 1000)
a = Actor.options(is_direct_call=True).remote()
def actor_concurrent():
ray.get([a.small_value.remote() for _ in range(1000)])
timeit("1:1 direct actor calls async", actor_concurrent, 1000)
a = Actor.options(is_direct_call=True, max_concurrency=16).remote()
def actor_concurrent():
ray.get([a.small_value.remote() for _ in range(1000)])
timeit("1:1 direct actor calls concurrent", actor_concurrent, 1000)
n_cpu = multiprocessing.cpu_count() // 2
a = [Actor.remote() for _ in range(n_cpu)]
@@ -161,7 +175,7 @@ def main():
def actor_multi2():
ray.get([work.remote(a) for _ in range(m)])
timeit("multi client actor calls async", actor_multi2, m * n)
timeit("n:n actor calls async", actor_multi2, m * n)
n = 5000
n_cpu = multiprocessing.cpu_count() // 2
@@ -171,15 +185,24 @@ def main():
def actor_async_direct():
ray.get(client.small_value_batch.remote(n))
timeit("single client direct actor calls async", actor_async_direct,
n * len(actors))
timeit("1:n direct actor calls async", actor_async_direct, n * len(actors))
clients = [Client.remote(a) for a in actors]
def actor_multi2_direct():
ray.get([c.small_value_batch.remote(n) for c in clients])
timeit("multi client direct actor calls async", actor_multi2_direct,
timeit("n:n direct actor calls async", actor_multi2_direct,
n * len(clients))
n = 1000
actors = [Actor._remote(is_direct_call=True) for _ in range(n_cpu)]
clients = [Client.remote(a) for a in actors]
def actor_multi2_direct_arg():
ray.get([c.small_value_batch_arg.remote(n) for c in clients])
timeit("n:n direct actor calls with arg async", actor_multi2_direct_arg,
n * len(clients))
n = 1000