diff --git a/python/ray/tests/test_placement_group.py b/python/ray/tests/test_placement_group.py index 1c07b920a..a5b75636a 100644 --- a/python/ray/tests/test_placement_group.py +++ b/python/ray/tests/test_placement_group.py @@ -32,11 +32,17 @@ def test_placement_group_pack(ray_start_cluster): ray.init(address=cluster.address) placement_group = ray.util.placement_group( - name="name", strategy="PACK", bundles=[{ - "CPU": 2 - }, { - "CPU": 2 - }]) + name="name", + strategy="PACK", + bundles=[ + { + "CPU": 2, + "GPU": 0 # Test 0 resource spec doesn't break tests. + }, + { + "CPU": 2 + } + ]) ray.get(placement_group.ready()) actor_1 = Actor.options( placement_group=placement_group, diff --git a/src/ray/common/placement_group.h b/src/ray/common/placement_group.h index 2b5b8550a..d304631f8 100644 --- a/src/ray/common/placement_group.h +++ b/src/ray/common/placement_group.h @@ -77,8 +77,16 @@ class PlacementGroupSpecBuilder { auto mutable_bundle_id = message_bundle->mutable_bundle_id(); mutable_bundle_id->set_bundle_index(i); mutable_bundle_id->set_placement_group_id(placement_group_id.Binary()); - message_bundle->mutable_unit_resources()->insert(resources.begin(), - resources.end()); + auto mutable_unit_resources = message_bundle->mutable_unit_resources(); + for (auto it = resources.begin(); it != resources.end();) { + auto current = it++; + // Remove a resource with value 0 because they are not allowed. + if (current->second == 0) { + resources.erase(current); + } else { + mutable_unit_resources->insert({current->first, current->second}); + } + } } return *this; }