Skip to content

Commit 49f4ce3

Browse files
committed
"use_gpus" is never set, so remove. So since the sims explicitly want procs matched to GPUs we really ought to assign sims to those resource sets first. Only if no GPU rsets exist do we fallback to non-gpu sets, producing a correct wait upon allocation. Thanks Claude.
1 parent b235614 commit 49f4ce3

2 files changed

Lines changed: 8 additions & 13 deletions

File tree

libensemble/tests/functionality_tests/test_mpi_gpu_settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
# Do not change these lines - they are parsed by run-tests.sh
4141
# TESTSUITE_COMMS: mpi local
42-
# TESTSUITE_NPROCS: 3 6
42+
# TESTSUITE_NPROCS: 4 7
4343

4444
import os
4545
import sys
@@ -88,7 +88,7 @@
8888
"out": [("priority", float), ("resource_sets", int), ("x", float, n)],
8989
"give_all_with_same_priority": False,
9090
"async_return": False,
91-
"initial_batch_size": nworkers - 1,
91+
"initial_batch_size": nworkers,
9292
"user": {
9393
"max_resource_sets": nworkers, # Any sim created can req. 1 worker up to all.
9494
"lb": np.array([-3, -2]),

libensemble/tools/alloc_support.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from libensemble.message_numbers import EVAL_GEN_TAG, EVAL_SIM_TAG
66
from libensemble.resources.resources import Resources
7-
from libensemble.resources.scheduler import InsufficientFreeResources, InsufficientResourcesError, ResourceScheduler
7+
from libensemble.resources.scheduler import InsufficientResourcesError, ResourceScheduler
88
from libensemble.utils.misc import extract_H_ranges
99

1010
logger = logging.getLogger(__name__)
@@ -76,13 +76,13 @@ def assign_resources(self, rsets_req, use_gpus=None, user_params=[]):
7676
"""
7777
rset_team = None
7878
if self.resources is not None:
79-
# Try schedule to non-gpu rsets first
80-
if use_gpus is None:
79+
# When GPUs exist and use_gpus not explicitly set, try GPU rsets first
80+
if use_gpus is None and self.sched.resources.total_num_gpu_rsets > 0:
8181
try:
82-
rset_team = self.sched.assign_resources(rsets_req, use_gpus=False, user_params=user_params)
82+
rset_team = self.sched.assign_resources(rsets_req, use_gpus=True, user_params=user_params)
8383
return rset_team
84-
except (InsufficientFreeResources, InsufficientResourcesError):
85-
pass
84+
except InsufficientResourcesError:
85+
pass # More rsets requested than GPU rsets exist - fall back to any
8686

8787
rset_team = self.sched.assign_resources(rsets_req, use_gpus, user_params)
8888
return rset_team
@@ -160,11 +160,6 @@ def _req_resources_sim(self, libE_info, user_params, H, H_rows):
160160
)
161161
else:
162162
num_rsets_req = 1
163-
if "use_gpus" in H.dtype.names:
164-
if np.any(H[H_rows]["use_gpus"]):
165-
use_gpus = True
166-
else:
167-
use_gpus = False
168163
if "num_gpus" in H.dtype.names:
169164
gpus_per_rset = self.resources.resource_manager.gpus_per_rset
170165
num_rsets_req_for_gpus = AllocSupport._convert_rows_to_rsets(

0 commit comments

Comments
 (0)