scripts/slurm_gcp_plugins/max_hops/__init__.py (33 lines of code) (raw):

import logging import sys import slurm_gcp_plugins.utils as sgp_utils # Allows setting a specific max_hop for jobs # # To enable: # * add this directory to the slurm-gcp plugin path (usually /slurm/scripts/slurm-gcp-plugins) # * add the following to the slurm-gcp config (usually /slurm/scripts/config.yaml): # # enable_slurm_gcp_plugins: # <possibly other plugins> # max_hops: # max_hops: <hops> # # # Where <hps> can be either of 1,2,3 (in increasing order of distance) # If no max_hops is provided but the plugins is still enabled the default level is 3 def pre_placement_group_insert(*pos_args, **keyword_args): logging.info("Trying to enable max hop") # Avoid circular import (util imports the plugins) if "util" in sys.modules: logging.info("Setting compute service version to beta") sys.modules["util"].compute = sys.modules["util"].compute_service( version="beta" ) max_distance = sgp_utils.get_plugin_setting( plugin="max_hops", setting="max_hops", job=get_job_from_placement_group_name(keyword_args["pg_name"]), lkp=keyword_args["lkp"], default=3, ) logging.debug(f"Setting max hop for placement policy to {max_distance}") keyword_args["request_body"]["groupPlacementPolicy"][ "collocation=" ] = "COLLOCATED" keyword_args["request_body"]["groupPlacementPolicy"][ "maxDistance" ] = max_distance else: logging.error( "max_hops can not be set (slurm_gcp util.py must be imported by the caller of the plugin callback)" ) __all__ = [ "pre_placement_group_insert", ] # This should be replaced if the job id becomes available in the context of this plugin hook def get_job_from_placement_group_name(pg_name): # f"{cfg.slurm_cluster_name}-{partition_name}-{job_id}-{i}" return pg_name.split("-")[2]