目 录CONTENT

文章目录

HyperPod 通过安全和存储增强 ML 基础设施

Administrator
2025-11-20 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/hyperpod-enhances-ml-infrastructure-with-security-and-storage/

原文作者:Mark Vinciguerra, Kunal Jha, Vivek Koppuru, Ajay Mahendru, Ross Povelikin, Siddharth Senger, and Takuma Yoshitani


Amazon SageMaker HyperPod 是一种专为大规模优化基础模型训练和推理而构建的基础设施。SageMaker HyperPod 消除了构建和优化用于训练基础模型 (FM) 的机器学习 (ML) 基础结构中繁琐的、非差异化的工作。

随着人工智能向适应多种领域和用例的部署发展,安全性和多种存储选项的需求变得愈发重要。大型企业希望确保 GPU 集群遵循组织范围的策略和安全规则。SageMaker HyperPod EKS 中的两项新功能增强了对大规模机器学习工作负载生产部署的控制和灵活性。这些功能包括对持续扩展自定义 Amazon 机器映像 (AMI) 以及客户托管密钥 (CMK) 集成的支持。

  • 客户托管密钥 (CMK) 支持:HyperPod EKS 现在允许客户使用自己的加密密钥来加密附加到 HyperPod 实例或其自定义 AMI 的主卷和辅助 EBS 卷。要了解有关为 HyperPod 集群创建自定义 AMI 的更多信息,请参阅我们的博客文章文档
  • Amazon EBS CSI 驱动程序支持:HyperPod EKS 现在支持 Amazon Elastic Block Store (Amazon EBS) 容器存储接口 (CSI) 驱动程序,该驱动程序管理您创建的 Kubernetes 卷的存储(Amazon EBS 卷的生命周期)。

先决条件

为了使用这些功能,请验证您是否具备以下先决条件:

客户托管密钥支持

通过 CMK 支持,您可以控制合规性和安全治理所需的加密功能,最终帮助解决未满足监管和组织安全要求(如 HIPAA 和 FIPS 合规性)等关键业务风险。CMK 支持允许客户使用自己的加密密钥来加密附加到其 HyperPod 实例的 EBS 卷。在创建集群、更新集群或添加新实例组时,客户可以为根卷和辅助卷指定 CMK。此外,客户还可以使用 CMK 加密其自定义 AMI,在实例生命周期内提供客户控制密钥的全面静态数据保护。

以下是有关 CMK 配置的关键点:

对于 EBS 卷:

  • CMK 是可选的——如果未指定,卷将使用 AWS 托管密钥进行加密
  • 您无法更新/更改现有卷的 CMK(CMK 是不可变的)
  • 每个实例组可以拥有:
    • 一个带有 CMK 的根卷配置
    • 一个带有 CMK 的辅助卷配置
  • 根卷配置不能指定卷大小
  • 辅助卷配置必须指定卷大小
  • 您可以为根卷和辅助卷指定不同的 CMK

对于自定义 AMI:

  • 您可以独立于卷加密,使用 CMK 加密自定义 AMI
  • 与卷 CMK 不同,自定义 AMI CMK 是可变的——客户可以使用使用不同 CMK 加密的 AMI 来修补集群

重要提示:在使用客户托管密钥时,我们强烈建议您为集群中的每个实例组使用不同的 KMS 密钥。在多个实例组中使用相同的客户托管密钥可能会导致即使您尝试撤销授权,权限仍会无意中持续存在。例如:

  • 如果您撤销了一个实例组卷的 AWS KMS 授权,该实例组可能仍然允许扩展和修补操作,因为它在使用了相同密钥的其他实例组上存在授权
  • 为防止此问题,请确保为集群中的每个实例组分配唯一的 KMS 密钥

在 HyperPod 上配置 CMK

