

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

# AWS PCS 中的容量保留
<a name="working-with_capacity-reservations"></a>

 您可以使用 ML 的隨需容量預留或 Amazon EC2 容量區塊，在特定的持續時間內保留特定可用區域中的 Amazon EC2 容量，以確保您在需要時擁有可用的必要運算容量。

 **隨需容量保留 ODCRs)** 可讓您為特定可用區域中的 Amazon EC2 執行個體保留任何持續時間的運算容量。您可以隨時建立和取消保留，無需長期承諾或預付款項。當您需要可隨需求變更而修改的彈性容量保留時，ODCRs是理想的選擇。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的[隨需容量保留](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)。

 **Amazon EC2 Capacity Blocks for ML** 可讓您預留 GPU 加速運算執行個體以供日後使用，最多可提前 8 週。您可以保留 1-64 個執行個體的區塊，持續時間從 1 天到 6 個月。容量區塊非常適合需要在特定時間保證存取 GPU 容量的機器學習工作負載。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的 [ML 容量區塊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html)。

**Topics**
+ [搭配 AWS PCS 使用 ODCRs](capacity-reservations-odcr.md)
+ [搭配 AWS PCS 使用適用於 ML 的 Amazon EC2 容量區塊](capacity-blocks.md)

# 搭配 AWS PCS 使用 ODCRs
<a name="capacity-reservations-odcr"></a>

 您可以選擇 AWS PCS 如何使用預留執行個體。如果您建立**開啟**的 ODCR， AWS PCS 或您帳戶中的其他程序啟動的任何相符執行個體都會計入保留中。使用**目標** ODCR，只有使用特定保留 ID 啟動的執行個體才會計入保留。對於時間敏感的工作負載，目標 ODCRs 更常見。

 您可以將 AWS PCS 運算節點群組新增至啟動範本，以使用目標 ODCR。以下是執行此操作的步驟：

1.  使用 [Amazon EC2 建立容量保留使用者指南 建立目標隨需容量保留 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-create.html)(ODCR)。

1.  將 ODCR 與啟動範本建立關聯。有兩種方法可以執行此操作：

   1.  **直接 ODCR 關聯：**直接在啟動範本中參考 ODCR ID。此方法提供嚴格的容量控制，並不支援執行個體回填 （如果運算節點群組請求的執行個體超過 ODCR 中可用的執行個體，則不會啟動其他執行個體）。

   1.  **容量保留群組關聯：**將 ODCR 新增至容量保留群組，並在啟動範本中參考群組。此方法支援執行個體回填，允許 AWS PCS 在超過保留容量時啟動額外的隨需執行個體。

