前回はAWS Deep Learning AMIs(以下、深層学習AMI)の概要について解説しました。今回はAWS社が公開するチュートリアル「AWS 深層学習AMIを起動する」を利用して、実際に深層学習AMIを使ってみたいと思います。

下記を理解することを目標に解説をしていきます。

  • 深層学習AMIの基本的な使い方がわかる。

→連載「AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~」の過去回はこちらを参照。

注意事項:チュートリアルに掲載されている画面イメージ

AWSマネジメントコンソールのアップデートがあったため、本稿で使用する画面イメージは上記のチュートリアルに掲載されている画面イメージと異なる点に注意してください。

深層学習AMIを実際に使ってみる

今回利用するチュートリアルは、大きく以下の5つのステップで構成されています。

ステップ 概要 詳細
1 EC2コンソールを開く AWSマネジメントコンソールでEC2のコンソール画面にアクセスする
2 インスタンスを設定する 深層学習AMIを選択して、EC2 インスタンスを作成する
3 インスタンスに接続する 利用者のPCからSSHで、ステップ2で作成したEC2インスタンスに接続する
4 Jupyter Labにアクセスする 利用者のPCのWebブラウザから「Jupyter Lab」にアクセスする
5 インスタンスを終了する チュートリアルで作成したリソースを削除する

順に実行することで、AWSマネジメントコンソールで深層学習AMIからAmazon EC2(以下、EC2)のインスタンスを作成し、Jupyter Notebookにアクセスするところまでを体験できます。

しかし、今回利用するAMIにはJupyter Notebookではなく、「Jupyter Lab」がプリインストールされている点に注意してください。Jupyter LabはJupyter Notebookの後継ツールにあたり、機械学習の開発でよく利用されます。本稿では、Jupyter Labと表記します。

注意事項:チュートリアルの実施で発生する課金

本稿の内容は、数ドル(数百円)程度の課金が発生する可能性があります。EC2インスタンスは停止状態にすれば課金を止められますが、EBSボリュームは確保した容量に対して課金されます。完全に課金を停止したい場合は「ステップ5:インスタンスを終了する」までやり切り、リソースを削除してください。

事前準備

本稿では管理者権限(AdministratorAccess)を持つIAMユーザーにて作業を進めます。初めてIAMユーザーを作成する場合は「IAMの使用開始」などを参考にしてください。

ステップ1:EC2コンソールを開く

AWSマネジメントコンソールにIAMユーザーでログインします。本稿では東京リージョンで作業を進めますので、画面右上のリージョンの表記が「東京」となっていることを確認します。

  • AWSマネジメントコンソールのトップ画面

    AWSマネジメントコンソールのトップ画面

「東京」以外となっている場合は、下図のように「アジアパシフィック(東京) ap-northeast-1」を選択します。

  • リージョンの選択画面

    リージョンの選択画面

画面上部にある検索バーに「EC2」と入力し、検索結果の「EC2」を選択します。

  • EC2の検索結果画面

    EC2の検索結果画面

EC2のダッシュボード画面に遷移したことを確認します。

  • EC2のダッシュボード画面

    EC2のダッシュボード画面

ステップ2:インスタンスを設定する

EC2のダッシュボード画面中央の「インスタンスを起動」を選択します。

  • EC2のダッシュボード画面

    EC2のダッシュボード画面

「インスタンスを起動」というEC2インスタンスの設定画面に遷移します。ここから必要な設定をしていきます。

まずは「名前とタグ」で、これから作成するEC2インスタンスの名前を設定します。任意の名前で問題ないですが、ここでは「deep-learning-ami-demo」とします。

  • EC2インスタンスの作成画面(名前とタグ)

    EC2インスタンスの作成画面(名前とタグ)

次に、「アプリケーションおよびOSイメージ(Amazonマシンイメージ)」で、これから作成するEC2インスタンスで利用するAMI(Amazonマシンイメージ)を設定します。矢印で示した検索ボックスにキーワードを入れると、該当するAMIを検索できます。

  • EC2インスタンスの作成画面(AMIの設定)

    EC2インスタンスの作成画面(AMIの設定)

深層学習AMIは「deep learning」と入力すると候補を抽出できます。今回は赤枠に示した「クイックスタートAMI」で提示された「Deep Learning AMI GPU PyTorch 1.13.0 (Ubuntu 20.04) 20221110」を利用して進めます。

  • EC2インスタンスの作成画面(AMIの選択)

    EC2インスタンスの作成画面(AMIの選択)

