Amazon Web Services ブログ

EC2 用の Amazon Elastic Inference 設定ツールを使用して、EI アクセラレータを数分で起動する

Amazon Elastic Inference (EI) 設定ツールは、EI をすぐに使い始めることができる Python スクリプトです。

Amazon Elastic Inference を使用すると、低コストの GPU によるアクセラレーションを Amazon EC2 および Amazon SageMaker のインスタンスに適用して、深層学習推論の実行コストを最大 75 パーセント削減することができます。初めてEIを使用する場合は、アマゾン ウェブ サービス (AWS) PrivateLink VPC エンドポイント、IAM ポリシー、セキュリティグループルールなど、設定が必要な依存関係がいくつかあります。この作業を早く行えるように、EI 設定スクリプトを使用すると、必要なリソースを作成することで作業を簡単に始めることができて、EI アクセラレータを数分で起動できるようになります。このブログ記事では、スクリプトの使用方法、スクリプトの機能、実行時に予想されることについて説明します。

高レベルで言うと、このスクリプトは以下のことを行います。

  1. AWS Elastic Inference サービスに接続できるようにする IAM ポリシーを使用して、インスタンスの IAM ロールを作成します。
  2. インスタンスがアクセラレータと通信できるようにするために必要な入力ルールと出力ルールを使用してセキュリティグループを作成します。
  3. 目的のサブネット内に AWS PrivateLink VPC エンドポイントを作成します。
  4. 選択したオペレーティングシステム用の最新の AWS Deep Learning AMI (DLAMI) を使用して、EI アクセラレータで目的の EC2 インスタンスを起動します。

前提条件

EI を設定するには、以下でリンクされているスクリプトを実行します。以下のエンティティに依存しています。

  1. ツールを実行する予定のローカルマシンにインストールされている Python 3。
  2. Python 用 AWS SDK (Boto3)。
  3. インスタンスを起動しているリージョンの Amazon VPC (デフォルトの VPC でも構いません)。
  4. インスタンスを起動したいサブネット。
  5. EC2 キーペア。
  6. AWS 認証情報。.

これらを配置したら、GitHub から amazonei_setup.py スクリプトをローカルマシンにダウンロードし、次のコマンドを使用して端末から実行します。

$ python amazonei_setup.py

ツールが作成するもの

スクリプトは以下の AWS リソースを作成します。

  • Amazon EI ポリシーを持つインスタンスロール。 このロールは、スクリプトが最初に実行されるときに作成されます。以降のすべての実行では、スクリプトはこの IAM ロールを再利用します。このロールを削除した場合、スクリプトは次回の実行時にロールを再作成します。IAM ロールには、以下のプロパティがあります。
    • ロール名: Amazon-Elastic-Inference-Connect-Role
    • ポリシー名: Amazon-Elastic-Inference-Connect-Policy
    • インスタンスプロファイル名: Amazon-Elastic-Inference-Instance-Profile

    ポリシーの説明は以下のとおりです。

    { "Version": "2012-10-17",
      "Statement": [
           {
                "Effect": "Allow",
                "Action": [ 
                "elastic-inference:Connect",
                "iam:List*",
                "iam:Get*",
                "ec2:Describe*",
                "ec2:Get*" 
                ],
                "Resource": "*"
            } 
        ] 
    }
    
  • セキュリティグループ (SG)。EC2 インスタンスに関連付けられたセキュリティグループは、Amazon EI サービスの要求に応じてポート 443 への受信トラフィックを許可する必要があります。また、SSH 用にポート 22 へのトラフィックを許可する受信ルールも必要です。これらのルールに一致するセキュリティグループが見つかった場合は、それが使用されます。ただし、一致する SG が見つからない場合は、必要なルールを持つ新しい SG が作成されます。送信ルールは、すべてのポートへのトラフィックを許可するように設定されます。新しい SG の名前は amazon_ei_security_group であり、Amazon EI サービスにアクセスするためのセキュリティグループという説明が付きます。
  • インターフェイス VPC エンドポイント (AWS PrivateLink)。 スクリプトは、選択したリージョンと VPC の Amazon EI サービスに関連付けられている既存のエンドポイントを検索します。たとえば、us-west-2 リージョンの場合、スクリプトは、指定された VPC ID 内で amazonaws.us-west-2.elastic-inference.runtime という名前のエンドポイントを探します。  エンドポイントが見つからない場合、スクリプトはそれを作成します。また、Amazon EI によって要求されているように、スクリプトは VPC エンドポイントの以下の属性を「true」に設定します。
    • EnableDnsSupport
    • EnableDnsHostNames
    • 検出したエンドポイントに見つからない場合は、スクリプトはエンドポイントを変更して、SG と選択したサブネットを追加します。
  • スクリプトは、ユーザーが選択したオペレーティングシステムに基づいて最新の AWS DLAMI を検出します。
  • すべてのステップが成功すると、スクリプトはインスタンスを起動し、そのインスタンス ID をレポートします。
  • インスタンスが起動されて実行状態になると、スクリプトはパブリック DNS 名を取得しようとします。
  • インスタンスが実行中であっても、SSH 接続を受け入れる準備ができていない可能性があり、ユーザーはインスタンスが完全に初期化されるまで待つことを望むかもしれません。EC2 コンソールまたは AWS CLI を使用し、スクリプトによって新しく起動されたインスタンスに対してレポートされたインスタンス ID を使用して、初期化状態を照会することができます。

