適用於 AWS 神經元機器學習工作負載的 Amazon ECS 任務定義 - Amazon Elastic Container Service

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

適用於 AWS 神經元機器學習工作負載的 Amazon ECS 任務定義

您可將 Amazon EC2 Trn1Amazon EC2 Inf1Amazon EC2 Inf2 執行個體註冊至叢集,用於機器學習工作負載。

Amazon EC2 Trn1 執行個體採用 AWS Trainium 晶片。這些執行個體為雲端中的機器學習提供高效能和低成本的訓練。您可以在 Trn1 執行個體上使用 AWS Neuron 打造機器學習架構,來訓練機器學習推論模型。然後,您可以在 Inf1 例證或 Inf2 例證上執行模型,以使用推論晶片的加速度。 AWS

Amazon EC2 Inf1 執行個體和 Inf2 執行個體由 AWS Inferentia 晶片提供支援。這些晶片在雲端提供高效能和最低成本的推論。

機器學習模型使用 AWS Neuron 部署至容器,這是一款特殊軟體開發套件 (SDK)。SDK 由編譯器、執行階段和剖析工具組成,可最佳化機器學習晶片的 AWS 機器學習效能。 AWS 神經元支援常用的機器學習架構,例如 TensorFlow PyTorch、和 Apache MXNet。

考量事項

當您開始在 Amazon ECS 上部署 Neuron 之前,請考量下列事項:

  • 您的叢集可包含 Trn1、Inf1、Inf2 和其他執行個體的組合。

  • 您需要在使用支援 AWS 神經元的機器學習架構的容器中使用 Linux 應用程式。

    重要

    使用其他架構的應用程式在 Trn1、Inf1 和 Inf2 執行個體上的效能可能不會有很大提升。

  • 每個 AWS TrainiumAWS Inferentia 晶片一次僅可執行一個推論或推論訓練任務。對於 Inf1,每個晶片都有 4 NeuronCores 個。對於 Trn1 和 In2,每個芯片都有 2。 NeuronCores每個 Trn1、Inf1 和 Inf2 執行個體上有多少個晶片就可以執行多少個任務。

  • 建立服務或執行獨立任務時,您可以在設定任務置放限制條件時使用執行個體類型屬性。這可確保在您指定的容器執行個體上啟動任務。藉此可協助您最佳化整體資源使用率,並確保推論工作負載的任務都位於 Trn1、Inf1 或 Inf2 執行個體上。如需詳細資訊,請參閱 Amazon ECS 如何在容器執行個體上放置任務

    在以下範例中,在您的 default 叢集的 Inf1.xlarge 執行個體上執行任務。

    aws ecs run-task \ --cluster default \ --task-definition ecs-inference-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == Inf1.xlarge"
  • 無法在任務定義中定義 Neuron 資源需求。而是將容器設定為使用主機容器執行個體上可用的特定 AWS Trainium 或 AWS 推論晶片。您可使用 linuxParameters 參數並指定裝置詳細資訊來執行此動作。如需詳細資訊,請參閱 任務定義需求

使用 Amazon ECS 優化 Amazon Linux 2023(神經元)AMI

Amazon ECS 提供了一個 Amazon ECS 優化 AMI,該 AMI 基於 Amazon Linux 2023,用於工作負載和推論工作負載 AWS 。 AWS 它配備了 AWS 神經元驅動程序和運行時的 Docker。此 AMI 使得在 Amazon ECS 上執行機器學習推論工作負載更輕鬆。

我們建議您在啟動 Amazon EC2 Trn1、InF1 和 In2 執行個體時使用 Amazon ECS 優化的亞馬遜 Linux 2023 (神經元) AMI。

您可以使用以下命令檢索當前 Amazon ECS 優化的 Amazon Linux 2023(神經元)AMI。 AWS CLI

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended

