

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon SageMaker HyperPod 任務治理中配置運算配額
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-policies-compute-allocation"></a>

叢集管理員可以決定組織如何使用購買的運算。這樣做可減少浪費和閒置資源。您可以配置運算配額，讓團隊可以彼此借用未使用的資源。HyperPod 任務治理中的運算配額配置可讓管理員在執行個體層級和更精細的資源層級配置資源。此功能允許精細控制個別運算資源，而不是要求整個執行個體配置，為團隊提供靈活且有效率的資源管理。在精細層級配置可消除傳統執行個體層級配置的效率低下情況。透過此方法，您可以最佳化資源使用率並減少閒置運算。

運算配額配置支援三種類型的資源配置：加速器、vCPU 和記憶體。加速器是加速電腦執行個體中執行函數的元件，例如浮點數計算、圖形處理或資料模式比對。加速器包括 GPU、 Trainium 加速器和神經元核心。對於多團隊 GPU 共用，不同的團隊可以從相同的執行個體類型接收特定的 GPU 配置，最大限度地提高加速器硬體的使用率。對於需要額外 RAM 進行資料預先處理或模型快取案例的記憶體密集型工作負載，您可以配置超出預設 GPU 與記镱體比率的記憶體配額。對於需要大量 CPU 資源以及 GPU 訓練的 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 SageMaker AI 主控台，網址為 [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 都可以分割成多個隔離的 GPUs，其中包含定義的運算、記憶體和串流多處理器配置。如需 GPU 分割的詳細資訊，請參閱 [在 Amazon SageMaker HyperPod 中使用 GPU 分割區](sagemaker-hyperpod-eks-gpu-partitioning.md)。您可以將特定 GPU 分割區配置給團隊，讓多個團隊共用單一 GPU，同時維持硬體層級隔離和可預測的效能。

例如，具有 8 個 H100 GPUs 的 ml.p5.48xlarge 執行個體可以分割成 GPU 分割區，而且您可以根據其任務需求將個別分割區配置給不同的團隊。當您指定 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
```