View a markdown version of this page

使用節點群組在 Amazon EKS 上管理 AI/ML 工作負載的運算 - Amazon EKS

協助改進此頁面

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

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

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

使用節點群組在 Amazon EKS 上管理 AI/ML 工作負載的運算

提示

註冊即將舉行的 Amazon EKS AI/ML 研討會。

本節說明如何使用 Amazon EKS 受管節點群組或自我管理節點,管理 AI 訓練和推論工作負載的加速運算 (AWS Trainium、NVIDIA GPUs)。

EKS 受管節點群組和自我管理節點使用 EC2 Auto Scaling 群組 (ASG)。EKS 受管節點群組具有建立、更新和刪除節點的專用 EKS APIs,也具有內建的節點修復功能和生命週期終止掛鉤。EKS 自我管理節點是透過 EC2 APIs直接部署和管理。

使用這些選項,您可以預先定義執行個體類型、所需計數、擴展邊界和 EC2 啟動範本。如果您也有非 EKS 工作負載,並偏好透過 EC2 啟動範本的組態一致性,請考慮使用 EKS 受管節點群組或自我管理節點。EKS 節點群組適合預先已知加速運算足跡的訓練和微調工作負載。請注意,EKS Auto Mode 和 Karpenter 都支援靜態容量佈建,使用 EKS Auto Mode 和 Karpenter 管理 AI/ML 工作負載的運算如需詳細資訊,請參閱 。

EKS 受管節點群組和自我管理節點支援所有加速運算購買選項 (隨需、Spot、隨需容量預留、ML 的容量區塊)。您可以為每個容量類型建立個別的受管或自我管理節點群組,每個群組都有自己的啟動範本、執行個體類型和擴展組態。這可讓您在沒有異質動態佈建邏輯的情況下,對每個容量集區進行明確且 ASG 支援的控制。

EKS 受管節點群組與自我管理節點

在 EKS 受管節點群組和自我管理節點之間進行選擇,取決於您需要的自訂和控制層級。EKS 受管節點群組允許 EC2 啟動範本自訂的子集,而自我管理節點支援 EC2 啟動範本的完整廣度。如果您沒有自行自訂和管理節點生命週期的特定原因,請從 EKS 受管節點群組開始,並只在特定需求強制時移至自我管理節點。

在下列情況下使用受管節點群組:您希望 EKS 代表您處理 AMI 選擇、節點引導、滾動更新、節點修復和正常耗盡工作流程。如果您不想使用 EKS Auto Mode 或 Karpenter 進行訓練和推論工作負載,建議使用 EKS 受管節點群組。使用適用於 ML 的容量區塊時,EKS 受管節點群組會自動建立排程擴展政策,在保留結束前 40 分鐘耗盡節點群組,無需使用 AWS Node Termination Handler 或您自己的縮減規模自動化。當您使用支援的 EKS 最佳化 AMI、不需要核心層級或深入 EC2 啟動範本自訂,以及想要更簡單的 Kubernetes 版本節點升級路徑時,請使用 EKS 受管節點群組。

在下列情況下使用自我管理節點群組:您需要完全控制 EC2 啟動範本、AMI、核心參數、容器執行期組態或自訂引導指令碼。常見的 ML 案例包括使用 Elastic Fabric Adapter (EFA) 進行分散式訓練的調校核心和 NIC 設定,或與自訂節點生命週期控制器整合。自我管理節點可讓您靈活地運送所需的任何使用者資料和 IAM 執行個體描述檔,但您需要負責更新、排程擴展政策和生命週期關聯,例如AWS 節點終止處理常式

為 ML 預留具有容量區塊的 GPUs

機器學習 (ML) 的容量區塊可讓您在未來日期為有時間限制的訓練或推論工作負載保留 GPU 執行個體。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的 ML 的容量區塊

您可以透過 EKS 受管節點群組和自我管理節點使用容量區塊保留。EC2 啟動範本組態在這兩種情況下都相同。用於終止工作負載的節點建立工作流程、縮減規模行為和生命週期關聯會因佈建選項而有所不同。

考量事項

  • 容量區塊僅適用於特定 Amazon EC2 執行個體類型和 AWS 區域。如需詳細資訊,請參閱使用容量區塊先決條件

  • 容量區塊是區域區塊。在建立節點群組期間,您必須使用與容量區塊保留位於相同可用區域 (AZ) 的子網路。

  • 如果您在容量區塊保留變成作用中之前建立節點群組,請在節點群組建立0期間將所需的容量設定為 。

  • 若要允許正常的工作負載耗盡時間,請在容量區塊保留結束前超過 30 分鐘排程scale-to-zero。EC2 會在保留結束前 30 分鐘開始關閉執行個體。

使用 ML 的容量區塊建立節點群組

EKS 受管節點群組和自我管理節點需要使用以容量區塊保留為目標的自訂 EC2 啟動範本。以下顯示 EKS 受管節點群組和自我管理節點的最低必要欄位。自我管理節點需要其他欄位,如以下自我管理節點步驟所示。

