From 74c7a21c234173378dde4fe8ec467b50659b9ea5 Mon Sep 17 00:00:00 2001 From: Alexander Efimov Date: Thu, 4 Sep 2025 13:20:33 +0000 Subject: [PATCH 1/5] Added custom Features support to Slurm config generator --- .../head_node_slurm/slurm/config_renderer.py | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py b/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py index f580a74be7..387b3d9827 100644 --- a/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py +++ b/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py @@ -85,24 +85,38 @@ def _definitions(self, dynamic=False): return definitions def _features(self, dynamic=False): + features = set(self.custom_settings.get("Features", "").split(',')) + # this is a simple workaround for empty Features: split will give [''] and we'll discard it + # as well as all empty strings. + features.discard('') + + # remove "system" features from configured features, so that they will never interfere + for feat in ('static', 'dynamic', 'gpu', 'efa') : + features.discard(feat) + resource_type = "static" if dynamic: resource_type = "dynamic" + features.add(resource_type) + + # If there's only 1 instance type defined, add it as a feature. + # Note: When multiple instance types are defined we do not know in advance which one will be used + # to launch the node. So we do not list any of them as feature + if len(self.instance_types) == 1: + features.add(self.instance_types[0]) - instance_type = f",{self.instance_types[0]}" - if len(self.instance_types) > 1: - # When multiple instance types are defined we do not know in advance which one will be used - # to launch the node. So we do not list any of them as feature - instance_type = "" + # add ComputeResource name as a feature + features.add(self.name) - features = f"Feature={resource_type}{instance_type},{self.name}" if self.efa_enabled: - features += ",efa" + features.add('efa') if self.gpu_count > 0: - features += ",gpu" - - return features + features.add('gpu') + + # Note: sorted() is called to ease tests development only: we can then predict features ordering + features_string = ','.join(sorted(features)) + return f"Feature={features_string}" def _custom_settings(self): custom = "" From 82a43e2180fcfcb26411c57c2baffd04b1441bca Mon Sep 17 00:00:00 2001 From: Alexander Efimov Date: Thu, 4 Sep 2025 13:20:43 +0000 Subject: [PATCH 2/5] Fixing tests --- .../pcluster/slurm_parallelcluster_efa_partition.conf | 4 ++-- .../slurm_parallelcluster_efa_partition_mem_sched.conf | 4 ++-- .../pcluster/slurm_parallelcluster_gpu_partition.conf | 6 +++--- .../slurm_parallelcluster_gpu_partition_mem_sched.conf | 6 +++--- .../slurm_parallelcluster_multiple_spot_partition.conf | 6 +++--- ...m_parallelcluster_multiple_spot_partition_mem_sched.conf | 6 +++--- .../pcluster/slurm_parallelcluster_efa_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_gpu_partition.conf | 6 +++--- .../slurm_parallelcluster_gpu_partition_no_gpu.conf | 6 +++--- .../slurm_parallelcluster_multiple_spot_partition.conf | 6 +++--- .../pcluster/slurm_parallelcluster_efa_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_gpu_partition.conf | 6 +++--- .../slurm_parallelcluster_multiple_spot_partition.conf | 6 +++--- .../slurm_parallelcluster_queue_jls_default_partition.conf | 2 +- .../slurm_parallelcluster_queue_jls_disabled_partition.conf | 2 +- .../slurm_parallelcluster_queue_jls_enabled_partition.conf | 2 +- .../pcluster/slurm_parallelcluster_queue1_partition.conf | 6 +++--- .../pcluster/slurm_parallelcluster_queue2_partition.conf | 6 +++--- .../pcluster/slurm_parallelcluster_queue3_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_queue4_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_queue5_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_queue6_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_queue7_partition.conf | 4 ++-- .../pcluster/slurm_parallelcluster_queue8_partition.conf | 4 ++-- 24 files changed, 56 insertions(+), 56 deletions(-) diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf index f7537a6aea..c8e1f86521 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=static,c5n.18xlarge,efa-c5n,efa Weight=1 -NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=dynamic,c5n.18xlarge,efa-c5n,efa Weight=1000 +NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,efa,efa-c5n,static Weight=1 +NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,dynamic,efa,efa-c5n Weight=1000 NodeSet=efa_nodes Nodes=efa-st-efa-c5n-[1-1],efa-dy-efa-c5n-[1-4] PartitionName=efa Nodes=efa_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition_mem_sched.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition_mem_sched.conf index a275524093..3dd92d9163 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition_mem_sched.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_efa_partition_mem_sched.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=176947 State=CLOUD Feature=static,c5n.18xlarge,efa-c5n,efa Weight=1 -NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=176947 State=CLOUD Feature=dynamic,c5n.18xlarge,efa-c5n,efa Weight=1000 +NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=176947 State=CLOUD Feature=c5n.18xlarge,efa,efa-c5n,static Weight=1 +NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=176947 State=CLOUD Feature=c5n.18xlarge,dynamic,efa,efa-c5n Weight=1000 NodeSet=efa_nodes Nodes=efa-st-efa-c5n-[1-1],efa-dy-efa-c5n-[1-4] PartitionName=efa Nodes=efa_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf index 9400eca779..c6b1446078 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=237363 State=CLOUD Feature=static,g3.8xlarge,gpu-g38xlarge,gpu Weight=1 Gres=gpu:m60:2 -NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu-g38xlarge,gpu Weight=1000 Gres=gpu:m60:2 -NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=747110 State=CLOUD Feature=dynamic,p3dn.24xlarge,gpu-p3dn24xlarge,gpu Weight=1000 Gres=gpu:v100:8 +NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=237363 State=CLOUD Feature=g3.8xlarge,gpu,gpu-g38xlarge,static Weight=1 Gres=gpu:m60:2 +NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu,gpu-g38xlarge Weight=1000 Gres=gpu:m60:2 +NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=747110 State=CLOUD Feature=dynamic,gpu,gpu-p3dn24xlarge,p3dn.24xlarge Weight=1000 Gres=gpu:v100:8 NodeSet=gpu_nodes Nodes=gpu-st-gpu-g38xlarge-[1-1],gpu-dy-gpu-g38xlarge-[1-4],gpu-dy-gpu-p3dn24xlarge-[1-10] PartitionName=gpu Nodes=gpu_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_mem_sched.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_mem_sched.conf index 28c0018279..2ee7c72890 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_mem_sched.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_mem_sched.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=248000 State=CLOUD Feature=static,g3.8xlarge,gpu-g38xlarge,gpu Weight=1 Gres=gpu:m60:2 -NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=248000 State=CLOUD Feature=dynamic,g3.8xlarge,gpu-g38xlarge,gpu Weight=1000 Gres=gpu:m60:2 -NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=707788 State=CLOUD Feature=dynamic,p3dn.24xlarge,gpu-p3dn24xlarge,gpu Weight=1000 Gres=gpu:v100:8 +NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=248000 State=CLOUD Feature=g3.8xlarge,gpu,gpu-g38xlarge,static Weight=1 Gres=gpu:m60:2 +NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=248000 State=CLOUD Feature=dynamic,g3.8xlarge,gpu,gpu-g38xlarge Weight=1000 Gres=gpu:m60:2 +NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=707788 State=CLOUD Feature=dynamic,gpu,gpu-p3dn24xlarge,p3dn.24xlarge Weight=1000 Gres=gpu:v100:8 NodeSet=gpu_nodes Nodes=gpu-st-gpu-g38xlarge-[1-1],gpu-dy-gpu-g38xlarge-[1-4],gpu-dy-gpu-p3dn24xlarge-[1-10] PartitionName=gpu Nodes=gpu_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf index 5d5a46f7df..32d0d75e17 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=static,c4.xlarge,multiplespot-1 Weight=1 -NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=dynamic,c4.xlarge,multiplespot-1 Weight=1000 -NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=static,c5.2xlarge,multiplespot-2 Weight=1 +NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=c4.xlarge,multiplespot-1,static Weight=1 +NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=c4.xlarge,dynamic,multiplespot-1 Weight=1000 +NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=c5.2xlarge,multiplespot-2,static Weight=1 NodeSet=multiple_spot_nodes Nodes=multiple_spot-st-multiplespot-1-[1-5],multiple_spot-dy-multiplespot-1-[1-5],multiple_spot-st-multiplespot-2-[1-5] PartitionName=multiple_spot Nodes=multiple_spot_nodes MaxTime=INFINITE State=UP Default=YES diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition_mem_sched.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition_mem_sched.conf index db1088e645..091b10abc6 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition_mem_sched.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_memory_scheduling/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition_mem_sched.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=2 RealMemory=6912 State=CLOUD Feature=static,c4.xlarge,multiplespot-1 Weight=1 -NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=2 RealMemory=6912 State=CLOUD Feature=dynamic,c4.xlarge,multiplespot-1 Weight=1000 -NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=13000 State=CLOUD Feature=static,c5.2xlarge,multiplespot-2 Weight=1 +NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=2 RealMemory=6912 State=CLOUD Feature=c4.xlarge,multiplespot-1,static Weight=1 +NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=2 RealMemory=6912 State=CLOUD Feature=c4.xlarge,dynamic,multiplespot-1 Weight=1000 +NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=13000 State=CLOUD Feature=c5.2xlarge,multiplespot-2,static Weight=1 NodeSet=multiple_spot_nodes Nodes=multiple_spot-st-multiplespot-1-[1-5],multiple_spot-dy-multiplespot-1-[1-5],multiple_spot-st-multiplespot-2-[1-5] PartitionName=multiple_spot Nodes=multiple_spot_nodes MaxTime=INFINITE State=UP Default=YES diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf index f7537a6aea..c8e1f86521 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=static,c5n.18xlarge,efa-c5n,efa Weight=1 -NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=dynamic,c5n.18xlarge,efa-c5n,efa Weight=1000 +NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,efa,efa-c5n,static Weight=1 +NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,dynamic,efa,efa-c5n Weight=1000 NodeSet=efa_nodes Nodes=efa-st-efa-c5n-[1-1],efa-dy-efa-c5n-[1-4] PartitionName=efa Nodes=efa_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf index 9400eca779..c6b1446078 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=237363 State=CLOUD Feature=static,g3.8xlarge,gpu-g38xlarge,gpu Weight=1 Gres=gpu:m60:2 -NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu-g38xlarge,gpu Weight=1000 Gres=gpu:m60:2 -NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=747110 State=CLOUD Feature=dynamic,p3dn.24xlarge,gpu-p3dn24xlarge,gpu Weight=1000 Gres=gpu:v100:8 +NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=237363 State=CLOUD Feature=g3.8xlarge,gpu,gpu-g38xlarge,static Weight=1 Gres=gpu:m60:2 +NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu,gpu-g38xlarge Weight=1000 Gres=gpu:m60:2 +NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=747110 State=CLOUD Feature=dynamic,gpu,gpu-p3dn24xlarge,p3dn.24xlarge Weight=1000 Gres=gpu:v100:8 NodeSet=gpu_nodes Nodes=gpu-st-gpu-g38xlarge-[1-1],gpu-dy-gpu-g38xlarge-[1-4],gpu-dy-gpu-p3dn24xlarge-[1-10] PartitionName=gpu Nodes=gpu_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_no_gpu.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_no_gpu.conf index 94999d9b93..d555110951 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_no_gpu.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition_no_gpu.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=237363 State=CLOUD Feature=static,g3.8xlarge,gpu-g38xlarge,gpu Weight=1 -NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu-g38xlarge,gpu Weight=1000 -NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=747110 State=CLOUD Feature=dynamic,p3dn.24xlarge,gpu-p3dn24xlarge,gpu Weight=1000 +NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=16 RealMemory=237363 State=CLOUD Feature=g3.8xlarge,gpu,gpu-g38xlarge,static Weight=1 +NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu,gpu-g38xlarge Weight=1000 +NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=48 RealMemory=747110 State=CLOUD Feature=dynamic,gpu,gpu-p3dn24xlarge,p3dn.24xlarge Weight=1000 NodeSet=gpu_nodes Nodes=gpu-st-gpu-g38xlarge-[1-1],gpu-dy-gpu-g38xlarge-[1-4],gpu-dy-gpu-p3dn24xlarge-[1-10] PartitionName=gpu Nodes=gpu_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf index 5d5a46f7df..32d0d75e17 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_files_nogpu/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=static,c4.xlarge,multiplespot-1 Weight=1 -NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=dynamic,c4.xlarge,multiplespot-1 Weight=1000 -NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=static,c5.2xlarge,multiplespot-2 Weight=1 +NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=c4.xlarge,multiplespot-1,static Weight=1 +NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=2 RealMemory=7296 State=CLOUD Feature=c4.xlarge,dynamic,multiplespot-1 Weight=1000 +NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=c5.2xlarge,multiplespot-2,static Weight=1 NodeSet=multiple_spot_nodes Nodes=multiple_spot-st-multiplespot-1-[1-5],multiple_spot-dy-multiplespot-1-[1-5],multiple_spot-st-multiplespot-2-[1-5] PartitionName=multiple_spot Nodes=multiple_spot_nodes MaxTime=INFINITE State=UP Default=YES diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf index b16fcbb647..0a6d983946 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=static,c5n.18xlarge,efa-c5n,efa Weight=1 CustomEfaComputeParam=unique_efa_compute_value OtherEfaComputeParam=second_efa_compute_value -NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=dynamic,c5n.18xlarge,efa-c5n,efa Weight=1000 CustomEfaComputeParam=unique_efa_compute_value OtherEfaComputeParam=second_efa_compute_value +NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,efa,efa-c5n,static Weight=1 CustomEfaComputeParam=unique_efa_compute_value OtherEfaComputeParam=second_efa_compute_value +NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,dynamic,efa,efa-c5n Weight=1000 CustomEfaComputeParam=unique_efa_compute_value OtherEfaComputeParam=second_efa_compute_value NodeSet=efa_nodes Nodes=efa-st-efa-c5n-[1-1],efa-dy-efa-c5n-[1-4] PartitionName=efa Nodes=efa_nodes MaxTime=INFINITE State=UP CustomEfaParam=unique_efa_value OtherEfaParam=second_efa_value diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf index b3f4cfd77e..29822dc298 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=32 RealMemory=237363 State=CLOUD Feature=static,g3.8xlarge,gpu-g38xlarge,gpu Weight=1 Gres=gpu:m60:2 CustomNvidiaParam=nvidia_setting CustomAmdParam=amd_setting CustomIntelParam=intel_setting -NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=32 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu-g38xlarge,gpu Weight=1000 Gres=gpu:m60:2 CustomNvidiaParam=nvidia_setting CustomAmdParam=amd_setting CustomIntelParam=intel_setting -NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=96 RealMemory=747110 State=CLOUD Feature=dynamic,p3dn.24xlarge,gpu-p3dn24xlarge,gpu Weight=1000 Gres=gpu:v100:8 +NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=32 RealMemory=237363 State=CLOUD Feature=g3.8xlarge,gpu,gpu-g38xlarge,static Weight=1 Gres=gpu:m60:2 CustomNvidiaParam=nvidia_setting CustomAmdParam=amd_setting CustomIntelParam=intel_setting +NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=32 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu,gpu-g38xlarge Weight=1000 Gres=gpu:m60:2 CustomNvidiaParam=nvidia_setting CustomAmdParam=amd_setting CustomIntelParam=intel_setting +NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=96 RealMemory=747110 State=CLOUD Feature=dynamic,gpu,gpu-p3dn24xlarge,p3dn.24xlarge Weight=1000 Gres=gpu:v100:8 NodeSet=gpu_nodes Nodes=gpu-st-gpu-g38xlarge-[1-1],gpu-dy-gpu-g38xlarge-[1-4],gpu-dy-gpu-p3dn24xlarge-[1-10] PartitionName=gpu Nodes=gpu_nodes MaxTime=INFINITE State=UP CustomParam=unique_value OtherParam=second_value TreeAsThird=3 diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf index fb91e5b1fb..5a17289861 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_settings/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=4 RealMemory=7296 State=CLOUD Feature=static,c4.xlarge,multiplespot-1 Weight=1 CustomComputeParam=unique_compute_value OtherComputeParam=second_compute_value -NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=4 RealMemory=7296 State=CLOUD Feature=dynamic,c4.xlarge,multiplespot-1 Weight=1000 CustomComputeParam=unique_compute_value OtherComputeParam=second_compute_value -NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=static,c5.2xlarge,multiplespot-2 Weight=1 +NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=4 RealMemory=7296 State=CLOUD Feature=c4.xlarge,multiplespot-1,static Weight=1 CustomComputeParam=unique_compute_value OtherComputeParam=second_compute_value +NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=4 RealMemory=7296 State=CLOUD Feature=c4.xlarge,dynamic,multiplespot-1 Weight=1000 CustomComputeParam=unique_compute_value OtherComputeParam=second_compute_value +NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=c5.2xlarge,multiplespot-2,static Weight=1 NodeSet=multiple_spot_nodes Nodes=multiple_spot-st-multiplespot-1-[1-5],multiple_spot-dy-multiplespot-1-[1-5],multiple_spot-st-multiplespot-2-[1-5] PartitionName=multiple_spot Nodes=multiple_spot_nodes MaxTime=INFINITE State=UP Default=YES CustomQueueParam=unique_queue_value OtherQueueParam=second_queue_value diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_default_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_default_partition.conf index df40ad4d2c..6f33085f7b 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_default_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_default_partition.conf @@ -1,6 +1,6 @@ # This file is automatically generated by pcluster -NodeName=queue_jls_default-dy-cr_1-[1-10] CPUs=2 RealMemory=7296 State=CLOUD Feature=dynamic,c4.xlarge,cr_1 Weight=1000 +NodeName=queue_jls_default-dy-cr_1-[1-10] CPUs=2 RealMemory=7296 State=CLOUD Feature=c4.xlarge,cr_1,dynamic Weight=1000 NodeSet=queue_jls_default_nodes Nodes=queue_jls_default-dy-cr_1-[1-10] PartitionName=queue_jls_default Nodes=queue_jls_default_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_disabled_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_disabled_partition.conf index 57c4712c4b..174fa2ee9e 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_disabled_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_disabled_partition.conf @@ -1,6 +1,6 @@ # This file is automatically generated by pcluster -NodeName=queue_jls_disabled-dy-cr_1-[1-10] CPUs=2 RealMemory=7296 State=CLOUD Feature=dynamic,c4.xlarge,cr_1 Weight=1000 +NodeName=queue_jls_disabled-dy-cr_1-[1-10] CPUs=2 RealMemory=7296 State=CLOUD Feature=c4.xlarge,cr_1,dynamic Weight=1000 NodeSet=queue_jls_disabled_nodes Nodes=queue_jls_disabled-dy-cr_1-[1-10] PartitionName=queue_jls_disabled Nodes=queue_jls_disabled_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_enabled_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_enabled_partition.conf index 6ad77af846..9c82eacd7b 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_enabled_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_job_exc_alloc/expected_outputs/pcluster/slurm_parallelcluster_queue_jls_enabled_partition.conf @@ -1,6 +1,6 @@ # This file is automatically generated by pcluster -NodeName=queue_jls_enabled-dy-cr_1-[1-10] CPUs=4 RealMemory=7296 State=CLOUD Feature=dynamic,c4.xlarge,cr_1 Weight=1000 +NodeName=queue_jls_enabled-dy-cr_1-[1-10] CPUs=4 RealMemory=7296 State=CLOUD Feature=c4.xlarge,cr_1,dynamic Weight=1000 NodeSet=queue_jls_enabled_nodes Nodes=queue_jls_enabled-dy-cr_1-[1-10] PartitionName=queue_jls_enabled Nodes=queue_jls_enabled_nodes MaxTime=INFINITE State=UP Default=YES OverSubscribe=EXCLUSIVE diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue1_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue1_partition.conf index eac60f8c1f..30a41e07a8 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue1_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue1_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=queue1-st-cr1-[1-2] CPUs=16 RealMemory=40857 State=CLOUD Feature=static,cr1 Weight=1 -NodeName=queue1-dy-cr1-[1-8] CPUs=16 RealMemory=40857 State=CLOUD Feature=dynamic,cr1 Weight=1000 -NodeName=queue1-dy-cr2-[1-10] CPUs=16 RealMemory=40857 State=CLOUD Feature=dynamic,c5n.4xlarge,cr2,efa Weight=1000 +NodeName=queue1-st-cr1-[1-2] CPUs=16 RealMemory=40857 State=CLOUD Feature=cr1,static Weight=1 +NodeName=queue1-dy-cr1-[1-8] CPUs=16 RealMemory=40857 State=CLOUD Feature=cr1,dynamic Weight=1000 +NodeName=queue1-dy-cr2-[1-10] CPUs=16 RealMemory=40857 State=CLOUD Feature=c5n.4xlarge,cr2,dynamic,efa Weight=1000 NodeSet=queue1_nodes Nodes=queue1-st-cr1-[1-2],queue1-dy-cr1-[1-8],queue1-dy-cr2-[1-10] PartitionName=queue1 Nodes=queue1_nodes MaxTime=INFINITE State=UP Default=YES diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue2_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue2_partition.conf index bc09f93f2b..d2875d2871 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue2_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue2_partition.conf @@ -1,8 +1,8 @@ # This file is automatically generated by pcluster -NodeName=queue2-dy-cr1-[1-10] CPUs=16 RealMemory=40857 State=CLOUD Feature=dynamic,c5n.4xlarge,cr1 Weight=1000 -NodeName=queue2-st-cr2-[1-1] CPUs=72 RealMemory=186777 State=CLOUD Feature=static,c5n.18xlarge,cr2,efa Weight=1 -NodeName=queue2-dy-cr2-[1-9] CPUs=72 RealMemory=186777 State=CLOUD Feature=dynamic,c5n.18xlarge,cr2,efa Weight=1000 +NodeName=queue2-dy-cr1-[1-10] CPUs=16 RealMemory=40857 State=CLOUD Feature=c5n.4xlarge,cr1,dynamic Weight=1000 +NodeName=queue2-st-cr2-[1-1] CPUs=72 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,cr2,efa,static Weight=1 +NodeName=queue2-dy-cr2-[1-9] CPUs=72 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,cr2,dynamic,efa Weight=1000 NodeSet=queue2_nodes Nodes=queue2-dy-cr1-[1-10],queue2-st-cr2-[1-1],queue2-dy-cr2-[1-9] PartitionName=queue2 Nodes=queue2_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue3_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue3_partition.conf index c76784d954..f83a187806 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue3_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue3_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=queue3-st-cr1-[1-1] CPUs=72 RealMemory=186777 State=CLOUD Feature=static,c5n.18xlarge,cr1,efa Weight=1 -NodeName=queue3-dy-cr1-[1-9] CPUs=72 RealMemory=186777 State=CLOUD Feature=dynamic,c5n.18xlarge,cr1,efa Weight=1000 +NodeName=queue3-st-cr1-[1-1] CPUs=72 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,cr1,efa,static Weight=1 +NodeName=queue3-dy-cr1-[1-9] CPUs=72 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,cr1,dynamic,efa Weight=1000 NodeSet=queue3_nodes Nodes=queue3-st-cr1-[1-1],queue3-dy-cr1-[1-9] PartitionName=queue3 Nodes=queue3_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue4_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue4_partition.conf index 64fa8004f0..1d28530eff 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue4_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue4_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=queue4-st-cr1-[1-2] CPUs=4 RealMemory=7782 State=CLOUD Feature=static,cr1 Weight=1 -NodeName=queue4-dy-cr1-[1-8] CPUs=4 RealMemory=7782 State=CLOUD Feature=dynamic,cr1 Weight=1000 +NodeName=queue4-st-cr1-[1-2] CPUs=4 RealMemory=7782 State=CLOUD Feature=cr1,static Weight=1 +NodeName=queue4-dy-cr1-[1-8] CPUs=4 RealMemory=7782 State=CLOUD Feature=cr1,dynamic Weight=1000 NodeSet=queue4_nodes Nodes=queue4-st-cr1-[1-2],queue4-dy-cr1-[1-8] PartitionName=queue4 Nodes=queue4_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue5_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue5_partition.conf index c00a6ad5ce..b6caab9f31 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue5_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue5_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=queue5-st-cr1-[1-2] CPUs=4 RealMemory=7782 State=CLOUD Feature=static,cr1 Weight=1 -NodeName=queue5-dy-cr1-[1-8] CPUs=4 RealMemory=7782 State=CLOUD Feature=dynamic,cr1 Weight=1000 +NodeName=queue5-st-cr1-[1-2] CPUs=4 RealMemory=7782 State=CLOUD Feature=cr1,static Weight=1 +NodeName=queue5-dy-cr1-[1-8] CPUs=4 RealMemory=7782 State=CLOUD Feature=cr1,dynamic Weight=1000 NodeSet=queue5_nodes Nodes=queue5-st-cr1-[1-2],queue5-dy-cr1-[1-8] PartitionName=queue5 Nodes=queue5_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue6_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue6_partition.conf index 008e21c76b..4c715efc1b 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue6_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue6_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=queue6-st-cr1-[1-2] CPUs=16 RealMemory=237363 State=CLOUD Feature=static,cr1,gpu Weight=1 Gres=gpu:v100:4 -NodeName=queue6-dy-cr1-[1-3] CPUs=16 RealMemory=237363 State=CLOUD Feature=dynamic,cr1,gpu Weight=1000 Gres=gpu:v100:4 +NodeName=queue6-st-cr1-[1-2] CPUs=16 RealMemory=237363 State=CLOUD Feature=cr1,gpu,static Weight=1 Gres=gpu:v100:4 +NodeName=queue6-dy-cr1-[1-3] CPUs=16 RealMemory=237363 State=CLOUD Feature=cr1,dynamic,gpu Weight=1000 Gres=gpu:v100:4 NodeSet=queue6_nodes Nodes=queue6-st-cr1-[1-2],queue6-dy-cr1-[1-3] PartitionName=queue6 Nodes=queue6_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue7_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue7_partition.conf index 3145059376..5c291011c7 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue7_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue7_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=queue7-st-cr1-[1-2] CPUs=2 RealMemory=3891 State=CLOUD Feature=static,cr1 Weight=1 -NodeName=queue7-dy-cr1-[1-3] CPUs=2 RealMemory=3891 State=CLOUD Feature=dynamic,cr1 Weight=1000 +NodeName=queue7-st-cr1-[1-2] CPUs=2 RealMemory=3891 State=CLOUD Feature=cr1,static Weight=1 +NodeName=queue7-dy-cr1-[1-3] CPUs=2 RealMemory=3891 State=CLOUD Feature=cr1,dynamic Weight=1000 NodeSet=queue7_nodes Nodes=queue7-st-cr1-[1-2],queue7-dy-cr1-[1-3] PartitionName=queue7 Nodes=queue7_nodes MaxTime=INFINITE State=UP diff --git a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue8_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue8_partition.conf index 71bfcdf92c..e41eb967c0 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue8_partition.conf +++ b/test/unit/slurm/test_slurm_config_generator/test_generating_slurm_config_flexible_instance_types/expected_outputs/pcluster/slurm_parallelcluster_queue8_partition.conf @@ -1,7 +1,7 @@ # This file is automatically generated by pcluster -NodeName=queue8-st-cr1-[1-1] CPUs=32 RealMemory=124518 State=CLOUD Feature=static,g4ad.8xlarge,cr1 Weight=1 -NodeName=queue8-dy-cr1-[1-1] CPUs=32 RealMemory=124518 State=CLOUD Feature=dynamic,g4ad.8xlarge,cr1 Weight=1000 +NodeName=queue8-st-cr1-[1-1] CPUs=32 RealMemory=124518 State=CLOUD Feature=cr1,g4ad.8xlarge,static Weight=1 +NodeName=queue8-dy-cr1-[1-1] CPUs=32 RealMemory=124518 State=CLOUD Feature=cr1,dynamic,g4ad.8xlarge Weight=1000 NodeSet=queue8_nodes Nodes=queue8-st-cr1-[1-1],queue8-dy-cr1-[1-1] PartitionName=queue8 Nodes=queue8_nodes MaxTime=INFINITE State=UP From ff9f15ca0cfe21213e46e27283c08863e0535b58 Mon Sep 17 00:00:00 2001 From: Alexander Efimov Date: Thu, 4 Sep 2025 15:53:48 +0000 Subject: [PATCH 3/5] Remove Feature from custom settings --- .../files/default/head_node_slurm/slurm/config_renderer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py b/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py index 387b3d9827..c5bebf95a0 100644 --- a/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py +++ b/cookbooks/aws-parallelcluster-slurm/files/default/head_node_slurm/slurm/config_renderer.py @@ -24,6 +24,8 @@ def __init__(self, queue_name: str, compute_resource_config: Dict, no_gpu, memor self.name = compute_resource_config["Name"] self.disable_multithreading = compute_resource_config["DisableSimultaneousMultithreading"] self.custom_settings = compute_resource_config.get("CustomSlurmSettings", {}) + # If Features are in CustomSlurmSettings, fetch them and remove from CustomSlurmSettings + self.custom_features = self.custom_settings.pop("Feature", "") self.spot_price = compute_resource_config.get("SpotPrice", None) self.instance_types = get_instance_types(compute_resource_config) self.real_memory = get_real_memory( @@ -85,7 +87,7 @@ def _definitions(self, dynamic=False): return definitions def _features(self, dynamic=False): - features = set(self.custom_settings.get("Features", "").split(',')) + features = set(self.custom_features.split(',')) # this is a simple workaround for empty Features: split will give [''] and we'll discard it # as well as all empty strings. features.discard('') From e5a10ca86e4cd2153461c7f7f98ec0e81c7c6996 Mon Sep 17 00:00:00 2001 From: Alexander Efimov Date: Thu, 4 Sep 2025 15:54:02 +0000 Subject: [PATCH 4/5] Added tests for custom features --- .../unit/slurm/test_slurm_config_generator.py | 26 ++++++ .../slurm_parallelcluster_efa_partition.conf | 7 ++ .../slurm_parallelcluster_gpu_partition.conf | 8 ++ ...rallelcluster_multiple_spot_partition.conf | 8 ++ .../sample_input.yaml | 93 +++++++++++++++++++ .../sample_instance_types_data.json | 1 + 6 files changed, 143 insertions(+) create mode 100644 test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf create mode 100644 test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf create mode 100644 test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf create mode 100644 test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml create mode 100644 test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_instance_types_data.json diff --git a/test/unit/slurm/test_slurm_config_generator.py b/test/unit/slurm/test_slurm_config_generator.py index f02ed67031..52fdf3fcf8 100644 --- a/test/unit/slurm/test_slurm_config_generator.py +++ b/test/unit/slurm/test_slurm_config_generator.py @@ -224,6 +224,32 @@ def test_generate_slurm_config_with_custom_settings(mocker, test_datadir, tmpdir _assert_files_are_equal(tmpdir / file_name, test_datadir / "expected_outputs" / output_file_name) +def test_generate_slurm_config_with_custom_features(mocker, test_datadir, tmpdir): + _mock_head_node_config(mocker) + + input_file = os.path.join(test_datadir, "sample_input.yaml") + instance_types_data = os.path.join(test_datadir, "sample_instance_types_data.json") + + template_directory = get_template_folder() + generate_slurm_config_files( + tmpdir, + template_directory, + input_file, + instance_types_data, + dryrun=False, + no_gpu=False, + compute_node_bootstrap_timeout=1600, + realmemory_to_ec2memory_ratio=0.95, + slurmdbd_user="slurm", + cluster_name="test-cluster", + ) + + for queue in ["efa", "gpu", "multiple_spot"]: + file_name = f"pcluster/slurm_parallelcluster_{queue}_partition.conf" + output_file_name = f"pcluster/slurm_parallelcluster_{queue}_partition.conf" + _assert_files_are_equal(tmpdir / file_name, test_datadir / "expected_outputs" / output_file_name) + + def test_generate_slurm_config_with_job_exc_alloc(mocker, test_datadir, tmpdir): _mock_head_node_config(mocker) diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf new file mode 100644 index 0000000000..0a6d983946 --- /dev/null +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_efa_partition.conf @@ -0,0 +1,7 @@ +# This file is automatically generated by pcluster + +NodeName=efa-st-efa-c5n-[1-1] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,efa,efa-c5n,static Weight=1 CustomEfaComputeParam=unique_efa_compute_value OtherEfaComputeParam=second_efa_compute_value +NodeName=efa-dy-efa-c5n-[1-4] CPUs=36 RealMemory=186777 State=CLOUD Feature=c5n.18xlarge,dynamic,efa,efa-c5n Weight=1000 CustomEfaComputeParam=unique_efa_compute_value OtherEfaComputeParam=second_efa_compute_value + +NodeSet=efa_nodes Nodes=efa-st-efa-c5n-[1-1],efa-dy-efa-c5n-[1-4] +PartitionName=efa Nodes=efa_nodes MaxTime=INFINITE State=UP CustomEfaParam=unique_efa_value OtherEfaParam=second_efa_value diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf new file mode 100644 index 0000000000..a70160bcf5 --- /dev/null +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_gpu_partition.conf @@ -0,0 +1,8 @@ +# This file is automatically generated by pcluster + +NodeName=gpu-st-gpu-g38xlarge-[1-1] CPUs=32 RealMemory=237363 State=CLOUD Feature=g3.8xlarge,gpu,gpu-g38xlarge,myfeat-gpu,static Weight=1 Gres=gpu:m60:2 CustomNvidiaParam=nvidia_setting CustomAmdParam=amd_setting CustomIntelParam=intel_setting +NodeName=gpu-dy-gpu-g38xlarge-[1-4] CPUs=32 RealMemory=237363 State=CLOUD Feature=dynamic,g3.8xlarge,gpu,gpu-g38xlarge,myfeat-gpu Weight=1000 Gres=gpu:m60:2 CustomNvidiaParam=nvidia_setting CustomAmdParam=amd_setting CustomIntelParam=intel_setting +NodeName=gpu-dy-gpu-p3dn24xlarge-[1-10] CPUs=96 RealMemory=747110 State=CLOUD Feature=dynamic,gpu,gpu-p3dn24xlarge,p3dn.24xlarge Weight=1000 Gres=gpu:v100:8 + +NodeSet=gpu_nodes Nodes=gpu-st-gpu-g38xlarge-[1-1],gpu-dy-gpu-g38xlarge-[1-4],gpu-dy-gpu-p3dn24xlarge-[1-10] +PartitionName=gpu Nodes=gpu_nodes MaxTime=INFINITE State=UP CustomParam=unique_value OtherParam=second_value TreeAsThird=3 diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf new file mode 100644 index 0000000000..745fcbb504 --- /dev/null +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/expected_outputs/pcluster/slurm_parallelcluster_multiple_spot_partition.conf @@ -0,0 +1,8 @@ +# This file is automatically generated by pcluster + +NodeName=multiple_spot-st-multiplespot-1-[1-5] CPUs=4 RealMemory=7296 State=CLOUD Feature=c4.xlarge,multiplespot-1,myfeat1,qwerty2,static Weight=1 CustomComputeParam=unique_compute_value OtherComputeParam=second_compute_value +NodeName=multiple_spot-dy-multiplespot-1-[1-5] CPUs=4 RealMemory=7296 State=CLOUD Feature=c4.xlarge,dynamic,multiplespot-1,myfeat1,qwerty2 Weight=1000 CustomComputeParam=unique_compute_value OtherComputeParam=second_compute_value +NodeName=multiple_spot-st-multiplespot-2-[1-5] CPUs=4 RealMemory=15564 State=CLOUD Feature=c5.2xlarge,multiplespot-2,static Weight=1 + +NodeSet=multiple_spot_nodes Nodes=multiple_spot-st-multiplespot-1-[1-5],multiple_spot-dy-multiplespot-1-[1-5],multiple_spot-st-multiplespot-2-[1-5] +PartitionName=multiple_spot Nodes=multiple_spot_nodes MaxTime=INFINITE State=UP Default=YES CustomQueueParam=unique_queue_value OtherQueueParam=second_queue_value diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml new file mode 100644 index 0000000000..a5e32f40ea --- /dev/null +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml @@ -0,0 +1,93 @@ +Scheduling: + SlurmQueues: + - Name: multiple_spot + CustomSlurmSettings: + CustomQueueParam: unique_queue_value + OtherQueueParam: second_queue_value + CapacityType: SPOT + ComputeResources: + - Name: multiplespot-1 + DisableSimultaneousMultithreading: false + Efa: + Enabled: false + GdrSupport: false + CustomSlurmSettings: + CustomComputeParam: unique_compute_value + OtherComputeParam: second_compute_value + Feature: myfeat1,qwerty2 + InstanceType: c4.xlarge + MaxCount: 10 + MinCount: 5 + StaticNodePriority: 1 + DynamicNodePriority: 1000 + - DisableSimultaneousMultithreading: true + Efa: + Enabled: false + GdrSupport: false + InstanceType: c5.2xlarge + MaxCount: 5 + MinCount: 5 + Name: multiplespot-2 + StaticNodePriority: 1 + DynamicNodePriority: 1000 + - Name: efa + CapacityType: ONDEMAND + CustomSlurmSettings: + CustomEfaParam: unique_efa_value + OtherEfaParam: second_efa_value + ComputeResources: + - Name: efa-c5n + CustomSlurmSettings: + CustomEfaComputeParam: unique_efa_compute_value + OtherEfaComputeParam: second_efa_compute_value + DisableSimultaneousMultithreading: true + Efa: + Enabled: true + GdrSupport: false + InstanceType: c5n.18xlarge + MaxCount: 5 + MinCount: 1 + StaticNodePriority: 1 + DynamicNodePriority: 1000 + ComputeSettings: null + CustomActions: null + - Name: gpu + CapacityType: ONDEMAND + CustomSlurmSettings: + CustomParam: unique_value + OtherParam: second_value + TreeAsThird: 3 + ComputeResources: + - Name: gpu-g38xlarge + DisableSimultaneousMultithreading: false + Efa: + Enabled: false + GdrSupport: false + CustomSlurmSettings: + CustomNvidiaParam: nvidia_setting + CustomAmdParam: amd_setting + CustomIntelParam: intel_setting + Feature: myfeat-gpu + InstanceType: g3.8xlarge + MaxCount: 5 + MinCount: 1 + StaticNodePriority: 1 + DynamicNodePriority: 1000 + - Name: gpu-p3dn24xlarge + DisableSimultaneousMultithreading: false + Efa: + Enabled: false + GdrSupport: false + InstanceType: p3dn.24xlarge + MaxCount: 10 + MinCount: 0 + StaticNodePriority: 1 + DynamicNodePriority: 1000 + ComputeSettings: null + CustomActions: null + Scheduler: slurm + SlurmSettings: + ScaledownIdletime: 10 + EnableMemoryBasedScheduling: false + Database: null + ExternalSlurmdbd: null diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_instance_types_data.json b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_instance_types_data.json new file mode 100644 index 0000000000..39ac22c933 --- /dev/null +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_instance_types_data.json @@ -0,0 +1 @@ +{"t3.micro": {"InstanceType": "t3.micro", "CurrentGeneration": true, "FreeTierEligible": false, "SupportedUsageClasses": ["on-demand", "spot"], "SupportedRootDeviceTypes": ["ebs"], "SupportedVirtualizationTypes": ["hvm"], "BareMetal": false, "Hypervisor": "nitro", "ProcessorInfo": {"SupportedArchitectures": ["x86_64"], "SustainedClockSpeedInGhz": 2.5}, "VCpuInfo": {"DefaultVCpus": 2, "DefaultCores": 1, "DefaultThreadsPerCore": 2, "ValidCores": [1], "ValidThreadsPerCore": [1, 2]}, "MemoryInfo": {"SizeInMiB": 1024}, "InstanceStorageSupported": false, "EbsInfo": {"EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "EbsOptimizedInfo": {"BaselineBandwidthInMbps": 87, "BaselineThroughputInMBps": 10.875, "BaselineIops": 500, "MaximumBandwidthInMbps": 2085, "MaximumThroughputInMBps": 260.625, "MaximumIops": 11800}, "NvmeSupport": "unsupported"}, "NetworkInfo": {"NetworkPerformance": "Up to 5 Gigabit", "MaximumNetworkInterfaces": 2, "MaximumNetworkCards": 1, "DefaultNetworkCardIndex": 0, "NetworkCards": [{"NetworkCardIndex": 0, "NetworkPerformance": "Up to 5 Gigabit", "MaximumNetworkInterfaces": 2}], "Ipv4AddressesPerInterface": 2, "Ipv6AddressesPerInterface": 2, "Ipv6Supported": true, "EnaSupport": "required", "EfaSupported": false}, "PlacementGroupInfo": {"SupportedStrategies": ["partition", "spread"]}, "HibernationSupported": true, "BurstablePerformanceSupported": true, "DedicatedHostsSupported": false, "AutoRecoverySupported": true}, "c4.xlarge": {"InstanceType": "c4.xlarge", "CurrentGeneration": true, "FreeTierEligible": false, "SupportedUsageClasses": ["spot", "ondemand"], "SupportedRootDeviceTypes": ["ebs"], "SupportedVirtualizationTypes": ["hvm"], "BareMetal": false, "Hypervisor": "xen", "ProcessorInfo": {"SupportedArchitectures": ["x86_64"], "SustainedClockSpeedInGhz": 2.9}, "VCpuInfo": {"DefaultVCpus": 4, "DefaultCores": 2, "DefaultThreadsPerCore": 2, "ValidCores": [1, 2], "ValidThreadsPerCore": [1, 2]}, "MemoryInfo": {"SizeInMiB": 7680}, "InstanceStorageSupported": false, "EbsInfo": {"EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "EbsOptimizedInfo": {"BaselineBandwidthInMbps": 750, "BaselineThroughputInMBps": 93.75, "BaselineIops": 6000, "MaximumBandwidthInMbps": 750, "MaximumThroughputInMBps": 93.75, "MaximumIops": 6000}, "NvmeSupport": "unsupported"}, "NetworkInfo": {"NetworkPerformance": "High", "MaximumNetworkInterfaces": 4, "MaximumNetworkCards": 1, "DefaultNetworkCardIndex": 0, "NetworkCards": [{"NetworkCardIndex": 0, "NetworkPerformance": "High", "MaximumNetworkInterfaces": 4}], "Ipv4AddressesPerInterface": 15, "Ipv6AddressesPerInterface": 15, "Ipv6Supported": true, "EnaSupport": "unsupported", "EfaSupported": false}, "PlacementGroupInfo": {"SupportedStrategies": ["cluster", "partition", "spread"]}, "HibernationSupported": true, "BurstablePerformanceSupported": false, "DedicatedHostsSupported": true, "AutoRecoverySupported": true}, "c5.2xlarge": {"InstanceType": "c5.2xlarge", "CurrentGeneration": true, "FreeTierEligible": false, "SupportedUsageClasses": ["spot", "ondemand"], "SupportedRootDeviceTypes": ["ebs"], "SupportedVirtualizationTypes": ["hvm"], "BareMetal": false, "Hypervisor": "nitro", "ProcessorInfo": {"SupportedArchitectures": ["x86_64"], "SustainedClockSpeedInGhz": 3.4}, "VCpuInfo": {"DefaultVCpus": 8, "DefaultCores": 4, "DefaultThreadsPerCore": 2, "ValidCores": [2, 4], "ValidThreadsPerCore": [1, 2]}, "MemoryInfo": {"SizeInMiB": 16384}, "InstanceStorageSupported": false, "EbsInfo": {"EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "EbsOptimizedInfo": {"BaselineBandwidthInMbps": 2300, "BaselineThroughputInMBps": 287.5, "BaselineIops": 10000, "MaximumBandwidthInMbps": 4750, "MaximumThroughputInMBps": 593.75, "MaximumIops": 20000}, "NvmeSupport": "unsupported"}, "NetworkInfo": {"NetworkPerformance": "Up to 10 Gigabit", "MaximumNetworkInterfaces": 4, "MaximumNetworkCards": 1, "DefaultNetworkCardIndex": 0, "NetworkCards": [{"NetworkCardIndex": 0, "NetworkPerformance": "Up to 10 Gigabit", "MaximumNetworkInterfaces": 4}], "Ipv4AddressesPerInterface": 15, "Ipv6AddressesPerInterface": 15, "Ipv6Supported": true, "EnaSupport": "required", "EfaSupported": false}, "PlacementGroupInfo": {"SupportedStrategies": ["cluster", "partition", "spread"]}, "HibernationSupported": true, "BurstablePerformanceSupported": false, "DedicatedHostsSupported": true, "AutoRecoverySupported": true}, "c5n.18xlarge": {"InstanceType": "c5n.18xlarge", "CurrentGeneration": true, "FreeTierEligible": false, "SupportedUsageClasses": ["spot", "ondemand"], "SupportedRootDeviceTypes": ["ebs"], "SupportedVirtualizationTypes": ["hvm"], "BareMetal": false, "Hypervisor": "nitro", "ProcessorInfo": {"SupportedArchitectures": ["x86_64"], "SustainedClockSpeedInGhz": 3.4}, "VCpuInfo": {"DefaultVCpus": 72, "DefaultCores": 36, "DefaultThreadsPerCore": 2, "ValidCores": [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36], "ValidThreadsPerCore": [1, 2]}, "MemoryInfo": {"SizeInMiB": 196608}, "InstanceStorageSupported": false, "EbsInfo": {"EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "EbsOptimizedInfo": {"BaselineBandwidthInMbps": 19000, "BaselineThroughputInMBps": 2375.0, "BaselineIops": 80000, "MaximumBandwidthInMbps": 19000, "MaximumThroughputInMBps": 2375.0, "MaximumIops": 80000}, "NvmeSupport": "unsupported"}, "NetworkInfo": {"NetworkPerformance": "100 Gigabit", "MaximumNetworkInterfaces": 15, "MaximumNetworkCards": 1, "DefaultNetworkCardIndex": 0, "NetworkCards": [{"NetworkCardIndex": 0, "NetworkPerformance": "100 Gigabit", "MaximumNetworkInterfaces": 15}], "Ipv4AddressesPerInterface": 50, "Ipv6AddressesPerInterface": 50, "Ipv6Supported": true, "EnaSupport": "required", "EfaSupported": true}, "PlacementGroupInfo": {"SupportedStrategies": ["cluster", "partition", "spread"]}, "HibernationSupported": false, "BurstablePerformanceSupported": false, "DedicatedHostsSupported": true, "AutoRecoverySupported": true}, "g3.8xlarge": {"InstanceType": "g3.8xlarge", "CurrentGeneration": true, "FreeTierEligible": false, "SupportedUsageClasses": ["spot", "ondemand"], "SupportedRootDeviceTypes": ["ebs"], "SupportedVirtualizationTypes": ["hvm"], "BareMetal": false, "Hypervisor": "xen", "ProcessorInfo": {"SupportedArchitectures": ["x86_64"], "SustainedClockSpeedInGhz": 2.7}, "VCpuInfo": {"DefaultVCpus": 32, "DefaultCores": 16, "DefaultThreadsPerCore": 2, "ValidCores": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "ValidThreadsPerCore": [1, 2]}, "MemoryInfo": {"SizeInMiB": 249856}, "InstanceStorageSupported": false, "EbsInfo": {"EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "EbsOptimizedInfo": {"BaselineBandwidthInMbps": 7000, "BaselineThroughputInMBps": 875.0, "BaselineIops": 40000, "MaximumBandwidthInMbps": 7000, "MaximumThroughputInMBps": 875.0, "MaximumIops": 40000}, "NvmeSupport": "unsupported"}, "NetworkInfo": {"NetworkPerformance": "10 Gigabit", "MaximumNetworkInterfaces": 8, "MaximumNetworkCards": 1, "DefaultNetworkCardIndex": 0, "NetworkCards": [{"NetworkCardIndex": 0, "NetworkPerformance": "10 Gigabit", "MaximumNetworkInterfaces": 8}], "Ipv4AddressesPerInterface": 30, "Ipv6AddressesPerInterface": 30, "Ipv6Supported": true, "EnaSupport": "supported", "EfaSupported": false}, "GpuInfo": {"Gpus": [{"Name": "M60", "Manufacturer": "NVIDIA", "Count": 2, "MemoryInfo": {"SizeInMiB": 8192}}], "TotalGpuMemoryInMiB": 16384}, "PlacementGroupInfo": {"SupportedStrategies": ["cluster", "partition", "spread"]}, "HibernationSupported": false, "BurstablePerformanceSupported": false, "DedicatedHostsSupported": true, "AutoRecoverySupported": false}, "p3dn.24xlarge": {"InstanceType": "p3dn.24xlarge", "CurrentGeneration": true, "FreeTierEligible": false, "SupportedUsageClasses": ["spot", "ondemand"], "SupportedRootDeviceTypes": ["ebs"], "SupportedVirtualizationTypes": ["hvm"], "BareMetal": false, "Hypervisor": "nitro", "ProcessorInfo": {"SupportedArchitectures": ["x86_64"], "SustainedClockSpeedInGhz": 2.5}, "VCpuInfo": {"DefaultVCpus": 96, "DefaultCores": 48, "DefaultThreadsPerCore": 2, "ValidCores": [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48], "ValidThreadsPerCore": [1, 2]}, "MemoryInfo": {"SizeInMiB": 786432}, "InstanceStorageSupported": true, "InstanceStorageInfo": {"TotalSizeInGB": 1800, "Disks": [{"SizeInGB": 900, "Count": 2, "Type": "ssd"}], "NvmeSupport": "required"}, "EbsInfo": {"EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "EbsOptimizedInfo": {"BaselineBandwidthInMbps": 19000, "BaselineThroughputInMBps": 2375.0, "BaselineIops": 80000, "MaximumBandwidthInMbps": 19000, "MaximumThroughputInMBps": 2375.0, "MaximumIops": 80000}, "NvmeSupport": "required"}, "NetworkInfo": {"NetworkPerformance": "100 Gigabit", "MaximumNetworkInterfaces": 15, "MaximumNetworkCards": 1, "DefaultNetworkCardIndex": 0, "NetworkCards": [{"NetworkCardIndex": 0, "NetworkPerformance": "100 Gigabit", "MaximumNetworkInterfaces": 15}], "Ipv4AddressesPerInterface": 50, "Ipv6AddressesPerInterface": 50, "Ipv6Supported": true, "EnaSupport": "required", "EfaSupported": true}, "GpuInfo": {"Gpus": [{"Name": "V100", "Manufacturer": "NVIDIA", "Count": 8, "MemoryInfo": {"SizeInMiB": 32768}}], "TotalGpuMemoryInMiB": 262144}, "PlacementGroupInfo": {"SupportedStrategies": ["cluster", "partition", "spread"]}, "HibernationSupported": false, "BurstablePerformanceSupported": false, "DedicatedHostsSupported": false, "AutoRecoverySupported": false}} \ No newline at end of file From 8874d4870f6c3fd558722a93323e18b17227961b Mon Sep 17 00:00:00 2001 From: Alexander Efimov Date: Thu, 4 Sep 2025 15:58:57 +0000 Subject: [PATCH 5/5] ComputeResources Features: Added 1 more corner case for the test --- .../sample_input.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml index a5e32f40ea..d843a9e2e5 100644 --- a/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml +++ b/test/unit/slurm/test_slurm_config_generator/test_generate_slurm_config_with_custom_features/sample_input.yaml @@ -14,7 +14,7 @@ Scheduling: CustomSlurmSettings: CustomComputeParam: unique_compute_value OtherComputeParam: second_compute_value - Feature: myfeat1,qwerty2 + Feature: myfeat1,qwerty2,gpu InstanceType: c4.xlarge MaxCount: 10 MinCount: 5