Skip to content
Ryo Nakamaru edited this page Jul 22, 2017 · 15 revisions

1. EC2 インスタンスの起動

1.1 マネジメントコンソールにログイン

https://console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Instances

  • このハンズオンでは無料枠ではないインスタンスタイプを利用します
  • クーポンを利用する際は該当のアカウントであることを確認しましょう

1.2 マーケットプレイスで AMI を検索

https://aws.amazon.com/marketplace/pp/B01M0AXXQB

  • AWS 公式の深層学習用 AMI
  • continue を押しましょう

1.3 EC2 コンソールの起動

  • ポートなどを調整したいので Manual Launch を選択
  • AMI のバージョンが 2.3 であることを確認して
  • Asia Pacific (Tokyo) の Launch with EC2 Console を押します

1.4 GPU インスタンスの指定

  • p2.xlarge を選択し
  • 次の手順: インスタンスの詳細を設定 に進みましょう

1.5 パブリック IP などの確認

  • 自動割り当てパブリック IP有効 であることを確認
  • EC2 に慣れている方は スポットインスタンスのリクエスト もどうぞ
  • 次の手順: ストレージの追加 に進みましょう

1.6 公開ポートの設定

  • ストレージタグ の設定はそのまま次の手順へ
  • ルールの追加 から、80 番ポートを追加
  • 確認と作成 を押します

1.7 起動インスタンスの確認

  • Deep Learning AMI
  • p2.xlarge
  • 22 / 80 番ポートの解放
  • 作成 を押します

1.8 SSH 鍵のダウンロード

  • 新しいキーペアの作成 を選択します
  • 適当な名前をつけて キーペアのダウンロード を押しましょう
  • キーペアが保存できたら インスタンスの作成 を押します

2. TensorFlow 動作確認

2.1 サーバのパブリック IP の確認

起動したインスタンスを選択し、パプリック IP アドレスを確認します。 https://console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Instances

2.2 サーバへ SSH 接続

  • Mac ならターミナル、Windows なら TeraTerm などを起動
  • ダウンロードした pem を使って SSH ログイン
  • 不慣れな方は こちら をご覧ください..
  • ユーザ名は ec2-user です
  • <ec2.public.ip.address> を 2.1 で確認した IP アドレスと置き換えてください
$ chmod 400 keypair.pem
$ ssh -i keypair.pem ec2-user@<ec2.public.ip.address>

2.3 GPU の確認

  • Deep Learning AMI はなんと NVIDIA ドライバもインストール済!
  • 以下のコマンドで GPU の状況を確認してみましょう
[ec2-user ~]$ nvidia-smi

Thu Jul 20 12:00:00 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.57                 Driver Version: 367.57                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GRID K520           On   | 0000:00:03.0     Off |                  N/A |
| N/A   31C    P8    17W / 125W |      0MiB /  4036MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

2.4 GPU 最適化

p2, g3 系インスタンスで可能な GPU 設定の最適化を行います。
設定を永続化、自動ブースト機能を無効に、そしてクロック速度を最大周波数に設定します。

[ec2-user ~]$ sudo nvidia-smi -pm 1
[ec2-user ~]$ sudo nvidia-smi --auto-boost-default=0
[ec2-user ~]$ sudo nvidia-smi -ac 2505,875

2.5 TensorFlow の動作確認

プリインストールされた TensorFlow も動作を確認してみましょう。

[ec2-user ~]$ python -c 'import tensorflow as tf; print(tf.__version__)'

1.1.0

3. コンテナ関連のインストール

3.1 Docker インストール

[ec2-user ~]$ sudo yum update -y
[ec2-user ~]$ sudo yum install -y docker
[ec2-user ~]$ sudo service docker start
[ec2-user ~]$ sudo usermod -a -G docker ec2-user
[ec2-user ~]$ exit

$ ssh -i keypair.pem ec2-user@<ec2.public.ip.address>

[ec2-user ~]$ docker version

3.2 nvidia-docker をインストール