LaunchTemplateData 必須包含:

  • InstanceMarketOptions 並將 MarketType 設為 "capacity-block"

  • CapacityReservationSpecification: CapacityReservationTargetCapacityReservationId設定為容量區塊 ID。例如,cr-0123456789abcdef0

  • InstanceType 設定為容量區塊保留的執行個體類型。例如,p5.48xlarge

這些需求會顯示在下列範例,以建立 EKS 受管節點群組和自我管理節點的啟動範本。

Managed node groups
  1. 使用下列內容建立名為 eks-capacity-block-lt.json 的檔案。

    使用容量區塊InstanceType的值取代 CapacityReservationId和 的內容。如需其他 EC2 啟動範本欄位的詳細資訊,請參閱 使用啟動範本自訂受管節點使用機器學習工作負載的容量區塊

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "InstanceType": "p5.48xlarge" } }
  2. 建立啟動範本。

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. 使用啟動範本來建立 EKS 受管節點群組。將以下命令中的預留位置取代為適用於您環境的值。以下命令會將 --ami-type設為 AL2023 EKS 最佳化 NVIDIA AMIs。針對 GPU 執行個體使用 EKS 最佳化AMIs 如需可用 EKS 最佳化 AMIs 的詳細資訊,請參閱 。如果您使用自訂 AMI 搭配 EKS 受管節點群組,請在啟動範本中指定您的 AMI ID。

    建立使用容量區塊的 EKS 受管節點群組時,請執行下列動作:

    • --capacity-type 設定為 "CAPACITY_BLOCK"

    • 只在與容量保留相同的可用區域中指定子網路。

    • 如果您在保留作用中desiredSize之前指定非零,Auto Scaling 群組會報告啟動錯誤,直到保留變成作用中為止。啟用後,執行個體會啟動,而 ASG 會擴展至請求的 desiredSize

      aws eks create-nodegroup \ --cluster-name my-eks-cluster \ --nodegroup-name eks-cb-nodes \ --node-role "arn:aws: iam::111122223333:role/myNodeRole" \ --region region-code \ --subnets subnet-ExampleID1 \ --ami-type "AL2023_x86_64_NVIDIA" \ --scaling-config minSize=0,maxSize=2,desiredSize=0 \ --capacity-type "CAPACITY_BLOCK" \ --launch-template name="EKS-Capacity-Block-Launch-Template"
  4. 如果您在0建立時desiredSize將 設定為 ,請在保留變成作用中時,使用下列其中一項來擴展節點群組:

    • ASG 上與保留開始時間一致的排程擴展政策。如需詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的為 Amazon EC2 Auto Scaling 排程擴展

    • Amazon EKS 主控台或 aws eks update-nodegroup-config來更新擴展組態。

  5. 驗證節點在擴展後加入叢集。

  6. EKS 會在保留結束前自動建立名為 Amazon EKS 節點群組容量縮減的排程擴展政策,將節點群組縮減至保留結束前 0 40 分鐘。這可讓 Pod 在 EC2 以 30 分鐘標記開始終止執行個體之前,有時間正常耗盡。請勿編輯或刪除此排程動作。

Self-managed nodes
  1. 使用下列內容建立名為 eks-capacity-block-lt.json 的檔案。

    使用容量區塊InstanceType的值取代 CapacityReservationId和 的內容。如需其他 EC2 啟動範本欄位的詳細資訊,請參閱 使用啟動範本自訂受管節點使用機器學習工作負載的容量區塊

    IamInstanceProfileImageIdUserDataSecurityGroupIds的內容取代為您環境KeyName的值。

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "IamInstanceProfile": { "Arn": "arn:aws: iam::111122223333:role/myNodeRole" }, "ImageId": "image-id", "InstanceType": "p5.48xlarge", "KeyName": "key-name", "SecurityGroupIds": "sg-05b1d815d1EXAMPLE" ], "UserData": "user-data" } }
  2. 建立啟動範本。

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. 使用啟動範本,依照中的步驟建立 Auto Scaling 群組建立自我管理的 Amazon Linux 節點。如果保留尚未啟用,請將 DesiredCapacity設定為 0。僅在預留容量的可用區域中指定子網路。

  4. 在建立自我管理節點並將 DesiredCapacity設定為 之後0,請在 Auto Scaling 群組上建立與容量區塊保留時間一致的排程擴展政策。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 的排程擴展

    您可以使用預留執行個體,直到保留結束時間前 30 分鐘為止。在結束時間前超過 30 分鐘排定scale-to-zero,讓 Pod 有時間耗盡。

    如果您想要手動擴展,請在保留開始時間更新 ASG 所需的容量,並在結束時間之前超過 30 分鐘再次更新。

  5. 若要正常耗盡 Pod,請設定 AWS 節點終止處理常式。它會使用 EventBridge 監控來自 Amazon EC2 Auto Scaling 的 ASG 縮減生命週期事件,並讓 Kubernetes 控制平面在執行個體無法使用之前採取行動。如果沒有它,Pod 和 Kubernetes 物件可能會卡在待定狀態。如需詳細資訊,請參閱 GitHub 上的 AWS 節點終止處理常式

    如果您未設定節點終止處理常式,請在 30 分鐘時段之前手動耗盡 Pod,讓它們有時間正常耗盡。