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 アクセラレータを数分で起動できるようになります。このブログ記事では、スクリプトの使用方法、スクリプトの機能、実行時に予想されることについて説明します。
高レベルで言うと、このスクリプトは以下のことを行います。
- AWS Elastic Inference サービスに接続できるようにする IAM ポリシーを使用して、インスタンスの IAM ロールを作成します。
- インスタンスがアクセラレータと通信できるようにするために必要な入力ルールと出力ルールを使用してセキュリティグループを作成します。
- 目的のサブネット内に AWS PrivateLink VPC エンドポイントを作成します。
- 選択したオペレーティングシステム用の最新の AWS Deep Learning AMI (DLAMI) を使用して、EI アクセラレータで目的の EC2 インスタンスを起動します。
前提条件
EI を設定するには、以下でリンクされているスクリプトを実行します。以下のエンティティに依存しています。
- ツールを実行する予定のローカルマシンにインストールされている Python 3。
- Python 用 AWS SDK (Boto3)。
- インスタンスを起動しているリージョンの Amazon VPC (デフォルトの VPC でも構いません)。
- インスタンスを起動したいサブネット。
- EC2 キーペア。
- AWS 認証情報。.
これらを配置したら、GitHub から amazonei_setup.py スクリプトをローカルマシンにダウンロードし、次のコマンドを使用して端末から実行します。
ツールが作成するもの
スクリプトは以下の AWS リソースを作成します。
- Amazon EI ポリシーを持つインスタンスロール。 このロールは、スクリプトが最初に実行されるときに作成されます。以降のすべての実行では、スクリプトはこの IAM ロールを再利用します。このロールを削除した場合、スクリプトは次回の実行時にロールを再作成します。IAM ロールには、以下のプロパティがあります。
- ロール名: Amazon-Elastic-Inference-Connect-Role
- ポリシー名: Amazon-Elastic-Inference-Connect-Policy
- インスタンスプロファイル名: Amazon-Elastic-Inference-Instance-Profile
ポリシーの説明は以下のとおりです。
- セキュリティグループ (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 リソースを設定および管理できるために、スクリプトはユーザー認証情報を必要とします。スクリプトが適切な認証情報なしで実行されると、以下のエラーがレポートされます。
解決策は、Amazon Boto3 ドキュメントに記載されている方法のいずれかを使用して AWS 認証情報を設定することです。認証情報が設定されると、スクリプトを続行できます。
- オペレーティングシステムを選択する。 スクリプトは有益なメッセージを表示し、OS の選択を促します。また、「q」を入力するとスクリプトが終了することも示されます。「1」を選択すると、次のステップに進みます。
- アクセラレータのサイズを選択する。 スクリプトは、Ubuntu 用の最新の DL AMI を見つけ、また 1 つのキーペアも見つけました。複数のキーペアが見つかった場合は、それらを一覧表示し、インデックスを入力して目的のキーペアを選択するようにユーザーに依頼します。 一般に、適格な入力が複数ある場合、スクリプトはそれらをインデックス付きリストとして表示し、ユーザーがそのインデックスを入力することで項目を選択できるようにします。このようにして、スクリプトはサポートされているアクセラレータのサイズを一覧表示し、ユーザーに選択させます。
- VPC を選択する。 示されるように、ユーザーがアクセラレータのサイズについてオプション「1」を選択し、スクリプトが選択されたアクセラレータのサイズを確認し、IAM ロールの検出に進みました。その後、利用可能な VPC のリストが提示されます。
- インスタンスを起動する。 ユーザーが VPC ID を選択すると、スクリプトは、選択された VPC に関連付けられた一致する受信ルールを持つセキュリティグループを見つけ、選択された VPC ID に関連付けられたサブネットも 1 つ見つけました。さらに、Amazon EI サービス用の VPC エンドポイントを見つけました。スクリプトには EC2 インスタンスを起動するための詳細がすべて含まれているので、スクリプトはインスタンスを起動するために使用するすべてのパラメータをまとめます。
- インスタンスを起動し、インスタンスが実行状態になるのを待ちます。 ユーザーが「y」と入力したので、スクリプトはインスタンスの起動に進みました。また、このスクリプトは、可能性がある SSH コマンドも表示しました。スクリプトは、OS の種類、選択したキーペア、パブリック DNS 名に基づいて SSH コマンドを推論します。実際のコマンドは、pem ファイルの場所によって異なります。このスクリプトは、インスタンスが実行状態であっても、インスタンスが SSH 経由ですぐにアクセスできない場合があることも警告します。インスタンスは完全に初期化する必要があります。具体的に言うと、SSH 接続を受け入れる前に SSH デーモンを起動する必要があります。pem ファイルが正しく配置されていれば、ユーザーはインスタンスにアクセスして、Amazon Elastic Inference の使用を続行できるはずです。
まとめ
設定スクリプトは、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 はハイキングをしたり、ロボットチームを指導したり、彼の家族や友人と過ごすのが大好きです。