

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon SageMaker HyperPod 任务管理中分配计算配额
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation"></a>

集群管理员可以决定组织如何使用购买的计算资源。这样做可减少浪费和资源闲置。您可以分配计算资源配额，以便团队能够互相借用未使用的资源。 HyperPod 任务管理中的计算配额分配允许管理员在实例级别和更精细的资源级别分配资源。此功能为团队提供灵活高效的资源管理能力，支持对单个计算资源进行精细控制，而不是要求分配完整实例。精细级别的分配可消除传统实例级分配的低效问题。通过这种方法，您可以优化资源利用率并减少空闲计算资源。

计算资源配额分配支持三种类型的资源分配：加速器、vCPU 和内存。加速器是加速型计算实例中的组件，可执行各类功能，例如浮点数计算、图形处理或数据模式匹配。加速器包括 GPUs Trainium 加速器和神经元核心。在多团队 GPU 共享场景中，不同的团队可从同一实例类型获得特定的 GPU 分配，从而最大限度地提高加速器硬件的利用率。对于需要额外 RAM 来进行数据预处理或模型缓存场景的内存密集型工作负载，您可以分配超出默认比例的内存配额。 GPU-to-memory对于在 GPU 训练的同时需要大量 CPU 资源的 CPU 密集型预处理任务，可以分配独立的 CPU 资源。

提供值后， HyperPod 任务治理将使用**分配的资源除以实例中可用资源总量的公式来**计算比率。 HyperPod 然后，任务治理使用此比率将默认分配应用于其他资源，但您可以覆盖这些默认值并根据您的用例对其进行自定义。以下是 HyperPod 任务治理如何根据您的价值分配资源的示例场景：
+ **仅指定加速器**- HyperPod 任务管理根据加速器值将默认比率应用于 vCPU 和内存。
+ **仅指定 vCPU**- HyperPod 任务管理会计算该比率并将其应用于内存。加速器设置为 0。
+ **仅指定内存**- HyperPod 任务管理会计算该比率并将其应用于 vCPU，因为运行内存指定的工作负载需要计算。加速器设置为 0。

要以编程方式控制配额分配，您可以使用[ ComputeQuotaResourceConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ComputeQuotaResourceConfig.html)对象并以整数形式指定您的分配。

```
{
    "ComputeQuotaConfig": {
        "ComputeQuotaResources": [{
            "InstanceType": "ml.g5.24xlarge",
            "Accelerators": "16",
            "vCpu": "200.0",
            "MemoryInGiB": "2.0"
        }]
    }
}
```

要查看所有已分配的分配，包括默认分配，请使用[ DescribeComputeQuota](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeComputeQuota.html)操作。要更新您的分配，请使用[ UpdateComputeQuota](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateComputeQuota.html)操作。

您也可以使用 HyperPod CLI 来分配计算配额。有关 HyperPod CLI 的更多信息，请参阅[在 Amazon EKS 编排的 SageMaker HyperPod 集群上运行作业](sagemaker-hyperpod-eks-run-jobs.md)。以下示例演示如何使用 HyperPod CLI 设置计算配额。

```
hyp create hyp-pytorch-job --version 1.1 --job-name sample-job \
--image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \
--pull-policy "Always" \
--tasks-per-node 1 \
--max-retry 1 \
--priority high-priority \
--namespace hyperpod-ns-team-name \
--queue-name hyperpod-ns-team-name-localqueue \
--instance-type sample-instance-type \
--accelerators 1 \
--vcpu 3 \
--memory 1 \
--accelerators-limit 1 \
--vcpu-limit 4 \
--memory-limit 2
```

要使用 AWS 控制台分配配额，请按照以下步骤操作。

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在 HyperPod 集群下，选择**集群管理**。

1. 在**计算资源分配**下，选择**创建**。

1. 如果您还没有实例，请选择**添加分配**以添加实例。

1. 在**分配**下，选择按实例或单个资源进行分配。如果您按单个资源进行分配， SageMaker AI 会自动按您选择的比率将分配分配给其他资源。要覆盖此基于比例的分配，请使用相应的切换开关来覆盖该计算。

1. 重复步骤 4 和 5 以配置其他实例。

分配计算配额后，您可以通过 HyperPod CLI 或提交作业`kubectl`。 HyperPod根据可用配额高效地调度工作负载。

# 分配 GPU 分区配额
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation-gpu-partitions"></a>

您可以扩展计算配额分配以支持 GPU 分区，从而在 GPU 分区级别实现精细的资源共享。当集群支持 GPUs 启用 GPU 分区时，可以将每个物理 GPU 分成多个独立的 GPU，并 GPUs 具有定义的计算、内存和流式处理多处理器分配。有关 GPU 分区的更多信息，请参阅[在亚马逊中使用 GPU 分区 SageMaker HyperPod](sagemaker-hyperpod-eks-gpu-partitioning.md)。您可以为团队分配特定的 GPU 分区，允许多个团队共享一个 GPU，同时保持硬件级别的隔离和可预测的性能。

例如，可以将 8 个 H100 的 ml.p5.48xlarge 实例分区为 GPU 分区， GPUs 您可以根据不同的团队的任务要求将各个分区分配给不同的团队。指定 GPU 分区分配时， HyperPod 任务管理会根据 GPU 分区按比例计算 vCPU 和内存配额，类似于 GPU 级别的分配。这种方法通过消除空闲容量并在同一个物理 GPU 上的多个并发任务之间实现经济高效的资源共享，从而最大限度地提高 GPU 利用率。

## 创建计算配额
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation-gpu-partitions-creating"></a>

```
aws sagemaker create-compute-quota \
  --name "fractional-gpu-quota" \
  --compute-quota-config '{
    "ComputeQuotaResources": [
      {
        "InstanceType": "ml.p4d.24xlarge",
        "AcceleratorPartition": {
            "Count": 4,
            "Type": "mig-1g.5gb"
        }
      }
    ],
    "ResourceSharingConfig": { 
      "Strategy": "LendAndBorrow", 
      "BorrowLimit": 100 
    }
  }'
```

## 验证配额资源
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation-gpu-partitions-verifying"></a>

```
# Check ClusterQueue
kubectl get clusterqueues
kubectl describe clusterqueue QUEUE_NAME

# Check ResourceFlavors
kubectl get resourceflavor
kubectl describe resourceflavor FLAVOR_NAME
```