ツールを実行したときに予想されること

この例は、スクリプトを実行したときに何が予想されるかを示しています。

  • スクリプトを起動する。 スクリプトは、コマンドプロンプトから以下のように起動できます。
  • AWS リソースを作成または変更するには、$ python amazonei_setup.py –region us-west-2 –instance-type m5.xlargeAWS の認証情報が必要です。Boto3、Python 用 AWS SDK を使用します。AWS リソースを設定および管理できるために、スクリプトはユーザー認証情報を必要とします。スクリプトが適切な認証情報なしで実行されると、以下のエラーがレポートされます。
    $ python amazonei_setup.py --region us-west-2 --instance-type m5.xlarge
    Error setting up Amazon EI configuration - 
     Failed to retrieve VPC endpoints for us-west-2 : An error occurred (RequestExpired)
     when calling the DescribeVpcEndpointServices operation: Request has expired.

    解決策は、Amazon Boto3 ドキュメントに記載されている方法のいずれかを使用して AWS 認証情報を設定することです。認証情報が設定されると、スクリプトを続行できます。

  • オペレーティングシステムを選択する。 スクリプトは有益なメッセージを表示し、OS の選択を促します。また、「q」を入力するとスクリプトが終了することも示されます。「1」を選択すると、次のステップに進みます。
    $ python amazonei_setup.py --region us-west-2 --instance-type m5.xlarge
    
    このスクリプトは、Amazon Elastic Inference アクセラレータによって Amazon EC2 インスタンスを起動します。
    以下の機能を実行します。
     1.EI 対応の深層学習で事前設定された Deep Learning AMI 
     フレームワークを使用してインスタンスを起動します。
     2.インスタンスおよび VPC エンドポイント用のセキュリティグループを作成します。
     3.インスタンスが EI アクセラレータと通信するために 
     必要な VPC エンドポイントを作成します。
     4.アクセラレータに接続するために必要な権限を持つ IAM インスタンスの 
     ロールとポリシーを作成します。
    
     はじめに、インデックスを入力してインスタンスのオペレーティングシステムを選択します。
    
     0: Amazon Linux
     1: Ubuntu
    
    終了するには「q」を入力します。
    amazonei-wizard>
    
  • アクセラレータのサイズを選択する。 スクリプトは、Ubuntu 用の最新の DL AMI を見つけ、また 1 つのキーペアも見つけました。複数のキーペアが見つかった場合は、それらを一覧表示し、インデックスを入力して目的のキーペアを選択するようにユーザーに依頼します。  一般に、適格な入力が複数ある場合、スクリプトはそれらをインデックス付きリストとして表示し、ユーザーがそのインデックスを入力することで項目を選択できるようにします。このようにして、スクリプトはサポートされているアクセラレータのサイズを一覧表示し、ユーザーに選択させます。
    amazonei-wizard>1 
     使用するイメージ ID: ami-0027dfad6168539c7、イメージ名: Deep Learning AMI (Ubuntu) バージョン 21.2
     使用するインスタンスタイプ: m5.xlarge
     使用するキーペア: Efti-Default-KeyPair
    
    使用するアクセラレータタイプのインデックスを入力します。
    
     0: eia1.medium (1 GB のアクセラレータメモリ)
     1: eia1.large (2 GB のアクセラレータメモリ)
     2: eia1.xlarge (4 GB のアクセラレータメモリ)
    
    終了するには「q」を入力します。
    amazonei-wizard>
  • VPC を選択する。 示されるように、ユーザーがアクセラレータのサイズについてオプション「1」を選択し、スクリプトが選択されたアクセラレータのサイズを確認し、IAM ロールの検出に進みました。その後、利用可能な VPC のリストが提示されます。
    amazonei-wizard> 1 
     使用する Amazon EI アクセラレータのタイプ: eia1.large
    
     Amazon EI サービスに接続するために設定された IAM ロールを検出しました。名前 - Amazon-Elastic-Inference-Connect-Role、ARN - arn:aws:iam::326228132093:role/Amazon-Elastic-Inference-Connect-Role
    
    目的の VPC インデックスを入力して、使用する VPC を選択します。「0」を入力すると、デフォルトの VPC になります。
    
     0: VPC Id 'vpc-d7d218af'
     1: VPC Id 'vpc-0c2496c51925ff1be'
    
    終了するには「q」を入力します。
    amazonei-wizard>
  • インスタンスを起動する。 ユーザーが VPC ID を選択すると、スクリプトは、選択された VPC に関連付けられた一致する受信ルールを持つセキュリティグループを見つけ、選択された VPC ID に関連付けられたサブネットも 1 つ見つけました。さらに、Amazon EI サービス用の VPC エンドポイントを見つけました。スクリプトには EC2 インスタンスを起動するための詳細がすべて含まれているので、スクリプトはインスタンスを起動するために使用するすべてのパラメータをまとめます。
    amazonei-wizard>1 
     使用する VPC ID: vpc-0c2496c51925ff1be
     使用するセキュリティグループ: sg-00aec97685affb306
     使用するサブネット: subnet-04881d24764d6e73f
    
     Amazon EI サービス用に検出された VPC エンドポイント、ID: vpce-0d2942a8147305240
    
     スクリプトは、以下の設定で新しいインスタンスを起動します。続行するには「y」を入力します。
    
     アクセラレータのタイプ: eia1.large
     リージョン: us-west-2
     イメージ ID: ami-0027dfad6168539c7 - (Deep Learning AMI (Ubuntu) バージョン 21.2)
     インスタンスタイプ: m5.xlarge
     キーペア: Efti-Default-KeyPair
     セキュリティグループ ID: sg-00aec97685affb306
     サブネット ID: subnet-04881d24764d6e73f
     インスタンスプロファイル: Amazon-Elastic-Inference-Instance-Profile
    
    続行するには「y」を入力します。終了するには「q」を入力します。
    amazonei-wizard>
  • インスタンスを起動し、インスタンスが実行状態になるのを待ちます。 ユーザーが「y」と入力したので、スクリプトはインスタンスの起動に進みました。また、このスクリプトは、可能性がある SSH コマンドも表示しました。スクリプトは、OS の種類、選択したキーペア、パブリック DNS 名に基づいて SSH コマンドを推論します。実際のコマンドは、pem ファイルの場所によって異なります。このスクリプトは、インスタンスが実行状態であっても、インスタンスが SSH 経由ですぐにアクセスできない場合があることも警告します。インスタンスは完全に初期化する必要があります。具体的に言うと、SSH 接続を受け入れる前に SSH デーモンを起動する必要があります。pem ファイルが正しく配置されていれば、ユーザーはインスタンスにアクセスして、Amazon Elastic Inference の使用を続行できるはずです。
    amazonei-wizard>y
    
     インスタンスの起動 ..
    
     インスタンスを正常に起動しました。インスタンス ID は 'i-0969820364c038cca' です。
    
     インスタンスが実行状態になるのを待っています ...
    
     次のサンプル SSH コマンドを使用して、インスタンスに接続することができます: ssh -i "Efti-Default-KeyPair.pem" ubuntu@ec2-52-13-194-188.us-west-2.compute.amazonaws.com
    
    
     注意: インスタンスが完全に初期化され、SSH 接続を受け入れる準備ができるまで待ちます。EC2 コンソールでインスタンスのステータスを確認することができます。
     また、プライベートキー「Efti-Default-KeyPair.pem」も見つけてください。
    
    amazon-elastic-inference-tools $ 

まとめ

設定スクリプトは、EI による EC2 インスタンスの起動を簡単にします。これにより、確実にすべての設定が正しく行われ、EI を使用するために必要な権限でインスタンスが起動されます。このブログ記事についてご意見がありましたら、このページのコメント欄をご利用ください。


著者について

Eftiquar Shaikh は、AWS AI のシニアソフトウェアエンジニアです。彼は、AI 分野で AWS のサービスを構築することに取り組んでいます。プログラミングをしていないときは、読書、ランニング、旅行をするのが好きです。

 

 

 

 

Satadal Bhattacharjee は、AWS AI の主席プロダクトマネージャーです。彼は、SageMaker Neo、AWS Deep Learning AMI、AWS Elastic Inference などのプロジェクトに取り組んでいる Machine Learning Engine PM チームを率いています。仕事以外の楽しみとして、Satadal はハイキングをしたり、ロボットチームを指導したり、彼の家族や友人と過ごすのが大好きです。