在本节中,我们将演示如何为您的 HyperPod 集群设置 CMK。作为先决条件,请确保您具备以下条件:

  1. 验证您用于启用 CMK 的实例组的 AWS IAM 执行角色已添加以下 AWS KMS 权限。kms:CreateGrant 权限允许 HyperPod 使用对您的 KMS 密钥的权限执行以下操作:
    1. 扩展实例计数 (UpdateCluster 操作)
    2. 添加集群节点 (BatchAddClusterNodes 操作)
    3. 软件修补 (UpdateClusterSoftware 操作)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        }
    ]
}
  1. 将以下内容包含在您的 KMS 密钥策略中:

您可以按照更改密钥策略文档修改您的密钥策略。请将变量 <iam-hp-execution-role><region><account-id><key-id> 替换为您 HyperPod 执行角色(使用 CMK 链接到实例组的角色)、部署了 HyperPod 集群的 AWS 区域、您的帐户 ID 和您的 KMS 密钥 ID。

{
    "Version": "2012-10-17",
    "Id": "hyperpod-key-policy",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<account-id>:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<account-id>:role/<iam-hp-execution-role>"
            },
            "Action": "kms:CreateGrant",
            "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "sagemaker.<region>.amazonaws.com"
                },
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<account-id>:role/<iam-hp-execution-role>"
            },
            "Action": "kms:DescribeKey",
            "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "sagemaker.<region>.amazonaws.com"
                }
            }
        }
    ]
}

现在,让我们使用 CMK。

您可以在使用 CreateClusterUpdateCluster API 操作创建或更新集群时指定客户托管密钥。InstanceStorageConfigs 结构允许最多配置两个 EbsVolumeConfig,您可以在其中配置根 Amazon EBS 卷,以及可选的辅助卷。您可以为每个卷使用相同的 KMS 密钥或不同的 KMS 密钥,具体取决于您的需求。

配置根卷时,适用以下要求:

  • RootVolume 必须设置为 True。默认值为 False,它配置辅助卷。
  • VolumeKmsKeyId 字段是必需的,您必须指定客户托管密钥。(如果您不指定自己的密钥,则使用 AWS 拥有的密钥)。
  • 您不能为根卷指定 VolumeSizeInGB 字段,因为 HyperPod 会为您确定根卷的大小。

配置辅助卷时,适用以下要求:

  • RootVolume 必须为 False(此字段的默认值为 False)。
  • VolumeKmsKeyId 字段是可选的。您可以使用与根卷指定的相同客户托管密钥,也可以使用不同的密钥。
  • VolumeSizeInGB 字段是必需的,因为您必须为辅助卷指定所需的存储大小。

支持 CMK 的集群创建示例:

aws sagemaker create-cluster \
  --cluster-name <your-hyperpod-cluster> \\n  --instance-groups '[{ \\n    "ExecutionRole": "arn:aws:iam::<account-id>:role/<your-SageMaker-Execution-Role>",
    "InstanceCount": 2,
    "InstanceGroupName": "<your-ig-name>",
    "InstanceStorageConfigs": [ \\n            { \\n                "EbsVolumeConfig": { \\n                    "RootVolume": True,
                    "VolumeKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<root-volume-key-id>" \\n                }\n            },
            { \\n                "EbsVolumeConfig": { \\n                    "VolumeSizeInGB": 100,
                    "VolumeKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<secondary-volume-key-id>" \\n                }\n            }\n        ], \\n        "InstanceType": "<desired-instance-type>" \\n    }\n]' \\n  --vpc-config '{ \\n    "SecurityGroupIds": ["<sg-id>"], \\n    "Subnets": ["<subnet-id>"] \\n}}'

使用 CMK 支持更新集群的示例:

aws sagemaker update-cluster \\n  --cluster-name <your-hyperpod-cluster> \\n  --instance-groups '[{ \\n    "InstanceGroupName": "<your-ig-name>",
    "InstanceStorageConfigs": [ \\n            { \\n                "EbsVolumeConfig": { \\n                    "RootVolume": true,
                    "VolumeKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<root-volume-key-id>" \\n                }\n            },
            { \\n                "EbsVolumeConfig": { \\n                    "VolumeSizeInGB": 100,
                    "VolumeKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<secondary-volume-key-id>" \\n                }\n            }\n        ]\n    }\n]'

