本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義
您可將 Amazon EC2 Trn1
Amazon EC2 Trn1 執行個體採用 AWS Trainium
Amazon EC2 Inf1 執行個體和 Inf2 執行個體由 AWS Inferentia
機器學習模型使用 AWS Neuron
考量事項
當您開始在 Amazon ECS 上部署 Neuron 之前,請考量下列事項:
-
您的叢集可包含 Trn1、Inf1、Inf2 和其他執行個體的組合。
-
您需要容器中的 Linux 應用程式,該容器使用支援 AWS Neuron 的機器學習架構。
重要
使用其他架構的應用程式在 Trn1、Inf1 和 Inf2 執行個體上的效能可能不會有很大提升。
-
每個 AWS Trainium
或 AWS 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 |