AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義 - Amazon Elastic Container Service

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

AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義

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

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

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

機器學習模型使用 AWS Neuron 部署至容器,這是一款特殊軟體開發套件 (SDK)。開發套件包含編譯器、執行時間和分析工具,可將機器學習晶片的 AWS 機器學習效能最佳化。 AWS Neuron 支援熱門的機器學習架構,例如 TensorFlow、PyTorch 和 Apache MXNet。

考量事項

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

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

  • 您需要容器中的 Linux 應用程式,該容器使用支援 AWS Neuron 的機器學習架構。

    重要

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

  • 每個 AWS TrainiumAWS Inferentia 晶片一次僅可執行一個推論或推論訓練任務。若為 Inf1,每個晶片具有 4 個 NeuronCores。若為 Trn1 和 Inf2,每個晶片則具有 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 Inferentia 晶片。您可使用 linuxParameters 參數並指定裝置詳細資訊來執行此動作。如需詳細資訊,請參閱任務定義需求

使用 Amazon ECS 最佳化 Amazon Linux 2023 (Neuron) AMI

Amazon ECS 提供以 Amazon Linux 2023 為基礎的 Amazon ECS 最佳化 AMI,適用於 AWS Trainium 和 AWS Inferentia 工作負載。它隨附 Docker 的 AWS Neuron 驅動程式和執行時間。此 AMI 使得在 Amazon ECS 上執行機器學習推論工作負載更輕鬆。

我們建議您在啟動 Amazon EC2 Trn1, Inf1 和 Inf2 執行個體時使用 Amazon Amazon EC2 Linux 2023 (Neuron) AMI。

您可以使用 AWS CLI 搭配下列命令,擷取目前的 Amazon ECS 最佳化 Amazon Linux 2023 (Neuron) AMI。

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

下列區域支援 Amazon ECS 最佳化 Amazon Linux 2023 (Neuron) AMI:

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

  • 美國東部 (俄亥俄)

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

  • 美國西部 (奧勒岡)

  • 亞太區域 (孟買)

  • 亞太區域 (大阪)

  • 亞太區域 (首爾)

  • 亞太區域 (東京)

  • 亞太區域 (新加坡)

  • 亞太區域 (悉尼)

  • 加拿大 (中部)

  • 歐洲 (法蘭克福)

  • 歐洲 (愛爾蘭)

  • 歐洲 (倫敦)

  • 歐洲 (巴黎)

  • 歐洲 (斯德哥爾摩)

  • 南美洲 (聖保羅)

使用 Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI

Amazon ECS 提供以 Amazon Linux 2 為基礎的 Amazon ECS 最佳化 AMI,適用於 AWS Trainium 和 AWS Inferentia 工作負載。它隨附 Docker 的 AWS Neuron 驅動程式和執行時間。此 AMI 使得在 Amazon ECS 上執行機器學習推論工作負載更輕鬆。

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

您可以使用 AWS CLI 搭配下列命令,擷取目前的 Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI。

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

下列區域支援 Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI:

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

  • 美國東部 (俄亥俄)

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

  • 美國西部 (奧勒岡)

  • 亞太區域 (孟買)

  • 亞太區域 (大阪)

  • 亞太區域 (首爾)

  • 亞太區域 (東京)

  • 亞太區域 (新加坡)

  • 亞太區域 (悉尼)

  • 加拿大 (中部)

  • 歐洲 (法蘭克福)

  • 歐洲 (愛爾蘭)

  • 歐洲 (倫敦)

  • 歐洲 (巴黎)

  • 歐洲 (斯德哥爾摩)

  • 南美洲 (聖保羅)

任務定義需求

要在 Amazon ECS 上部署 Neuron,您的任務定義必須包含預先構建的容器的容器定義,該容器為TensorFlow 提供推論模型。它由 AWS 深度學習容器提供。此容器包含 AWS Neuron 執行期和 TensorFlow Serving 應用程式。啟動時,此容器會從 Amazon S3 中擷取您的模型、使用儲存的模型啟動 Neuron TensorFlow Serving,並等待預測請求。在以下範例中,容器映像擁有 TensorFlow 1.15 和 Ubuntu 18.04。在 GitHub 上維護為 Neuron 最佳化的預先建置的 Deep Learning Containers 完整清單。如需詳細資訊,請參閱使用 AWS Neuron TensorFlow Serving

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

或者,您可以建置自己的 Neuron 附屬容器映像。如需詳細資訊,請參閱《AWS 深度學習 AMIs 開發人員指南》中的教學課程:Neuron TensorFlow Serving

任務定義必須根據單一執行個體類型專門設定。您必須將容器設定為使用主機容器執行個體上可用的特定 AWS Trainium 或 AWS Inferentia 裝置。您可以使用 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