@@ -507,13 +507,17 @@ def create_placements(nodes: List[str], excl_job_id:Optional[int], lkp: util.Loo
507507def _allocate_nodes_to_placements (nodes : List [str ], excl_job_id :Optional [int ], lkp : util .Lookup ) -> List [PlacementAndNodes ]:
508508 # canned result for no placement policies created
509509 no_pp = [PlacementAndNodes (placement = None , nodes = nodes )]
510-
511- if excl_job_id and len (nodes ) < 2 :
512- return no_pp # don't create placement_policy for just one node
513-
510+
514511 model = nodes [0 ]
515512 nodeset = lkp .node_nodeset (model )
516513
514+ is_slice = bool (getattr (nodeset , 'accelerator_topology' , None ))
515+
516+ excl_job_placement = (excl_job_id is not None ) and (not is_slice )
517+
518+ if excl_job_placement and len (nodes ) < 2 :
519+ return no_pp # don't create placement_policy for just one node
520+
517521 if lkp .is_flex_node (model ):
518522 return no_pp # TODO(FLEX): Add support for workload policies
519523 if lkp .node_is_tpu (model ):
@@ -524,7 +528,8 @@ def _allocate_nodes_to_placements(nodes: List[str], excl_job_id:Optional[int], l
524528 max_count = calculate_chunk_size (nodeset , lkp )
525529
526530 name_prefix = f"{ lkp .cfg .slurm_cluster_name } -slurmgcp-managed-{ nodeset .nodeset_name } "
527- if excl_job_id : # simply chunk given nodes by max size of placement
531+
532+ if excl_job_placement : # simply chunk given nodes by max size of placement
528533 return [
529534 PlacementAndNodes (placement = f"{ name_prefix } -{ excl_job_id } -{ i } " , nodes = chunk )
530535 for i , chunk in enumerate (chunked (nodes , n = max_count ))
0 commit comments