今回は利用しませんが、「AWS Marketplace AMI」や「コミュニティAMI」にさまざまなAMIが用意されているので、利用者の要件に合わせて利用できます。ただし、セキュリティの観点でAMIの公開元が信頼できる企業や団体であることを確認した上で利用してください。

  • EC2インスタンスの作成画面(AWS MarketplaceのAMIの例)

    EC2インスタンスの作成画面(AWS MarketplaceのAMIの例)

次に、「インスタンスタイプ」で、作成するEC2インスタンスのインスタンスタイプを設定します。デフォルトでは「t2.micro」が選択されていますが、ここではチュートリアルにしたがって「c5.large」を選択して進めます。

  • EC2インスタンスの作成画面(AWS MarketplaceのAMIの例)

    EC2インスタンスの作成画面(インスタンスタイプの選択)

注意事項:GPU搭載インスタンスのコスト

深層学習ではGPUを利用するケースが多いですが、今回利用する「c5.large」は CPU のみが搭載されたインスタンスで GPU は搭載されていません。GPUが搭載されているインスタンスタイプには「高速コンピューティング」があり、「P(p)」や「G(g)」で表記されています。

例えば、Pシリーズで比較的小さめの「p3.2xlarge」は、「c5.large」の約40倍のコストがかかりますので、動作させる際は注意してください。

  • c5.large: 1 時間当たり 0.107 ドル
  • p3.2xlarge: 1 時間当たり 4.194 ドル

各インスタンスタイプの料金の詳細は「Amazon EC2オンデマンド料金」を参照してください。

次に、必要に応じて「キーペア(ログイン)」で、EC2インスタンスへのログイン時に利用するキーペアを作成します。既存のキーペアを利用することも可能です。

  • EC2インスタンスの作成画面(キーペアの選択)

    EC2インスタンスの作成画面(キーペアの選択)

ここでは、キーペア名を「deep-learning-ami-demo」とし、下図の設定でキーペアを作成します。作成に成功するとキーペアがダウンロードされるため、適当なフォルダに保存します。このキーペアは後続の動作確認で利用します。

  • EC2インスタンスの作成画面(キーペアの詳細設定)

    EC2インスタンスの作成画面(キーペアの詳細設定)

次に、「ネットワーク設定」で、EC2インスタンスを配置するVPC、サブネット、セキュリティグループ、IPアドレスなどを設定します。

今回は簡単な動作確認のため、原則としてデフォルト設定のまま進めることとします。デフォルトVPCを利用して、EC2インスタンスにはパブリックIPアドレスを付与します。

後続の動作確認でSSHによるログイン確認を行うため、セキュリティグループには任意の接続元からのアクセスを許可します。セキュリティが気になる場合は、接続元を開発拠点のIPアドレスに制約するなど設定すると良いでしょう。

  • EC2インスタンスの作成画面(ネットワークの設定)

    EC2インスタンスの作成画面(ネットワークの設定)

最後に、「ストレージを設定」と「高度な設定」はデフォルト設定のままとします。ここまでの設定内容を確認して、「インスタンスを起動」を選択します。

  • EC2インスタンスの作成画面(その他の設定)

    EC2インスタンスの作成画面(その他の設定)

数分待ち、「インスタンスの状態」と「ステータスチェック」が下記の状態となったことを確認します。

  • インスタンスの状態:実行中
  • ステータスチェック:2/2 のチェックに合格しました

赤枠で示した「パブリック IPv4 DNS」は後続の動作確認で利用するのでコピーして、メモ帳などに貼り付けておきます。先頭の□をクリックすると簡単にコピーできます。

  • EC2インスタンスの作成完了画面

    EC2インスタンスの作成完了画面

ステップ3:インスタンスに接続する

ステップ3は、PCのコマンド操作となります。macOS の場合は「ターミナル」、Windows の場合は「Git for Windows(Git Bash)」などのコマンド操作ができるツールを利用してください。

ツールを立ち上げて、下記のコマンドを実行します。「<>」の部分をご自身の環境に合わせて修正してください。

cd  // ①
chmod 0400    // ②
ssh -L localhost:8888:localhost:8888 -i  ubuntu@   // ③