要使用启用了 CMK 的自定义 AMI,您需要先使用 CMK 构建自定义 AMI。您可以使用以下工具完成此操作,但请注意,这些命令只是示例片段。请遵循链接的文档来生成 AMI。

aws imagebuilder create-image-recipe \
    --name "hyperpod-custom-recipe" \
    --version "1.0.0" \
    --parent-image "<hyperpod-base-image-id>" \
        --components "componentArn=<component-arn>" \
        --block-device-mappings DeviceName="/dev/xvda",Ebs={VolumeSize=100,VolumeType=gp3,Encrypted=true,KmsKeyId=arn:aws:kms:us-east-1:111122223333:key/key-id,DeleteOnTermination=true}
  • Amazon EC2 控制台
    1. 右键单击您的自定义 Amazon EC2 实例,然后选择 创建映像
    2. 加密 部分,选择 加密快照
    3. 从下拉菜单中选择您的 KMS 密钥。例如:arn:aws:kms:us-east-2:111122223333:key/<your-kms-key-id> 或使用密钥别名:alias/<your-hyperpod-key>
aws ec2 create-image \
    --instance-id "<instance-id>" \
    --name "MyCustomHyperPodAMI" \
    --description "Custom HyperPod AMI" \
    --block-device-mappings '[\n        {\n            "DeviceName": "/dev/xvda",
            "Ebs": {\n                "Encrypted": true,\n                "KmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/<key-id>",\n                "VolumeType": "gp2"                 }\n        }\n    ]'

要使用此加密的自定义 AMI,请遵循我们的博客文档中关于在 HyperPod 上使用自定义 AMI 的说明。

Amazon EBS CSI 驱动程序支持

通过 HyperPod 对 Amazon Elastic Block Storage (EBS) 容器存储接口 (CSI) 的支持,您可以将作为您 EKS 集群创建的 Kubernetes 卷存储的 Amazon EBS 卷的生命周期进行管理。此增强功能同时支持临时持久性卷,解决了大规模 AI 工作负载中动态存储管理的需求,从而高效处理基础模型训练和推理所需的庞大数据集和模型工件。

HyperPod 现在提供了两种在节点上预配和挂载附加 Amazon EBS 卷的灵活方法。第一种方法不是新方法,它在创建或更新实例组时使用 InstanceStorageConfigs 进行集群级别的卷预配,要求用户在 Pod 配置文件中将本地路径设置为 /opt/sagemaker。或者,用户可以实现 Amazon EBS CSI 驱动程序进行动态的 Pod 级别卷管理,从而对存储分配提供更大的控制权。

此功能以前仅在 Amazon EKS 集群上受支持,现在也为 SageMaker HyperPod 解锁了新的存储功能。要了解更多功能,请访问官方文档页面

SageMaker HyperPod 上 Amazon EBS CSI 驱动程序的演示

在本节中,我们将演示 Amazon EBS CSI 的一项功能,例如卷大小调整

设置 EBS CSI 驱动程序

在接下来的部分中,我们将要求您用特定于演示的参数替换某些参数。当我们提到 <eks-cluster-name> 时,指的是底层 Amazon EKS 集群的名称,而不是 SageMaker HyperPod 集群的名称。配置您的 kubernetes 配置以添加一个新上下文,以便实用程序可以与您的新 EKS 集群进行交互。运行以下命令:

aws eks update-kubeconfig \
    --region <region> \
    --name <eks-cluster-name>

其次,我们需要创建一个具有适当策略的 IAM 服务账户,以便与 Amazon EBS CSI 协同工作。IAM 服务账户是 Amazon EKS 与其他 AWS 服务交互的 IAM 实体。我们选择使用 eksctl 在单个命令中创建策略并附加所需的策略,但也有其他方法可以实现相同的功能。

eksctl create iamserviceaccount \     --name ebs-csi-controller-sa \\n    --namespace kube-system \\n    --cluster <eks-cluster-name> \\n    --role-name DemoRole \\n    --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \\n    --approve

