diff --git a/CHANGELOG.md b/CHANGELOG.md index 5449d29f8f..7de452e3b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,8 @@ CHANGELOG - Add support for Python 3.11, 3.12 in pcluster CLI and aws-parallelcluster-batch-cli. - Upgrade Python to version 3.12 and NodeJS to version 18 in ParallelCluster Lambda Layer. - Build network interfaces using network card index from `NetworkCardIndex` list of EC2 DescribeInstances response, - instead of looping over `MaximumNetworkCards` range. + instead of looping over `MaximumNetworkCards` range. +- Fail cluster creation when using instance types p3, g3, p2 and g2 because their GPU architecture is not compatible with Open Source Nvidia Drivers (OpenRM) introduced as part of 3.8.0 release. 3.8.0 ------ @@ -47,7 +48,7 @@ CHANGELOG - Upgrade NVIDIA driver to version 535.129.03. - Upgrade CUDA Toolkit to version 12.2.2. - Use Open Source NVIDIA GPU drivers (OpenRM) as NVIDIA kernel module for Linux instead of NVIDIA closed source module. - - This change removes support for p3, p2, g3, and g2 instances with gpu architecture not supported by OpenRM. + - This change removes support for p3, g3, p2 and g2 instances with gpu architecture not supported by OpenRM. The open source driver only works on platforms that have the GSP (GPU System Processor). - Remove support of `all_or_nothing_batch` configuration parameter in the Slurm resume program, in favor of the new `Scheduling/ScalingStrategy` cluster configuration. - Changed cluster alarms naming convention to '[cluster-name]-[component-name]-[metric]'. - Change default EBS volume types in ADC regions from `gp2` to `gp3`, for both the root and additional volumes. diff --git a/cli/src/pcluster/constants.py b/cli/src/pcluster/constants.py index 3105c2ac5b..c8bc08504a 100644 --- a/cli/src/pcluster/constants.py +++ b/cli/src/pcluster/constants.py @@ -31,6 +31,8 @@ DELETION_POLICIES_WITH_SNAPSHOT = DELETION_POLICIES + ["Snapshot"] SUPPORTED_ARCHITECTURES = ["x86_64", "arm64"] SUPPORTED_OSES_FOR_ARCHITECTURE = {"x86_64": SUPPORTED_OSES, "arm64": SUPPORTED_OSES} +NVIDIA_OPENRM_UNSUPPORTED_INSTANCE_TYPES = ["p3", "p3dn" "p2", "g3", "g3s", "g2"] +NVIDIA_OPENRM_SUPPORTED_ARCHS = "Ampere, Turing, and Hopper" SLURM = "slurm" AWSBATCH = "awsbatch" diff --git a/cli/src/pcluster/validators/ec2_validators.py b/cli/src/pcluster/validators/ec2_validators.py index 867ed4bd08..6a5a544af3 100644 --- a/cli/src/pcluster/validators/ec2_validators.py +++ b/cli/src/pcluster/validators/ec2_validators.py @@ -18,6 +18,7 @@ from pcluster.aws.aws_resources import CapacityReservationInfo from pcluster.aws.common import AWSClientError from pcluster.config.common import CapacityType +from pcluster.constants import NVIDIA_OPENRM_SUPPORTED_ARCHS, NVIDIA_OPENRM_UNSUPPORTED_INSTANCE_TYPES from pcluster.utils import get_resource_name_from_resource_arn from pcluster.validators.common import FailureLevel, Validator @@ -146,15 +147,17 @@ def _validate(self, instance_type: str, image: str): ), FailureLevel.ERROR, ) - unsupported = ["p3", "p2", "g3", "g2"] + if ( image_info and "AWS ParallelCluster AMI" in image_info.description - and instance_type.split(".")[0] in unsupported + and instance_type.split(".")[0] in NVIDIA_OPENRM_UNSUPPORTED_INSTANCE_TYPES ): self._add_failure( - f"The instance type '{instance_type}' is not supported by OpenRM drivers. " - f"A custom AMI must be used.", + f"The instance type '{instance_type}' is not supported by NVIDIA OpenRM drivers. " + f"Only {NVIDIA_OPENRM_SUPPORTED_ARCHS} architectures are supported. " + f"Please consider using a different instance type or building a custom AMI " + f"with closed source NVIDIA drivers.", FailureLevel.ERROR, )