2時間以内でawsにkaggleの分析(訓練)できる環境(jupyter notebook)を作る!

このブログでは、こんな事がわかります!

  1. awsに深層学習(Deep Learning)に特化したGPUサーバー(インスタンス)の作り方がわかる
  2. awsのインスタンス上でjupyter notebookの起動方法がわかる
  3. kaggle apiを使ってから学習に必要なデータの取り出し方がわかる

今回の一枚は、以前、撮影させていただいたポートレートモデルの「ゆっこ様」

概要

kaggleのコンペの締め切りが、数日と近づいている状況で、分析用のサーバーを借りたいと思うことがあると思います。

しかし、サーバー選び、python、機械学習用のライブラリーのインストールなどやっていたら、それだけで1日を使ってしまいます。

今回は、awsを使ってサーバー選び、ライブラリーのインストール、jupyter notebookを使ってkaggleのカーネルと同様の環境を作る方法を紹介します。

前提条件

・awsのアカウントをすでに作成済みであること

・基本的なlinuxの操作ができること

awsでインスタンスを作る準備をする

GPUが使えるインスタンスの申請をする

まず、GPUが使えるインスタンスを用意するために、awsの人に許可を取ります。

GPUが使えるインスタンスは、awsのアカウントを作成しただけでは使用できません。

実際に、GPUを搭載した「g4dn.xlarge」インスタンスを起動しようとしたら、

以下のようなエラーが出力されて、インスタンスの作成に失敗します。

GPUが使用できる「G instances」の制限の緩和リクエストを送信します。

手順を以下の通り。

以降の手順は、値段が比較的安めの(1時間1ドル以内)GPUインスタンスである、

「g4dn.xlarge」インスタンスを立ち上げる例で話を進めます。

インスタンス建てる前の手順

1.「制限」を選択します。

管理画面から「制限」を選択します。

2.「制限緩和のリクエスト」を実施

「All G instances のオンデマンドを実行中」を選択し「制限緩和のリクエスト」を押します。

3.申請を送信する

「サービスの緩和」を選びます。

画面にしたがって、申請理由は「機械学習で使用するため」などと記載し申請します。

!!ここ重要!!

緩和対象のGPUの個数を聞かれるのですが、ここで注意しないといけないことは、個数は、「サーバーの台数」ではなく「vCPU」の数で指定します。

インスタンス「g4dn.xlarge」の場合は、vcpuが4つあるため、4つで申請します。

以上で申請作業は終わりです。

早ければ、1時間以内に、許可が下りるかの連絡が日本語で来るので、それまで待ちます。

インスタンスを作成する

ここでは、深層学習(Deep Learning)に特化したインスタンス作成方法を解説します。

インスタンスを作成するポイント

申請が無事に通ったら、GPUインスタンスを起動します。

このブログでは、インスタンス「g4dn.xlarge」を起動する例で解説します。

AWSのイメージには、すでに機械学習用(深層学習)のライブラリーがインストールされているものがあります。それらを利用すれば、python,pandas,numpy,pytorch,tensorflowなどの機械学習関係のライブラリがインストールされているため、環境構築の時間がかなり短縮されます。

kaggleで利用するなら、osのみインストールされているインスタンスを起動してdockerからkaggleイメージを入れても良いのですが、dockerのところでハマったりすると余計に時間がかかってしまうため、ここではawsが用意してくれた深層学習イメージを利用しています。

さらに、GPUを使うためのcudaなどのドライバーもすでにインストールされているので、ドライバーインストールでハマる可能性が一気に少なくなります。

インスタンスを作製すると、sshなどで接続する際の鍵ファイルが渡されるので、大切に保存すること。

インスタンスを作成する手順

インスタンスを作成する

1. 「インスタンスの作成」ボタンを押します。

2. マシンイメージから「Deep Learning AMI (Ubuntu 18.04) Version 31.0」を選択します

3.「インスタンスタイプの選択」にて「g4dn.xlarge」を選びます。