以下區域支援 Amazon ECS 最佳化 Amazon Linux 2023 (神經元) AMI:

  • 美國東部 (維吉尼亞北部)

  • 美國東部 (俄亥俄)

  • 美國西部 (加利佛尼亞北部)

  • 美國西部 (奧勒岡)

  • 亞太區域 (孟買)

  • 亞太區域 (大阪)

  • 亞太區域 (首爾)

  • 亞太區域 (東京)

  • 亞太區域 (新加坡)

  • 亞太區域 (悉尼)

  • 加拿大 (中部)

  • 歐洲 (法蘭克福)

  • 歐洲 (愛爾蘭)

  • 歐洲 (倫敦)

  • 歐洲 (巴黎)

  • 歐洲 (斯德哥爾摩)

  • 南美洲 (聖保羅)

使用 Amazon ECS 優化 Amazon Linux 2(神經元)AMI

Amazon ECS 提供了一個 Amazon ECS 優化 AMI,該 AMI 基於 Amazon Linux 2,用於工作負載和推 AWS 論工作負載。 AWS 它配備了 AWS 神經元驅動程序和運行時的 Docker。此 AMI 使得在 Amazon ECS 上執行機器學習推論工作負載更輕鬆。

建議在啟動 Amazon EC2 Trn1、Inf1 和 Inf2 執行個體時,使用 Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI。

您可以使用以下命令檢索當前 Amazon ECS 優化 Amazon Linux 2(神經元)AMI。 AWS CLI

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended

Amazon ECS 最佳化 Amazon Linux 2 (神經元) AMI 在以下區域支援:

  • 美國東部 (維吉尼亞北部)

  • 美國東部 (俄亥俄)

  • 美國西部 (加利佛尼亞北部)

  • 美國西部 (奧勒岡)

  • 亞太區域 (孟買)

  • 亞太區域 (大阪)

  • 亞太區域 (首爾)

  • 亞太區域 (東京)

  • 亞太區域 (新加坡)

  • 亞太區域 (悉尼)

  • 加拿大 (中部)

  • 歐洲 (法蘭克福)

  • 歐洲 (愛爾蘭)

  • 歐洲 (倫敦)

  • 歐洲 (巴黎)

  • 歐洲 (斯德哥爾摩)

  • 南美洲 (聖保羅)

任務定義需求

若要在 Amazon ECS 上部署 Neuron,您的任務定義必須包含提供推論模型之預先建置容器的容器定義。 TensorFlow它由 AWS Deep Learning Containers 提供。此容器包含 AWS 神經元運行時和 TensorFlow 服務應用程序。啟動時,此容器會從 Amazon S3 擷取您的模型、使用儲存的模型啟動神經元 TensorFlow 服務,然後等待預測請求。在下面的例子中,容器映像具有 TensorFlow 1.15 和 Ubuntu 18.04。維護針對神經元優化的預先構建 Deep Learning Containers 的完整列表。 GitHub如需詳細資訊,請參閱使用 AWS 神經元服 TensorFlow 務

763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04

或者,您可以建置自己的 Neuron 附屬容器映像。如需詳細資訊,請參閱AWS Deep Learning AMI 開發人員指南的教學課程:神經元 TensorFlow 服務

任務定義必須根據單一執行個體類型專門設定。您必須將容器設定為使用主機容器執行個體上可用的特定 AWS Trainium 或 AWS 推論裝置。您可以使用 linuxParameters 參數進行該動作。下表詳細說明特定於每種執行個體類型的晶片。

執行個體類型 vCPU RAM (GiB) AWS ML 加速器芯片 裝置路徑
trn1.2xlarge 8 32 1 /dev/neuron0
trn1.32xlarge 128 512 16 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11, /dev/neuron12, /dev/neuron13, /dev/neuron14, /dev/neuron15
inf1.xlarge 4 8 1 /dev/neuron0
inf1.2xlarge 8 16 1 /dev/neuron0
inf1.6xlarge 24 48 4 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3
inf1.24xlarge 96 192 16 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11, /dev/neuron12, /dev/neuron13, /dev/neuron14, /dev/neuron15
inf2.xlarge 8 16 1 /dev/neuron0
inf2.8xlarge 32 64 1 /dev/neuron0
inf2.24xlarge 96 384 6 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5,
inf2.48xlarge 192 768 12 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11