mirror of
https://github.com/wassname/ray.git
synced 2026-07-16 11:21:10 +08:00
[Placement Group] Allow scheduling a task on any bundle (-1, default) (#9885)
* wip * wip * fix tests * wip * wip * wip * wip * wip * add test * update * update * remov debug * comments
This commit is contained in:
+18
-19
@@ -398,24 +398,22 @@ class ActorClass:
|
||||
|
||||
return ActorOptionWrapper()
|
||||
|
||||
def _remote(
|
||||
self,
|
||||
args=None,
|
||||
kwargs=None,
|
||||
num_cpus=None,
|
||||
num_gpus=None,
|
||||
memory=None,
|
||||
object_store_memory=None,
|
||||
resources=None,
|
||||
is_direct_call=None,
|
||||
max_concurrency=None,
|
||||
max_restarts=None,
|
||||
max_task_retries=None,
|
||||
name=None,
|
||||
detached=False,
|
||||
placement_group_id=None,
|
||||
# TODO(ekl) set default to -1 once we support -1 as "any index"
|
||||
placement_group_bundle_index=0):
|
||||
def _remote(self,
|
||||
args=None,
|
||||
kwargs=None,
|
||||
num_cpus=None,
|
||||
num_gpus=None,
|
||||
memory=None,
|
||||
object_store_memory=None,
|
||||
resources=None,
|
||||
is_direct_call=None,
|
||||
max_concurrency=None,
|
||||
max_restarts=None,
|
||||
max_task_retries=None,
|
||||
name=None,
|
||||
detached=False,
|
||||
placement_group_id=None,
|
||||
placement_group_bundle_index=-1):
|
||||
"""Create an actor.
|
||||
|
||||
This method allows more flexibility than the remote method because
|
||||
@@ -443,7 +441,8 @@ class ActorClass:
|
||||
placement_group_id: the placement group this actor belongs to,
|
||||
or None if it doesn't belong to any group.
|
||||
placement_group_bundle_index: the index of the bundle
|
||||
if the actor belongs to a placement group.
|
||||
if the actor belongs to a placement group, which may be -1 to
|
||||
specify any available bundle.
|
||||
|
||||
Returns:
|
||||
A handle to the newly created actor.
|
||||
|
||||
@@ -139,21 +139,19 @@ class RemoteFunction:
|
||||
|
||||
return FuncWrapper()
|
||||
|
||||
def _remote(
|
||||
self,
|
||||
args=None,
|
||||
kwargs=None,
|
||||
num_return_vals=None,
|
||||
is_direct_call=None,
|
||||
num_cpus=None,
|
||||
num_gpus=None,
|
||||
memory=None,
|
||||
object_store_memory=None,
|
||||
resources=None,
|
||||
max_retries=None,
|
||||
placement_group_id=None,
|
||||
# TODO(ekl) set default to -1 once we support -1 as "any index"
|
||||
placement_group_bundle_index=0):
|
||||
def _remote(self,
|
||||
args=None,
|
||||
kwargs=None,
|
||||
num_return_vals=None,
|
||||
is_direct_call=None,
|
||||
num_cpus=None,
|
||||
num_gpus=None,
|
||||
memory=None,
|
||||
object_store_memory=None,
|
||||
resources=None,
|
||||
max_retries=None,
|
||||
placement_group_id=None,
|
||||
placement_group_bundle_index=-1):
|
||||
"""Submit the remote function for execution."""
|
||||
worker = ray.worker.global_worker
|
||||
worker.check_connected()
|
||||
|
||||
@@ -135,6 +135,17 @@ def test_placement_group_task_resource_ids(ray_start_cluster):
|
||||
resources = ray.get(o1)
|
||||
assert len(resources) == 1, resources
|
||||
assert "CPU_group_" in list(resources.keys())[0], resources
|
||||
assert "CPU_group_0_" not in list(resources.keys())[0], resources
|
||||
|
||||
# Now retry with a bundle index constraint.
|
||||
o1 = f.options(
|
||||
placement_group_id=g1, placement_group_bundle_index=0).remote()
|
||||
resources = ray.get(o1)
|
||||
assert len(resources) == 2, resources
|
||||
keys = list(resources.keys())
|
||||
assert "CPU_group_" in keys[0], resources
|
||||
assert "CPU_group_" in keys[1], resources
|
||||
assert "CPU_group_0_" in keys[0] or "CPU_group_0_" in keys[1], resources
|
||||
|
||||
|
||||
def test_placement_group_hang(ray_start_cluster):
|
||||
|
||||
@@ -1774,7 +1774,7 @@ def make_decorator(num_return_vals=None,
|
||||
max_task_retries=None,
|
||||
worker=None,
|
||||
placement_group_id=None,
|
||||
placement_group_bundle_index=0):
|
||||
placement_group_bundle_index=-1):
|
||||
def decorator(function_or_class):
|
||||
if (inspect.isfunction(function_or_class)
|
||||
or is_cython(function_or_class)):
|
||||
@@ -1864,7 +1864,8 @@ def remote(*args, **kwargs):
|
||||
* **placement_group_id**: the placement group this task belongs to,
|
||||
or None if it doesn't belong to any group.
|
||||
* **placement_group_bundle_index**: the index of the bundle
|
||||
if the task belongs to a placement group.
|
||||
if the task belongs to a placement group, which may be -1 to indicate
|
||||
any available bundle.
|
||||
|
||||
This can be done as follows:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user