

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

# 搭配 AWS PCS 使用 Amazon EC2 啟動範本
<a name="working-with_launch-templates"></a>

在 Amazon EC2 中，啟動範本可以存放一組偏好設定，讓您不必在啟動執行個體時個別指定。 AWS PCS 整合啟動範本做為設定運算節點群組的彈性方式。當您建立節點群組時，您會提供啟動範本。 AWS PCS 會從中建立衍生的啟動範本，其中包含轉換，以協助確保它能與 服務搭配使用。

了解撰寫自訂啟動範本時有哪些選項和考量事項，可協助您撰寫用於 AWS PCS 的選項和考量事項。如需啟動範本的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[從啟動範本啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)。

**Topics**
+ [AWS PCS 啟動範本概觀](working-with_launch-templates_overview.md)
+ [建立基本的啟動範本](working-with_launch-templates_create.md)
+ [使用 AWS PCS 的 Amazon EC2 使用者資料](working-with_ec2-user-data.md)
+ [AWS PCS 中的容量保留](working-with_capacity-reservations.md)
+ [有用的啟動範本參數](working-with_launch-templates_parameters.md)

# AWS PCS 啟動範本概觀
<a name="working-with_launch-templates_overview"></a>

您可以在 EC2 啟動範本中包含[超過 30 個參數](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html)，控制執行個體設定方式的許多層面。大多數都與 AWS PCS 完全相容，但有一些例外狀況。

 AWS PCS 會忽略 EC2 啟動範本的下列參數，因為這些屬性必須由服務直接管理：
+ **執行個體類型/指定執行個體類型屬性** (`InstanceRequirements`) – AWS PCS 不支援屬性型執行個體選取。
+ **執行個體類型** (`InstanceType`) – 在您建立節點群組時指定執行個體類型。
+ **進階詳細資訊/IAM 執行個體描述檔** (`IamInstanceProfile`) – 您在建立或更新節點群組時提供此功能。
+ **進階詳細資訊/停用 API 終止** (`DisableApiTermination`) – AWS PCS 必須控制其啟動的節點群組執行個體生命週期。
+ **進階詳細資訊/停用 API 停止** (`DisableApiStop`) – AWS PCS 必須控制其啟動的節點群組執行個體生命週期。
+ **進階詳細資訊/停止 – 休眠行為** (`HibernationOptions`) – AWS PCS 不支援執行個體休眠。
+ **進階詳細資訊/彈性 GPU** (`ElasticGpuSpecifications`) – Amazon Elastic Graphics 已於 2024 年 1 月 8 日終止服務。
+ **進階詳細資訊/彈性推論 **(`ElasticInferenceAccelerators`) – Amazon Elastic Inference 不再提供給新客戶。
+ **AAdvanced details/Specify CPU options/Threads per core** (`ThreadsPerCore`) – AWS PCS 將每個核心的執行緒數目設定為 1。

這些參數具有支援 AWS PCS 相容性的特殊需求：
+ **使用者資料** (`UserData`) – 必須為分段編碼。請參閱 [使用 AWS PCS 的 Amazon EC2 使用者資料](working-with_ec2-user-data.md)。
+ **應用程式和作業系統映像** (`ImageId`) – 您可以包含此項目。不過，如果您在建立或更新節點群組時指定 AMI ID，則會覆寫啟動範本中的值。您提供的 AMI 必須與 AWS PCS 相容。如需詳細資訊，請參閱「[AWS PCS 的 Amazon Machine Image AMIs)](working-with_ami.md)。
+ **網路設定/防火牆 （安全群組）**(`SecurityGroups`) – 無法在 AWS PCS 啟動範本中設定安全群組名稱的清單。您可以設定安全群組 IDs(`SecurityGroupIds`) 的清單，除非您在啟動範本中定義網路介面。然後，您必須為每個界面指定安全群組 IDs。如需詳細資訊，請參閱[AWS PCS 中的安全群組](working-with_networking_sg.md)。
+ **網路設定/進階網路組態** (`NetworkInterfaces`) – 如果您使用 EC2 執行個體搭配單一網路卡，而且不需要任何專門的網路組態， AWS PCS 可以為您設定執行個體聯網。若要設定多個網路卡或在您的執行個體上啟用 Elastic Fabric Adapter，請使用 `NetworkInterfaces`。每個網路界面都必須有 下的安全群組 IDs 清單`Groups`。如需詳細資訊，請參閱[AWS PCS 中的多個網路介面](working-with_networking_multi-nic.md)。
+ **進階詳細資訊/容量保留** (`CapacityReservationSpecification`) – 這可以設定，但在使用 AWS PCS `CapacityReservationId`時無法參考特定 。不過，您可以參考容量保留群組，其中該群組包含一或多個容量保留。如需詳細資訊，請參閱[AWS PCS 中的容量保留](working-with_capacity-reservations.md)。

