mirror of
https://github.com/wassname/ray.git
synced 2026-07-04 00:50:21 +08:00
Changes where actor resources are assigned (#4323)
This commit is contained in:
committed by
Robert Nishihara
parent
01699ce4ea
commit
11580fb7dc
@@ -502,6 +502,89 @@ def test_actor_class_methods(ray_start_regular):
|
||||
assert ray.get(a.g.remote(2)) == 4
|
||||
|
||||
|
||||
def test_resource_assignment(shutdown_only):
|
||||
"""Test to make sure that we assign resource to actors at instantiation."""
|
||||
# This test will create 16 actors. Declaring this many CPUs initially will
|
||||
# speed up the test because the workers will be started ahead of time.
|
||||
ray.init(num_cpus=16, num_gpus=1, resources={"Custom": 1})
|
||||
|
||||
class Actor(object):
|
||||
def __init__(self):
|
||||
self.resources = ray.get_resource_ids()
|
||||
|
||||
def get_actor_resources(self):
|
||||
return self.resources
|
||||
|
||||
def get_actor_method_resources(self):
|
||||
return ray.get_resource_ids()
|
||||
|
||||
decorator_resource_args = [{}, {
|
||||
"num_cpus": 0.1
|
||||
}, {
|
||||
"num_gpus": 0.1
|
||||
}, {
|
||||
"resources": {
|
||||
"Custom": 0.1
|
||||
}
|
||||
}]
|
||||
instantiation_resource_args = [{}, {
|
||||
"num_cpus": 0.2
|
||||
}, {
|
||||
"num_gpus": 0.2
|
||||
}, {
|
||||
"resources": {
|
||||
"Custom": 0.2
|
||||
}
|
||||
}]
|
||||
for decorator_args in decorator_resource_args:
|
||||
for instantiation_args in instantiation_resource_args:
|
||||
if len(decorator_args) == 0:
|
||||
actor_class = ray.remote(Actor)
|
||||
else:
|
||||
actor_class = ray.remote(**decorator_args)(Actor)
|
||||
actor = actor_class._remote(**instantiation_args)
|
||||
actor_resources = ray.get(actor.get_actor_resources.remote())
|
||||
actor_method_resources = ray.get(
|
||||
actor.get_actor_method_resources.remote())
|
||||
if len(decorator_args) == 0 and len(instantiation_args) == 0:
|
||||
assert len(actor_resources) == 0, (
|
||||
"Actor should not be assigned resources.")
|
||||
assert list(actor_method_resources.keys()) == [
|
||||
"CPU"
|
||||
], ("Actor method should only have CPUs")
|
||||
assert actor_method_resources["CPU"][0][1] == 1, (
|
||||
"Actor method should default to one cpu.")
|
||||
else:
|
||||
if ("num_cpus" not in decorator_args
|
||||
and "num_cpus" not in instantiation_args):
|
||||
assert actor_resources["CPU"][0][1] == 1, (
|
||||
"Actor should default to one cpu.")
|
||||
correct_resources = {}
|
||||
defined_resources = decorator_args.copy()
|
||||
defined_resources.update(instantiation_args)
|
||||
for resource, value in defined_resources.items():
|
||||
if resource == "num_cpus":
|
||||
correct_resources["CPU"] = value
|
||||
elif resource == "num_gpus":
|
||||
correct_resources["GPU"] = value
|
||||
elif resource == "resources":
|
||||
for custom_resource, amount in value.items():
|
||||
correct_resources[custom_resource] = amount
|
||||
for resource, amount in correct_resources.items():
|
||||
assert (actor_resources[resource][0][0] ==
|
||||
actor_method_resources[resource][0][0]), (
|
||||
"Should have assigned same {} for both actor ",
|
||||
"and actor method.".format(resource))
|
||||
assert (actor_resources[resource][0][
|
||||
1] == actor_method_resources[resource][0][1]), (
|
||||
"Should have assigned same amount of {} for both ",
|
||||
"actor and actor method.".format(resource))
|
||||
assert actor_resources[resource][0][1] == amount, (
|
||||
"Actor should have {amount} {resource} but has ",
|
||||
"{amount} {resource}".format(
|
||||
amount=amount, resource=resource))
|
||||
|
||||
|
||||
def test_multiple_actors(ray_start_regular):
|
||||
@ray.remote
|
||||
class Counter(object):
|
||||
|
||||
@@ -807,7 +807,7 @@ def test_defining_remote_functions(shutdown_only):
|
||||
|
||||
|
||||
def test_submit_api(shutdown_only):
|
||||
ray.init(num_cpus=1, num_gpus=1, resources={"Custom": 1})
|
||||
ray.init(num_cpus=2, num_gpus=1, resources={"Custom": 1})
|
||||
|
||||
@ray.remote
|
||||
def f(n):
|
||||
|
||||
@@ -139,8 +139,11 @@ def test_actor_broadcast(ray_start_cluster_with_resource):
|
||||
pass
|
||||
|
||||
actors = [
|
||||
Actor._remote(args=[], kwargs={}, resources={str(i % num_nodes): 1})
|
||||
for i in range(100)
|
||||
Actor._remote(
|
||||
args=[],
|
||||
kwargs={},
|
||||
num_cpus=0.01,
|
||||
resources={str(i % num_nodes): 1}) for i in range(100)
|
||||
]
|
||||
|
||||
# Wait for the actors to start up.
|
||||
|
||||
Reference in New Issue
Block a user