mirror of
https://github.com/vale981/ray
synced 2025-03-06 18:41:40 -05:00
42 lines
1.2 KiB
ReStructuredText
42 lines
1.2 KiB
ReStructuredText
Pattern: Tree of actors
|
|
=======================
|
|
|
|
Example use case
|
|
----------------
|
|
|
|
You want to train 3 models at the same time, while being able to checkpoint/inspect its state.
|
|
|
|
In this pattern, a collection of Ray worker actors is managed by a supervisory Ray actor.
|
|
|
|
.. figure:: tree-of-actors.svg
|
|
|
|
Tree of actors
|
|
|
|
A single call to the supervisor actor triggers the dispatch of multiple method calls to child actors. The supervisor can process results or update child actors prior to returning.
|
|
|
|
Notes
|
|
-----
|
|
|
|
- If the supervisor dies (or the driver), the worker actors are automatically terminated thanks to actor reference counting.
|
|
- Actors can be nested to multiple levels to form a tree.
|
|
|
|
Code example
|
|
------------
|
|
|
|
.. code-block:: python
|
|
|
|
@ray.remote(num_cpus=1)
|
|
class Worker:
|
|
def work(self):
|
|
return "done"
|
|
|
|
@ray.remote(num_cpus=1)
|
|
class Supervisor:
|
|
def __init__(self):
|
|
self.workers = [Worker.remote() for _ in range(3)]
|
|
def work(self):
|
|
return ray.get([w.work.remote() for w in self.workers])
|
|
|
|
ray.init()
|
|
sup = Supervisor.remote()
|
|
print(ray.get(sup.work.remote())) # outputs ['done', 'done', 'done']
|