# 建立基本的啟動範本
<a name="working-with_launch-templates_create"></a>

您可以使用 AWS 管理主控台 或 建立啟動範本 AWS CLI。

------
#### [ AWS 管理主控台 ]

**建立啟動範本**

1. 開啟 [Amazon EC2 主控台](https://console.aws.amazon.com/ec2/home)，然後選取**啟動範本**。

1. 選擇 **Create launch template** (建立啟動範本)。

1. 在**啟動範本名稱和描述**下，輸入**啟動範本名稱的唯一、特殊的名稱**

1. 在金鑰對名稱的金鑰對 （登入） 下，選取將用於登入 AWS PCS 管理之 EC2 執行個體的 SSH 金鑰對。此為選用操作，但建議您採用。

1. 在**網路設定**下，接著**防火牆 （安全群組）**，選擇要連接至網路介面的安全群組。啟動範本中的所有安全群組都必須來自您的 AWS PCS 叢集 VPC。至少，選擇：
   + 允許與 AWS PCS 叢集通訊的安全群組
   + 允許 AWS PCS 啟動之 EC2 執行個體之間的通訊的安全群組
   + （選用） 允許傳入 SSH 存取互動式執行個體的安全群組
   + （選用） 允許運算節點對網際網路進行傳出連線的安全群組
   + （選用） 允許存取網路資源的安全群組 （例如共用檔案系統或資料庫伺服器）。

1. 您可以在 Amazon EC2 主控台的啟動範本下存取新的**啟動範本** ID。啟動範本 ID 會有表單 `lt-0123456789abcdef01`。

**建議的下一個步驟**
+ 使用新的啟動範本來建立或更新 AWS PCS 運算節點群組。

------
#### [ AWS CLI ]

**建立啟動範本**

使用下列命令建立您的啟動範本。
+ 執行命令之前，請執行下列替換：

  1. 將 *region-code* 取代為您使用 AWS PCS AWS 區域 的

  1. 將 *my-launch-template-name* 取代為範本的名稱。它對於 必須是唯一的 AWS 帳戶 ，而且 AWS 區域 您正在使用。

  1. 將 *my-ssh-key-name* 取代為您偏好的 SSH 金鑰名稱。

  1. 將 *sg-ExampleID1* 和 *sg-ExampleID2* 取代為安全群組 IDs，允許 EC2 執行個體與排程器之間的通訊，以及 EC2 執行個體之間的通訊。如果您只有一個啟用所有此流量的安全群組，您可以移除 `sg-ExampleID2`及其前面的逗號字元。您也可以新增更多安全群組 IDs。您在啟動範本中包含的所有安全群組都必須來自 AWS PCS 叢集 VPC。

  ```
  aws ec2 create-launch-template --region region-code \
      --launch-template-name my-template-name \
      --launch-template-data '{"KeyName":"my-ssh-key-name","SecurityGroupIds": ["sg-ExampleID1","sg-ExampleID2"]}'
  ```

 AWS CLI 將輸出類似以下內容的文字。啟動範本 ID 可在 中找到`LaunchTemplateId`。

```
{
    "LaunchTemplate": {
        "LatestVersionNumber": 1,
        "LaunchTemplateId": "lt-0123456789abcdef01",
        "LaunchTemplateName": "my-launch-template-name",
        "DefaultVersionNumber": 1,
        "CreatedBy": "arn:aws:iam::123456789012:user/Bob",
        "CreateTime": "2019-04-30T18:16:06.000Z"
    }
}
```

**建議的下一個步驟**
+ 使用新的啟動範本來建立或更新 AWS PCS 運算節點群組。

------

# 使用 AWS PCS 的 Amazon EC2 使用者資料
<a name="working-with_ec2-user-data"></a>

您可以在執行個體啟動時`cloud-init`執行的啟動範本中提供 EC2 使用者資料。具有內容類型的使用者資料區塊會在執行個體向 AWS PCS API 註冊之前`cloud-config`執行，而具有內容類型的使用者資料區塊會在註冊完成後，但在 Slurm 協助程式啟動之前`text/x‑shellscript`執行。如需內容類型的詳細資訊，請參閱 [cloud-init](https://cloudinit.readthedocs.io/en/latest/explanation/format.html) 文件。

我們的使用者資料可以執行常見的組態案例，包括但不限於下列項目：
+  [ 包含使用者或群組 ](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#including-users-and-groups) 
+  [ 安裝套件 ](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#install-arbitrary-packages) 
+  [ 建立分割區和檔案系統 ](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#create-partitions-and-filesystems) 
+  掛載網路檔案系統 

 啟動範本中的使用者資料必須採用 [MIME 分段封存](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive)格式。這是因為您的使用者資料會與節點群組中設定節點所需的其他 AWS PCS 使用者資料合併。您可以將多個使用者資料區塊組合在一起成為單一 MIME 分段檔案。

 MIME 分段檔案包含下列元件：
+  內容類型和部分邊界宣告：`Content-Type: multipart/mixed; boundary="==BOUNDARY=="`
+  MIME 版本宣告：`MIME-Version: 1.0`
+  一或多個使用者資料區塊，其中包含下列元件：
  +  發出使用者資料區塊開頭訊號的開啟界限：`--==BOUNDARY==`。您必須在此邊界之前保留該行空白。
  +  區塊的內容類型宣告： `Content-Type: text/cloud-config; charset="us-ascii"`或 `Content-Type: text/x-shellscript; charset="us-ascii"`。您必須在內容類型宣告後保留該行空白。
  +  使用者資料的內容，例如 shell 命令或`cloud-config`指令的清單。
+  發出 MIME 分段檔案結尾訊號的結束界限：`--==BOUNDARY==--`。您必須在關閉界限之前將行保留空白。

**注意**  
 如果您在 Amazon EC2 主控台中將使用者資料新增至啟動範本，您可以將其貼上為純文字。或者，您可以從檔案上傳。如果您使用 AWS CLI 或 AWS 開發套件，您必須先對使用者資料進行 base64 編碼，並在呼叫 [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html) 時提交該字串做為 `UserData` 參數的值，如此 JSON 檔案所示。

```
{
    "LaunchTemplateName": "base64-user-data",
    "LaunchTemplateData": {
        "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..."
    }
}
```

**範例**
+ [範例：從套件儲存庫安裝軟體](working-with_ec2-user-data_repo.md)
+ [範例：從 S3 儲存貯體執行指令碼](working-with_ec2-user-data_s3.md)
+ [範例：設定全域環境變數](working-with_ec2-user-data_env.md)
+ [搭配 AWS PCS 使用網路檔案系統](working-with_file-systems.md)
+ [範例：使用 EFS 檔案系統做為共用主目錄](working-with_ec2-user-data_efs.md)

# 範例：從套件儲存庫安裝 AWS PCS 的軟體
<a name="working-with_ec2-user-data_repo"></a>

 在啟動範本`"userData"`中提供此指令碼做為 的值。如需詳細資訊，請參閱[使用 AWS PCS 的 Amazon EC2 使用者資料](working-with_ec2-user-data.md)。

此指令碼使用 **cloud-config**，在啟動時在節點群組執行個體上安裝軟體套件。如需詳細資訊，請參閱 *Cloud-init 文件*中的[使用者資料格式](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。此範例會安裝 `curl`和 `llvm`。

**注意**  
您的執行個體必須能夠連線到其設定的套件儲存庫。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- python3-devel
- rust
- golang

--==MYBOUNDARY==--
```

# 範例：從 S3 儲存貯體執行 AWS PCS 的其他指令碼
<a name="working-with_ec2-user-data_s3"></a>

 在啟動範本`"userData"`中提供此指令碼做為 的值。如需詳細資訊，請參閱[使用 AWS PCS 的 Amazon EC2 使用者資料](working-with_ec2-user-data.md)。

下列使用者資料指令碼使用 **cloud-config** 從 S3 儲存貯體匯入指令碼，並在啟動時在節點群組執行個體上執行。如需詳細資訊，請參閱 *cloud-init 文件*中的[使用者資料格式](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。

將下列值取代為您自己的詳細資訊：
+ *amzn-s3-demo-bucket* – 您的帳戶可讀取的 S3 儲存貯體名稱。
+ *object-key* – 要匯入之指令碼的 S3 物件金鑰。這包括指令碼的名稱及其在儲存貯體資料夾結構中的位置。例如 `scripts/script.sh`。如需詳細資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的使用資料夾在 Amazon S3 主控台中組織物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html)。 **
+ *shell* – 用來執行指令碼的 Linux shell，例如 `bash`。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

runcmd:
- aws s3 cp s3://amzn-s3-demo-bucket/object-key /tmp/script.sh
- /usr/bin/shell /tmp/script.sh

--==MYBOUNDARY==--
```

節點群組的 IAM 執行個體描述檔必須能夠存取 儲存貯體。下列 IAM 政策是上述使用者資料指令碼中儲存貯體的範例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

# 範例：設定 AWS PCS 的全域環境變數
<a name="working-with_ec2-user-data_env"></a>

 在啟動範本`"userData"`中提供此指令碼做為 的值。如需詳細資訊，請參閱[使用 AWS PCS 的 Amazon EC2 使用者資料](working-with_ec2-user-data.md)。

下列範例使用 在節點群組執行個體上`/etc/profile.d`設定全域變數。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
touch /etc/profile.d/awspcs-userdata-vars.sh
echo MY_GLOBAL_VAR1=100 >> /etc/profile.d/awspcs-userdata-vars.sh
echo MY_GLOBAL_VAR2=abc >> /etc/profile.d/awspcs-userdata-vars.sh

--==MYBOUNDARY==--
```

# 範例：使用 EFS 檔案系統做為 AWS PCS 的共用主目錄
<a name="working-with_ec2-user-data_efs"></a>

 在啟動範本`"userData"`中提供此指令碼做為 的值。如需詳細資訊，請參閱[使用 AWS PCS 的 Amazon EC2 使用者資料](working-with_ec2-user-data.md)。

此範例延伸了 中的範例 EFS 掛載[搭配 AWS PCS 使用網路檔案系統](working-with_file-systems.md)，以實作共用的主目錄。在掛載 EFS 檔案系統之前，會備份 /home 的內容。掛載完成後，內容會快速複製到共用儲存體上的適當位置。

使用您自己的詳細資訊取代此指令碼中的下列值：
+ */mount-point-directory* – 您想要掛載 EFS 檔案系統的執行個體路徑。
+ *filesystem-id* – EFS 檔案系統的檔案系統 ID。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
  - amazon-efs-utils

runcmd:
  - mkdir -p /tmp/home
  - rsync -a /home/ /tmp/home
  - echo "filesystem-id:/ /mount-point-directory efs tls,_netdev" >> /etc/fstab
  - mount -a -t efs defaults
  - rsync -a --ignore-existing /tmp/home/ /home
  - rm -rf /tmp/home/

--==MYBOUNDARY==--
```

# 範例：啟用無密碼 SSH
<a name="working-with_ec2-user-data_efs_ssh"></a>

您可以建置共用主目錄範例，使用 SSH 金鑰在叢集執行個體之間實作 SSH 連線。針對使用共用主檔案系統的每個使用者，執行類似下列的指令碼：

```
#!/bin/bash

mkdir -p $HOME/.ssh && chmod 700 $HOME/.ssh
touch $HOME/.ssh/authorized_keys
chmod 600 $HOME/.ssh/authorized_keys

if [ ! -f "$HOME/.ssh/id_rsa" ]; then
    ssh-keygen -t rsa -b 4096 -f $HOME/.ssh/id_rsa -N ""
    cat ~/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
fi
```

**注意**  
執行個體必須使用允許叢集節點之間 SSH 連線的安全群組。

# 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 僅支援具有 P6-B300, P6-B200, 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)。
+ 對於 P6 和 P5 執行個體類型，請參閱相關的 AWS 文件：[P6 執行個體的軟體需求](https://docs.aws.amazon.com/dlami/latest/devguide/p6-support-dlami.html#dlami-support-p6)、[使用多個網路卡最大化 Amazon EC2 執行個體的網路頻寬](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.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` 狀態的節點。

# 有用的啟動範本參數
<a name="working-with_launch-templates_parameters"></a>

本節說明一些可能對 AWS PCS 廣泛有用的啟動範本參數。

## 開啟詳細的 CloudWatch 監控
<a name="working-with_launch-templates_parameters_cw"></a>

您可以使用啟動範本參數，以較短的間隔啟用 CloudWatch 指標的集合。

------
#### [ AWS 管理主控台 ]

在建立或編輯啟動範本的主控台頁面上，此選項位於**進階詳細資訊**區段下。將**詳細 CloudWatch 監控**設定為*啟用。*

------
#### [ YAML ]

```
Monitoring:
    Enabled: True
```

------
#### [ JSON ]

```
{"Monitoring": {"Enabled": "True"}}
```

------

如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud Linux* [執行個體使用者指南》中的啟用或停用執行個體的詳細監控](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html)。

## 執行個體中繼資料服務第 2 版 (IMDS v2)
<a name="working-with_launch-templates_parameters_imds2"></a>

將 IMDS v2 與 EC2 執行個體搭配使用可提供顯著的安全增強功能，並有助於降低在 AWS 環境中存取執行個體中繼資料的潛在風險。

------
#### [ AWS 管理主控台 ]

在建立或編輯啟動範本的主控台頁面上，此選項位於**進階詳細資訊**區段下。將*已啟用***可存取的中繼資料**、僅限 V2 的**中繼資料版本** （需要金鑰），以及**中繼資料回應跳轉限制**設為 *4*。 *V2 *

------
#### [ YAML ]

```
MetadataOptions:
  HttpEndpoint: enabled
  HttpTokens: required
  HttpPutResponseHopLimit: 4
```

------
#### [ JSON ]

```
{
    "MetadataOptions": {
        "HttpEndpoint": "enabled",
        "HttpPutResponseHopLimit": 4,
        "HttpTokens": "required"
    }
}
```

------

.