成功执行命令后,我们应该会看到三个结果:

  • 创建了名为 ebs-csi-controller-sa 的 IAM 服务账户
  • 创建了名为 DemoRole 的 IAM 角色,并附加了策略 arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
  • ebs-csi-controller-sa 服务账户使用 DemoRole

在本次演示中,您应该会看到上一个命令的输出,例如:

2025-08-19 12:44:17 [ℹ]  3 existing iamserviceaccount(s) (kube-system/aws-load-balancer-controller,kube-system/fsx-csi-controller-sa,kube-system/s3-csi-driver-sa) will be excluded
2025-08-19 12:44:17 [ℹ]  1 iamserviceaccount (kube-system/ebs-csi-controller-sa) was included (based on the include/exclude rules)
2025-08-19 12:44:17 [!]  serviceaccounts that exist in Kubernetes will be excluded, use --override-existing-serviceaccounts to override
2025-08-19 12:44:17 [ℹ]  1 task: {
    2 sequential sub-tasks: {
        create IAM role for serviceaccount "kube-system/ebs-csi-controller-sa",
        create serviceaccount "kube-system/ebs-csi-controller-sa",
    }}
2025-08-19 12:44:17 [ℹ]  building iamserviceaccount stack "eksctl-sagemaker-hyperpod-eks-cluster-b94d57bb-eks-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2025-08-19 12:44:17 [ℹ]  deploying stack "eksctl-sagemaker-hyperpod-eks-cluster-b94d57bb-eks-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2025-08-19 12:44:17 [ℹ]  waiting for CloudFormation stack "eksctl-sagemaker-hyperpod-eks-cluster-b94d57bb-eks-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2025-08-19 12:44:48 [ℹ]  waiting for CloudFormation stack "eksctl-sagemaker-hyperpod-eks-cluster-b94d57bb-eks-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2025-08-19 12:44:49 [ℹ]  created serviceaccount "kube-system/ebs-csi-controller-sa"

IAM 服务账户配置的最后一步是附加 Amazon EKS 与 SageMaker HyperPod 交互所需的额外策略,这些策略在功能的文档中有所提及。我们将使用一个从终端创建的内联策略来完成此操作。

以下代码片段创建一个临时文件并将其附加到新创建的策略中,您需要在其中填入与演示过程相关的三个值:

  • <region>
  • <account-id>
  • <eks-cluster-name>
cat > inline_policy.json << 'EOF'
{
    "Version": "2012-10-17",
    "Statement":
    [
        {
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:AttachClusterNodeVolume",
                "sagemaker:DetachClusterNodeVolume"
            ],
            "Resource": "arn:aws:sagemaker:*:*:cluster/*"
        },
        {
            "Effect": "Allow",
            "Action":
            [
                "eks:DescribeCluster"
            ],
            "Resource": "arn:aws:eks:<region>:<account-id>:cluster/<eks-cluster-name>"
        }
    ]
}
EOF

在您的参数配置完文件后,使用 eksctl 将策略应用到之前创建的 DemoRole:

aws iam put-role-policy \
    --role-name DemoRole \
    --policy-name HyperPodEBS \
    --policy-document file://inline_policy.json

为了观察创建结果,我们可以使用 kubectl 检查服务账户的状态及其使用的 IAM 角色:

kubectl get sa ebs-csi-controller-sa -n kube-system -o json
{
    "apiVersion": "v1",
    "kind": "ServiceAccount",
    "metadata": {
        "annotations": {
            "eks.amazonaws.com/role-arn": "arn:aws:iam::<account-id>:role/DemoRole"
        },
        "creationTimestamp": "2025-08-19T12:10:05Z",
        "labels": {
            "app.kubernetes.io/managed-by": "eksctl"
        },
        "name": "ebs-csi-controller-sa",
        "namespace": "kube-system",
        "resourceVersion": "17982",
        "uid": "679cc698-88dd-4934-a11f-0b8edee5277c"
    }
}

要检查角色,我们可以查看附加的托管策略和内联策略。对于附加的托管策略:

$ aws iam list-attached-role-policies --role-name DemoRole
{
    "AttachedPolicies": [
        {
            "Policy... [内容被截断]



🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区