1.  建立或更新 AWS PCS 運算節點群組以使用啟動範本。如需詳細資訊，請參閱 [AWS PCS 運算節點群組使用者指南](https://docs.aws.amazon.com/pcs/latest/userguide/working-with_cng.html)。

   1. 將運算節點群組`purchaseOption`的 設定為 `ONDEMAND`。

## 範例：保留並使用具有目標 ODCR 的 hpc6a.48xlarge 執行個體
<a name="capacity-reservations-odcr-example"></a>

 此範例命令會為 32 hpc6a.48xlarge 執行個體建立目標 ODCR。若要在置放群組中啟動預留執行個體，請將 `--placement-group-arn`新增至 命令。您可以使用 `--end-date`和 定義停止日期`--end-date-type`，否則保留會持續到手動終止為止。

```
aws ec2 create-capacity-reservation \
    --instance-type hpc6a.48xlarge \
    --instance-platform Linux/UNIX \
    --availability-zone us-east-2a \
    --instance-count 32 \
    --instance-match-criteria targeted
```

 此命令的結果將是新 ODCR 的 ARN。您可以從 ARN `"arn:aws:ec2:us-east-2:123456789012:capacity-reservation/ODCR-ID"`或使用 [Amazon EC2 DescribeCapacityReservations ](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeCapacityReservations.html)擷取 ODCR ID。

 **直接 ODCR 關聯：**將 ODCR ID 新增至啟動範本。以下是參考 ODCR ID 的範例啟動範本。

```
{
  "CapacityReservationSpecification": {
    "CapacityReservationTarget": {
      "CapacityReservationId": "cr-1234567890abcdef1"
    }
  }
}
```

 **容量保留群組關聯：**建立容量保留群組，並將群組新增至啟動範本。下列命令會建立名為 的容量保留群組`EXAMPLE-CR-GROUP`。

```
aws resource-groups create-group \
    --name EXAMPLE-CR-GROUP \
    --configuration \
        '{"Type": "AWS::EC2::CapacityReservationPool"}' \
        '{"Type": "AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
```

 下列命令會將 ODCR 新增至容量保留群組。

```
aws resource-groups group-resources --group EXAMPLE-CR-GROUP \
    --resource-arns arn:aws:ec2:us-east-2:123456789012:capacity-reservation/cr-1234567890abcdef1
```

 建立 ODCR 並新增至容量保留群組後，現在可以透過將 ODCR 新增至啟動範本來連線至 AWS PCS 運算節點群組。以下是參考容量保留群組的範例啟動範本。

```
{
  "CapacityReservationSpecification": {
    "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-2:123456789012:group/EXAMPLE-CR-GROUP"
  }
}
```

 最後，建立或更新 AWS PCS 運算節點群組以使用 hpc6a.48xlarge 執行個體，並使用參考 ODCR 的啟動範本。對於靜態節點群組，請將最小和最大執行個體設定為保留的大小 (32)。對於動態節點群組，將最小執行個體設定為 0，並將最大執行個體設定為所需的執行個體大小。

 此範例是為一個運算節點群組佈建的單一 ODCR 的簡單實作。但是， AWS PCS 支援許多其他設計。例如，您可以在多個運算節點群組之間分割大型 ODCR 或容量保留群組。或者，您可以使用另一個 AWS 帳戶已建立並與您共用的 ODCRs。

 如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的 [ML 的隨需容量預留和容量區塊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservation-overview.html)。

# 搭配 AWS PCS 使用適用於 ML 的 Amazon EC2 容量區塊
<a name="capacity-blocks"></a>

Amazon EC2 Capacity Blocks for ML 是一種 Amazon EC2 購買選項，可讓您預先付費，在特定日期和時間範圍內保留 GPU 加速運算執行個體，以支援短期工作負載。容量區塊內執行的執行個體會在 Amazon EC2 UltraCluster 內自動放置於鄰近位置，以實現低延遲、Pb 級的非阻塞式聯網。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的 [ML 的容量區塊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html)。

您可以使用啟動範本，讓 AWS PCS 在為運算節點群組啟動執行個體時，使用容量區塊。

**注意**  
AWS PCS 自 Slurm 24.05 版開始推出對容量區塊的支援。

## 限制
<a name="capacity-blocks-limitations"></a>
+ AWS PCS 僅支援 P5en, P5e, P5 和 P4d 執行個體系列的容量區塊。
+ 您一次只能將運算節點群組與 1 個容量區塊建立關聯。
+ 您無法將運算節點群組與結合多個容量區塊的容量保留群組建立關聯。
+ 容量區塊必須處於 `scheduled`或 `active` 狀態，才能與 AWS PCS 搭配使用。您無法在其他狀態下使用容量區塊，例如 `payment-failed`。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*[》中的檢視容量區塊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-view.html)。

## 容量區塊過期
<a name="capacity-blocks-expiration"></a>

容量區塊僅限於特定日期和時間範圍。當容量區塊過期時：
+ 與該容量區塊相關聯的運算節點群組會繼續存在，並保持與相同佇列的關聯。
+ 運算節點群組中的所有執行個體都會終止，且作用中任務可能會根據您的 Slurm 設定失敗。
+ AWS PCS 無法在運算節點群組中啟動新的執行個體。
+ 所有佇列或新提交的任務都會保持待定狀態，直到另一個運算節點群組連接到佇列，或者您更新運算節點群組以使用指定新容量區塊的新啟動範本。

# 設定 AWS PCS 運算節點群組以使用容量區塊
<a name="capacity-blocks-configure-cng"></a>

**將容量區塊與運算節點群組建立關聯**

1. 為 AWS PCS 建立指定容量區塊的 Amazon EC2 啟動範本。如需為 AWS PCS 建立啟動範本的詳細資訊，請參閱 [搭配 AWS PCS 使用 Amazon EC2 啟動範本](working-with_launch-templates.md)。

   您的啟動範本必須包含：
   + 的值`MarketType``InstanceMarketOptions`必須設定為 `capacity-block`。
   + `CapacityReservationSpecification` 具有有效 的 `CapacityReservationId`
   + `InstanceType` 與您購買的容量區塊的執行個體類型相符的有效 。

1. 建立使用啟動範本的運算節點群組。如需詳細資訊，請參閱[在 AWS PCS 中建立運算節點群組](working-with_cng_create.md)。您也可以更新現有的運算節點群組，以使用啟動範本。如需詳細資訊，請參閱[更新 AWS PCS 運算節點群組](working-with_cng_update.md)。

   當您建立或更新運算節點群組時：
   + 您用來建立或更新運算節點群組的 IAM 身分必須具有下列許可：

     ```
     ec2:DescribeCapacityReservations
     ```

     如需詳細資訊，請參閱[AWS PCS 的最低許可](security-min-permissions.md)。
   + 容量區塊必須處於 `scheduled`或 `active` 狀態。
   + 將運算節點群組`purchaseOption`的 設定為 `CAPACITY_BLOCK`。
   + 運算節點群組`maxInstanceCount`的 不得超過容量區塊的大小。
   + 運算節點群組的可用區域必須符合運算節點群組子網路可用區域的 1 個。

**重要**  
您無法在更新運算節點群組時變更其執行個體類型。您只能使用與運算節點群組具有相同執行個體類型的容量區塊。如果您想要使用具有不同執行個體類型的容量區塊，則必須建立新的運算節點群組。

# 有關搭配 AWS PCS 使用容量區塊的常見問題
<a name="capacity-blocks-faq"></a>

**我剛支付容量區塊的費用，並立即嘗試將其與 AWS PCS 搭配使用，但運算節點群組建立失敗。發生了什麼？**  
您的容量區塊可能不是 `scheduled`或 `active` 狀態。請在容量區塊為 `scheduled`或 之後再試一次`active`。

**我在 AWS PCS 中使用容量區塊，並在過期之前購買擴充功能。如何在 AWS PCS 中繼續使用它？**  
您不需要採取任何動作即可繼續使用 AWS PCS 中的容量區塊。容量區塊的結束日期會在您的延伸付款成功後更新。只要容量區塊沒有過期，運算節點群組就會繼續運作。如果您的延伸付款失敗，您的容量區塊仍會保留，`active`且運算節點群組會持續運作，直到容量區塊在原始結束日期過期為止。

**如果我的容量區塊過期，佇列和執行中的任務會發生什麼情況？**  
在容量區塊過期之前未啟動的佇列任務會保持待定狀態，直到您將另一個運算節點群組連接到佇列，或您使用新的容量區塊更新運算節點群組為止。您仍然可以將任務提交至佇列。您的 Slurm 設定會影響作用中的任務。根據預設，作用中的任務會自動重新排入佇列，但可能會有錯誤或失敗。

**我的容量區塊已過期。我應該做些事嗎？**  
您不需要執行任何動作。您可以檢查 Amazon EC2 主控台的 EC2 容量保留狀態。當容量區塊過期時，與該容量區塊相關聯的運算節點群組會繼續存在並處理相同的佇列。運算節點群組沒有任何執行個體可執行任務。您可以刪除運算節點群組，或取消其與佇列的關聯，以防止使用者提交無法執行的任務。

**我想要在 AWS PCS 運算節點群組中使用新的容量區塊。我該怎麼辦？**  
我們建議您建立新的運算節點群組，以使用新的容量區塊。如需詳細資訊，請參閱[設定 AWS PCS 運算節點群組以使用容量區塊](capacity-blocks-configure-cng.md)。

**如何跨叢集和服務共用 1 個容量區塊？**  
您可以將容量區塊分割到多個叢集和服務。例如，若要將容量區塊分割為 PCS-Cluster-1 上有 20 個節點的 64 個`p5.48xlarge`執行個體、PCS-Cluster-2 有 16 個節點，以及其他服務的其餘節點，請將 PCS-Cluster-1 `maxInstanceCount` `minInstanceCount`和 PCS-Cluster-2 的 和 16 個節點設為 20。

**我可以搭配 1 個運算節點群組使用多個容量區塊或合併容量嗎？**  
否。只有 1 個容量區塊可以與單一運算節點群組相關聯。 AWS PCS 不支援結合多個容量區塊的容量保留群組。

**如何知道我的容量區塊何時開始或過期？**  
與 AWS PCS 無關，Amazon EC2 會在容量區塊保留開始時透過 EventBridge 傳送`Capacity Block Reservation Delivered`事件，並在容量區塊保留到期前 40 分鐘傳送`Capacity Block Reservation Expiration Warning`事件。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的[使用 EventBridge 監控容量區塊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-monitor.html)。

**Slurm 如何追蹤容量區塊的狀態？**  
您可以執行 `sinfo`以了解 AWS PCS 如何使用容量區塊。在下列範例輸出中，佇列與從`active`容量區塊執行 4 個執行個體的運算節點群組相關聯。節點處於 `idle` Slurm 狀態 （可供使用且尚未配置給任何任務）。  

```
$ sinfo  
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST  
fanout up infinite 4 idle node-fanout-[1-4]
```
如果節點處於 `maint` 狀態，您可以執行 `scontrol show res` 以查看控制此狀態的 Slurm 保留的詳細資訊。在下列範例輸出中，容量區塊`scheduled`具有未來的開始日期。  

```
$ scontrol show res                                                                                                  
ReservationName=node-fanout-scheduled StartTime=2025-10-14T13:09:17 EndTime=2025-10-14T13:11:17 Duration=00:02:00    
   Nodes=node-fanout-[1-4] NodeCnt=4 CoreCnt=16 Features=(null) PartitionName=(null) Flags=MAINT,SPEC_NODES          
   TRES=cpu=16                                                                                                       
   Users=root Groups=(null) Accounts=(null) Licenses=(null) State=ACTIVE BurstBuffer=(null)                          
   MaxStartDelay=(null)                                                                                              
   Comment=node-fanout Scheduled
```

**如何判斷我在啟動容量時遇到的錯誤是否因為共用容量區塊而發生？**  
在 Amazon EC2 主控台中檢查**容量保留**，以尋找容量區塊中主動佈建的執行個體數量。檢查每個執行個體的標籤，以尋找哪些服務或叢集使用它。例如， AWS PCS 的所有執行個體都有 AWS PCS 標籤`aws:pcs:cluster-id = pcs_l0mizqyk5o | aws:pcs:compute-node-group-id = pcs_ic7onkmfqk`，例如指出執行個體所屬的叢集和運算節點群組。然後，您可以檢查容量區塊是否達到容量上限。  
您可以使用 `scontrol show nodes`來檢查 AWS PCS 叢集中的容量區塊節點是否正在觸發 `ReservationCapacityExceeded`：  

```
[root@ip-172-16-10-54 ~]# scontrol show nodes test-node-8-gamma-cb-2  
NodeName=test-8-gamma-cb-2 CoresPerSocket=1  
   CPUAlloc=0 CPUEfctv=8 CPUTot=8 CPULoad=0.00  
   AvailableFeatures=test-8-gamma-cb,gpu  
   ActiveFeatures=test-8-gamma-cb,gpu  
   Gres=gpu:H100:1  
   NodeAddr=test-8-gamma-cb-2 NodeHostName=test-8-gamma-cb-2  
   RealMemory=249036 AllocMem=0 FreeMem=N/A Sockets=8 Boards=1  
   State=IDLE+CLOUD+POWERING_DOWN ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A  
   Partitions=my-q  
   BootTime=None SlurmdStartTime=None  
   LastBusyTime=Unknown ResumeAfterTime=None  
   CfgTRES=cpu=8,mem=249036M,billing=8  
   AllocTRES=  
   CurrentWatts=0 AveWatts=0  
   Reason=Failed to launch backing instance (Error Code: ReservationCapacityExceeded) [root@2025-08-28T15:15:33]
```

**當多個運算節點群組連接到相同的佇列時，如何強制任務在容量區塊支援的執行個體上執行？**  
您可以使用 Slurm 功能和限制條件，將任務鎖定到特定節點集。我們建議您不要為每個運算節點群組設定 Slurm 權重，因為 僅適用於未處於 `maint` 狀態的節點。