4.必要があればいかを設定します。

・セキュリティグループ(分析のみならばsshだけで十分だと思います)

・ストレージの追加(何もしなれば100GBあるため十分足りると思う)

5.「確認と作成」ボタンを押してインスタンスを立ち上げます。

何がインストールされているか確認してみる

インスタンスの起動ができたら、sshで接続して、何がインストールされているか、コマンドを入力して確認してみましょう。

■pythonのバージョン

$python –version

Python 3.7.7

■インストールされているライブラリーの確認

$pip list

anaconda-client 1.7.2

anaconda-navigator 1.9.12

anaconda-project 0.8.3

Flask 1.1.1

jupyter 1.0.0

pandas 1.0.3

numpy 1.18.1

■condaによる仮想環境の確認

複数の環境があり、環境を切り替えることによりtensorflow、pytorchを使うことができます。

pytorchを使いたい場合は、以下のコマンドを入力して、pytorchがインストールされている環境に切り替えます。

$conda activate pytorch_p36

jupyter notebookを動かす

深層学習イメージであれば、jupyter notebookが最初からインストールされています。

ここでは、jupyter notebookを動かす手順を記載します。

jupyter notebookの起動まで

jupyter notebookの起動まで

1. opensslで鍵を作成する

インスタンスにsshなどでログインした後、jupyter notebookにssl(https)で接続できるように、opensslを使って鍵ファイルを作成します。

以下、opensslを使った鍵作成例です。

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

2. jupyter notebookを起動する

先ほど作製した鍵ファイルを利用して、jupyter notebookを起動します。

jupyter notebook –certfile=~/ssl/mycert.pem –keyfile ~/ssl/mykey.key

これで、httpsでjupyter notebookにログインできるところまで進むことができました。

デフォルトで8888ポートを利用します。

自分のPCでjupyter notebookを開けるようにする

次に自分のPCでjupyter notebookを開けるようにします。

手順は以下の通り

1.フォワードで接続

ssh -i ~/.ssh/kaggle-key.pem -N -f -L 8888:localhost:8888 ubuntu@3.112.254.254

ポイントは

・秘密鍵kaggle-key.pemを使ってインスタンスに接続

・ユーザ名はubuntu

・インスタンスのグローバルIDは「3.112.254.254」

・インスタンス側の8888ポートとローカル(自分のPC)側の8888ポートを紐付けます

2. ブラウザーの設定

MacPCなどで、以下のURLをブラウザーに入力します。

https://localhost:8888

ポイントは、「http」でなく「https」であることです。

ブラウザーによっては、セキュリティの関係で表示されないことがあります。

クロムの例で解説します。

3. localhostのみhttpsを許可する

クロムでURLを入力するところで以下の文字列を入力する。

chrome://flags/#allow-insecure-localhost

4. 一番上の「Allow invalid certificates for resources loaded from localhost.」をEnableに変更する。

これらの設定をすることで、自分のPCのブラウザーからインスタンス側で起動されている、jupyter notebookを使うことができます。

参考資料:

ChromeのSSL警告を、localhostの時だけ表示しないようにする

Kaggleのデータセットなどを簡単に持ち出すようにする

最後にkaggle apiの設定です。

apiを使えるようにすると、コマンド一つでkaggleのデータセットをダウンロードできたり、また、データのアップロードなどができて大変便利です。

apiのインストールは、以下のコマンドだけで実施可能です。

$pip install kaggle

データセットのダウンロードのコマンドは、各コンペの「dataset」のところで確認できます。

余談・なぜGCPを使わなかったのか?

なぜAWSなの?GCP(Google Cloud Platform)を使ったほうが安上がりでは?

そのように考えている人も多いと思います。

理由は、GCPの場合は、無料枠ではGPUは使えないのです。

無料枠で使おうとしたら、数秒後に「割り当てできない」という旨のメッセージが飛んできます。

以上、awsで深層学習環境を作る方法でした!

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR