GPU 工作負載的 Amazon ECS 任務定義 - Amazon Elastic Container Service

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

GPU 工作負載的 Amazon ECS 任務定義

您建立具有支援 GPU 容器執行個體的叢集時,Amazon ECS 支援使用 GPU 的工作負載。使用 p2、p3、p5、g3、g4 和 g5 執行個體類型的 Amazon EC2 GPU 型容器執行個體可讓您存取 NVIDIA GPU。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的 Linux 加速運算執行個體

Amazon ECS 提供的 GPU 最佳化 AMI 可與預先設定的 NVIDIA 核心驅動程式和 Docker GPU 執行時間搭配使用。如需詳細資訊,請參閱 Amazon ECS 優化的 Linux AMI

您可以在容器定義中指定 GPU 數量,以便在容器層級考量任務放置。Amazon ECS 會對支援 GPU 的可用容器執行個體排程並將實體 GPU 固定至適當容器以獲得最佳效能。

支援下列 Amazon EC2 GPU 型執行個體類型。如需詳細資訊,請參閱 Amazon EC2 P2 執行個體亞馬遜 EC2 P3 執行個體亞馬 Amazon EC2 EC2 P4d 執行個體亞 Amazon EC2 G3 執行個體、Amazon EC2 G4 執行個體、Amazon EC2 G5 執行個體和 Amazon EC2 G6 執行個體。

執行個體類型

GPU

GPU 記憶體 (GiB)

vCPU

記憶體 (GiB)

p3.2xlarge

1

16

8

61

p3.8xlarge

4

64

32

244

p3.16xlarge

8

128

64

488

p3dn.24xlarge

8

256

96

768

p4d.24xlarge

8 320 96 1152
p5.48xlarge 8 640 192 2048

g3s.xlarge

1

8

4

30.5

g3.4xlarge

1

8

16

122

g3.8xlarge

2

16

32

244

g3.16xlarge

4

32

64

488

g4dn.xlarge

1

16

4

16

g4dn.2xlarge

1

16

8

32

g4dn.4xlarge

1

16

16

64

g4dn.8xlarge

1

16

32

128

g4dn.12xlarge

4

64

48

192

g4dn.16xlarge

1

16

64

256

g5.xlarge

1

24

4

16

g5.2xlarge

1

24

8

32

g5.4xlarge

1

24

16

64

g5.8xlarge

1

24

32

128

g5.16xlarge

1

24

64

256

g5.12xlarge

4

96

48

192

g5.24xlarge

4

96

96

384

g5.48xlarge

8

192

192

768

1 24 4 16
1 24 8 32
1 24 16 64
1 24 32 128
1 24 64 256
4 96 48 192
4 96 48 192
8 192 192 768
g6. 金屬 8 192 192 768
GR6.4 x 大 1 24 16 128
克 6.8 倍大 1 24 32 256

您可以透過查詢 AWS Systems Manager 參數存放區 API,擷取適用於 Amazon ECS 最佳化 AMI 的 Amazon 機器映像 (AMI) 識別碼。若使用此參數,您無需手動查詢 Amazon ECS 最佳化 AMI ID。如需有關 Systems Manager 參數存放區 API 的詳細資訊,請參閱GetParameter。您使用的使用者必須擁有 ssm:GetParameter IAM 許可,才能擷取 Amazon ECS 最佳化 AMI 中繼資料。

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1

考量事項

注意

對 g2 執行個體系列類型的支援已被棄用。

p2 執行個體系列類型僅在早於 Amazon ECS GPU 最佳化 AMI 20230912 之前的版本上支援。如果您需要繼續使用 p2 執行個體,請參閱 您需要 P2 執行個體時要採取的動作

在這兩種執行個體系列類型上就地更新 NVIDIA/CUDA 驅動程式,將導致潛在的 GPU 工作負載失敗。