それぞれのコマンドの意味は以下の通りです。

①キーペアが格納されているフォルダに移動する
②キーペアのファイルの権限を変更する
③PCの8888番ポートをEC2インスタンスの8888番ポートにSSHで転送(SSH ポートフォワーディング)する

コマンドを実行すると、SSHの初回接続時に問われる以下の質問が表示されるので「yes」と入力して「Enter」キーを押下します。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

ログインに成功すると、下図のようなメッセージが表示されます。さまざまな情報が出力されていますが、作成したEC2インスタンスの情報や使い方などが示されています。

  • EC2インスタンスへのログイン完了後の画面

    EC2インスタンスへのログイン完了後の画面

今回選択したAMIにはAnacondaの仮想環境でPyTorchの実行環境が実装されています。この仮想環境を利用するためには、メッセージに記載されているようにsource activate pytorchコマンドを実行する必要があります。

現在実行している仮想環境は、以下のいずれかの方法で確認できます。

  • コマンドラインの先頭の(pytorch)を確認する -コマンド「conda info -e」を実行して「pytorch」側に「*」があることを確認する
  • 現在実行している仮想環境の確認

    現在実行している仮想環境の確認

冒頭で説明した通り、この仮想環境にはJupyter Labがプリインストールされています。ステップ4でWebブラウザからJupyter Labに接続しますが、Jupyter Labのプロセスは自動で起動しません。そのため、以下のコマンドでJupyter Labを起動します。

jupyter lab

下図のようなメッセージが表示され、矢印で示したようなURL(\http://localhost:8888/lab?token= …​ 31f7)が表示されたら成功です。このURLはJupyter Labの起動ごとに変わります。ステップ4で利用するため、コピーしてメモ帳などに貼り付けておきます。

  • Jupyter Labの起動の成功画面

    Jupyter Labの起動の成功画面

ステップ4:Jupyter Labにアクセスする

PCのWebブラウザからステップ3の最後に確認したURL(\http://localhost:8888/lab?token= …​ 31f7)にアクセスします。Jupyter Labへのアクセスに成功すると、下図のような画面が表示されます。

  • Jupyter Labのトップ画面

    Jupyter Labのトップ画面

AWSはGitHubでサンプルアプリケーションを多数公開しています。 ノートブックを新規作成してゼロからアプリケーションを構築することも可能ですが、上記のサンプルノートブックを利用しても良いでしょう。

ステップ5:インスタンスを終了する

ここまでで深層学習AMIを簡単に体験できました。余計な課金を防ぐためにリソースの削除を行います。

Jupyter Labはコマンド操作のツールで「control + c」で停止できます。その後、exit コマンドで EC2インスタンスからログアウトします。

AWSマネジメントコンソールのインスタンスの画面を表示します。今回作成したインスタンスのチェックボックスにチェックを入れて、右上の「インスタンスの状態」から「インスタンスを終了」を選択します。

  • インスタンスの画面

    インスタンスの画面

インスタンスの終了(削除)を確認する画面が表示されます。対象が間違っていないかを確認して、「終了」を選択します。

  • インスタンスの終了の確認画面

    インスタンスの終了の確認画面

数分待ち、「インスタンスの状態」が「終了済み」となったら削除完了です。

  • インスタンスの削除の完了画面

    インスタンスの削除の完了画面

* * *

今回は、深層学習AMIの基本的な使い方について解説しました。と言っても、深層学習AMIを選択してEC2インスタンスを構築しただけであり、通常のEC2インスタンスの作成手順と特に変わりません。これはあくまでも最小限の内容なので、ここから利用者の業務要件などに合わせてカスタマイズして利用してください。

著者紹介


菊地 貴彰 (KIKUCHI Takaaki)
株式会社NTTデータシステム技術本部 クラウド技術部

大学・大学院では、機械学習を専攻。ベイズ的枠組みを用いて、複数の遺伝子のデータから遺伝子どうしの相互作用ネットワークの推定に関する研究を行った。 株式会社NTTデータに入社後は、法人や金融のシステム開発のシステム基盤担当としてキャリアを積み、 現在はデジタル技術やAgile開発を専門に扱う組織でシステム開発全般を担当する。
2019, 2020 APN AWS Top Engineers, Japan APN Ambassador 2020, 2021に選出。

本連載の内容に対するご意見・ご質問はtwitter: @kikuchitk7まで。