[ec2-user ~]$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1_amd64.tar.xz
[ec2-user ~]$ sudo tar --strip-components=1 -C /usr/bin -xvf /tmp/nvidia-docker*.tar.xz && rm /tmp/nvidia-docker*.tar.xz
[ec2-user ~]$ sudo -b nohup nvidia-docker-plugin > /tmp/nvidia-docker.log
[ec2-user ~]$ #(もう一度 Enter キーを押す)

4. 課題のダウンロードと Jupyter の起動

4.1 課題を git clone

[ec2-user ~]$ git clone https://github.com/supinf/dl-handson.git
[ec2-user ~]$ cd dl-handson/kaggle/kakauandme/tensorflow-deep-nn

4.2 学習 / テストデータのダウンロード

以下、本来は Kaggle で利用規約などに同意し、ログインした状態で取得するファイルです。
後から復習する際は、ぜひ正規の手順でデータをダウンロードしてください。

[ec2-user ~]$ wget https://s3-ap-northeast-1.amazonaws.com/jawsug-ai/train.csv
[ec2-user ~]$ wget https://s3-ap-northeast-1.amazonaws.com/jawsug-ai/test.csv

4.3 コンテナに課題をマウントして Jupyter を起動!

[ec2-user ~]$ nvidia-docker run -it -p 80:8888 -v $(pwd):/notebooks \
                  tensorflow/tensorflow:1.2.0-gpu-py3

1.2.0-gpu-py3: Pulling from tensorflow/tensorflow
bd97b43c27e3: Pull complete
(中略)
[I 19:47:14.139 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 19:47:14.140 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=909a0dc3eb59cf795990321f6c847f6846998f17bb119afd

4.4 Jupyter notebook を開き、学習開始!

  • 2.1 で確認した EC2 のパブリック IP アドレスをブラウザで開く
  • 4.3 の出力ログの最終行にある token を使ってログイン
  • handson.ipynb を開き、学習を開始します

4.5 推論結果のダウンロード

submission_softmax.csv をダウンロードして、競技会へ Submit してみましょう!

5. 犬猫問題

5.1 前の課題の終了と、課題の位置に移動

[ec2-user ~]$ #( Ctrl + C で Jupyter notebook を終了) 
[ec2-user ~]$ cd ~/dl-handson/kaggle/ornew/dogs-vs-cats-redux/

5.2 学習 / テストデータのダウンロード

以下も、本来は Kaggle で利用規約などに同意し、ログインした状態で取得するファイルです。
後から復習する際はやはり、ぜひ正規の手順でデータをダウンロードしてください。

[ec2-user ~]$ wget https://s3-ap-northeast-1.amazonaws.com/jawsug-ai/train.zip
[ec2-user ~]$ wget https://s3-ap-northeast-1.amazonaws.com/jawsug-ai/test.zip
[ec2-user ~]$ unzip -q train.zip
[ec2-user ~]$ unzip -q test.zip

5.3 コンテナに課題をマウントして Jupyter を起動!

[ec2-user ~]$ pushd prod
[ec2-user ~]$ docker build -t keras:2.0 .
[ec2-user ~]$ popd
[ec2-user ~]$ nvidia-docker run -it -p 80:8888 -v $(pwd):/notebooks keras:2.0

[I 08:33:53.358 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 08:33:53.379 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 08:33:53.389 NotebookApp] Serving notebooks from local directory: /notebooks
[I 08:33:53.389 NotebookApp] 0 active kernels
[I 08:33:53.389 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=b962fed38097dcd24f7a7114a77520f49335bdcdc8eead55
[I 08:33:53.389 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 08:33:53.389 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=b962fed38097dcd24f7a7114a77520f49335bdcdc8eead55

5.4 Jupyter notebook を開き、学習開始!

  • 2.1 で確認した EC2 のパブリック IP アドレスをブラウザで開く
  • 5.3 の出力ログの最終行にある token を使ってログイン
  • handson.ipynb を開き、学習を開始します