建議您開始在 Amazon ECS 上使用 GPU 前考量下列事項。

  • 您的叢集可以混合 GPU 和非 GPU 容器執行個體。

  • 您可在外部執行個體上執行 GPU 工作負載。在您叢集中註冊外部執行個體時,請確保安裝指令碼中包含 --enable-gpu 標記。如需詳細資訊,請參閱 將外部執行個體註冊到 Amazon ECS 叢集

  • 您必須在代理程式組態檔案中將 ECS_ENABLE_GPU_SUPPORT 設定為 true。如需詳細資訊,請參閱 Amazon ECS 容器代理程式組態

  • 執行任務或建立服務時,您可以在設定任務放置限制條件時使用執行個體類型屬性,來決定任務在哪個容器執行個體啟動。這樣便可更有效地使用您的資源。如需詳細資訊,請參閱 Amazon ECS 如何在容器執行個體上放置任務

    以下範例會在預設叢集的 g4dn.xlarge 容器執行個體啟動任務。

    aws ecs run-task --cluster default --task-definition ecs-gpu-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == g4dn.xlarge" --region us-east-2
  • 對於在容器定義中指定 GPU 資源需求的每個容器,Amazon ECS 將容器執行時間設定為 NVIDIA 容器執行時間。

  • NVIDIA 容器執行時間需要在容器中設定一些環境變數才能正常運作。如需這些環境變數的清單,請參閱使用 Docker 進行特殊組態。Amazon ECS 將 NVIDIA_VISIBLE_DEVICES 環境變數值設定為 Amazon ECS 指派給容器的 GPU 裝置 ID 清單。對於其他必要的環境變數,Amazon ECS 不會對其進行設定。因此,請確保容器映像會設定它們,或在容器定義中設定它們。

  • Amazon ECS GPU 最佳化 AMI 版本 20230929 和更新版本支援 p5 執行個體類型系列。

  • Amazon ECS GPU 最佳化 AMI 版本 20230913 和更新版本支援 g4 執行個體類型系列。如需詳細資訊,請參閱 Amazon ECS 優化的 Linux AMI。Amazon ECS 主控台的 Create Cluster (建立叢集) 工作流程中不支援此系列。若要使用這些執行個體類型,您必須使用 Amazon EC2 主控台或 API AWS CLI,並將執行個體手動註冊到叢集。

  • p4d.24xlarge 執行個體類型僅適用於 CUDA 11 或更新版本。

  • Amazon ECS GPU 最佳化 AMI 已啟用 IPv6,這會在使用 yum 時導致問題。透過設定 yum 以搭配使用 IPv4 與下列命令,可解決此問題。

    echo "ip_resolve=4" >> /etc/yum.conf
  • 在建置一個不使用 NVIDIA/CUDA 基礎映像的容器映像時,必須將 NVIDIA_DRIVER_CAPABILITIES 容器執行時間變數設定為下列其中一個值:

    • utility,compute

    • all

    如需如何設定變數的詳細資訊,請參閱 NVIDIA 網站上的控制 NVIDIA 容器執行時間

  • Windows 容器不支援 GPU。

您需要 P2 執行個體時要採取的動作

如果您需要使用 P2 執行個體,您可以使用下列其中一個選項來繼續使用執行個體。

您必須修改這兩個選項的執行個體使用者資料。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的使用執行個體使用者資料

使用最新支援的 GPU 最佳化 AMI

您可以使用 GPU 最佳化 AMI 的 20230906 版本,並將下列項目新增至執行個體使用者資料。

以您的叢集名稱取代 cluster-name。

#!/bin/bash echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config

使用最新的 GPU 最佳化 AMI,並更新使用者資料

您可以將下列內容新增至執行個體使用者資料。這將解除安裝 Nvidia 535/Cuda12.2 驅動程式,然後安裝 Nvidia 470/Cuda11.4 驅動程式並修復該版本。

#!/bin/bash yum remove -y cuda-toolkit* nvidia-driver-latest-dkms* tmpfile=$(mktemp) cat >$tmpfile <<EOF [amzn2-nvidia] name=Amazon Linux 2 Nvidia repository mirrorlist=\$awsproto://\$amazonlinux.\$awsregion.\$awsdomain/\$releasever/amzn2-nvidia/latest/\$basearch/mirror.list priority=20 gpgcheck=1 gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub enabled=1 exclude=libglvnd-* EOF mv $tmpfile /etc/yum.repos.d/amzn2-nvidia-tmp.repo yum install -y system-release-nvidia cuda-toolkit-11-4 nvidia-driver-latest-dkms-470.182.03 yum install -y libnvidia-container-1.4.0 libnvidia-container-tools-1.4.0 nvidia-container-runtime-hook-1.4.0 docker-runtime-nvidia-1 echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf nvidia-smi

建立您自己的 P2 相容 GPU 最佳化 AMI

您可以建立與 P2 執行個體相容的自訂 Amazon ECS GPU 最佳化 AMI,然後使用 AMI 啟動 P2 執行個體。

  1. 執行下列命令以複製 amazon-ecs-ami repo

    git clone https://github.com/aws/amazon-ecs-ami
  2. 設定所需的 Amazon ECS 代理程式,並在 release.auto.pkrvars.hcloverrides.auto.pkrvars.hcl 中取得 Amazon Linux AMI 版本。

  3. 執行以下命令建立私有 P2 相容的 EC2 AMI。

    將區域替換為具有執行個體區域的區域。

    REGION=region make al2keplergpu
  4. 將 AMI 與下列執行個體使用者資料搭配使用,以連線至 Amazon ECS 叢集。

    以您的叢集名稱取代 cluster-name。

    #!/bin/bash echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config