pyhaya’s diary

プログラミング、特にPythonについての記事を書きます。Djangoや機械学習などホットな話題をわかりやすく説明していきたいと思います。

fastai の Deep Learning 本(Draft)を実行する環境をGCPでそろえる

最近、fastai が深層学習の本のドラフトを GitHub で公開して話題になりました。
github.com

中身を見てみると、Jupyter Notebook 形式で書かれており、説明を読みながらその場で実行することが可能になっておりすごく便利そうです。この記事では、この良質な教材を使って深層学習を勉強するための環境構築について書きます。

構築する環境の概要

深層学習を学ぶにあたって一番のボトルネックとなるのがマシンスペックです。学習が進むにつれて GPU がなければ実行が遅すぎる、もしくはメモリが足りなくてそもそも実行できないという例が出てきます。

実際に教材のイントロダクションにも以下のように GPU を用いることが強く推奨されています。

01_intro.ipynb

Getting a GPU deep learning server

To do nearly everything in this book, you'll need access to a computer with an NVIDIA GPU (unfortunately other brands of GPU are not fully supported by the main deep learning libraries). However, we don't recommend you buy one; in fact, even if you already have one, we don't suggest you use it just yet! Setting up a computer takes time and energy, and you want all your energy to focus on deep learning right now. Therefore, we instead suggest you rent access to a computer that already has everything you need preinstalled and ready to go. Costs can be as little as US$0.25 per hour while you're using it, and some options are even free.

ここにも書いてあるように NVIDIA GPU を買ってくる必要はなく、クラウドサービスを利用する方が簡単に、かつ安く環境を構築することができます。私は NVIDIA の RTX 2080 をもっているので最初はこれでやろうと思っていたのですが結構最初のところでメモリが足りないと怒られたのでクラウドサービスを利用することにしました。そこでこの記事では以下のような環境構築を行います。

環境構築

下準備

では早速、環境構築を行っていきます。GCP を使うので課金を有効にしておきます。
cloud.google.com

また、GPU も使うので GPU の割り当ての設定も確認しておきます。
cloud.google.com

何もしていない状況だと GPU の最大割り当て数が 0 になっていると思うのでこうなっている場合には上のリンクに書いてある手順で増やしてもらえるように申請します。

インスタンスの作成

これらの設定を行った後には、インスタンスの作成を行っていきます。GCP のページの左メニューから「Compute Engine」-> 「VM インスタンス」を選びます。
f:id:pyhaya:20200304081754p:plain

VM インスタンスのページの左下に「Marketplace」があると思うので、そこをクリックして出てきたウィンドウ内で「deep learning vm」を検索します。するとこんな感じのものが検索にかかると思います。
f:id:pyhaya:20200304082156p:plain

「LAUNCH」 をクリックしてインスタンスの作成画面に遷移すると、マシンスペック等を調整する画面が出てきます。こんな感じです。

f:id:pyhaya:20200304082401p:plain

名前を適当にセットして、GPU の種類を選択します。どれを使うかは財布と相談しましょう(Tesla T4 あたりがいいかも)。1か月の推定料金は右に出ますがこれは24時間、1か月の間インスタンスを使い続けた場合の料金みたい(?)なので個人的な勉強用途の場合にはもう少し安くなると思います。画像にあるような Tesla K80 を使った場合には 一時間料金は $0.4 らしいので一日2時間、週5日使うとおおよそ $16 くらいかと思います。CPUやリージョンの変更もできますが、CPU の構成やリージョンによっては特定の GPU を使えない場合もあるので注意しましょう。

Framework はこの fastai の教材の勉強用には 「PyTorch 1.3 + fast.ai (CUDA 10.0)」を選びましょう。ただし教材では 「PyTorch 1.4」を使うのでインスタンス作成後にアップデートします(後述)。

下の方を見ていくといろいろと書いてありますが、よく見ると「Install NVIDIA GPU driver automatically on first startup?」と書いてあるチェックボックスがあります。これにチェックを入れておけばインスタンス作成時に面倒な GPU のドライバインストールを済ませておいてくれるのでチェックを入れておくことを推奨します。

すべての設定が終わったら「デプロイ」をクリックしてインスタンスを作成します。しばらく待てばインスタンスの作成は終了です。

環境の設定

ここからは Cloud SDK を使ってローカルから インスタンスSSH 接続します。 Cloud SDK のインストール等は以下のリンクを参照してください。

cloud.google.com


接続する際には、ローカルの 8080 番ポートに インスタンスの 8080 番ポートを接続するようにしてみます。

gcloud compute ssh --zone $ZONE $INSTANCE_NAME -- -L 8080:localhost:8080

$ZONE$INSTANCE_NAME に関しては自分で作ったインスタンスのものに置き換えてください。接続できたら、シェルで

jupyter lab

と打ちます。すると Jupyter Lab が立ち上がりますので ローカルで https://localhost:8080 にアクセスしてみて Jupyter Lab のページが表示されるか確認してください。

では、ここから fast.ai の教材のためのセットアップをしていきます。インスタンスに Git は最初から入っているので、Jupyter Lab からシェルを開いて、

git clone https://github.com/fastai/fastbook.git
cd fastbook

としてクローンします。そうしたら必要なパッケージを入れていきます。最初に注意しなければいけないのは、このインスタンスには nvidia-ml-py3 というパッケージが無いことです。これは普通 CUDA を入れると標準で入ってくるものらしいのですが、 GCPインスタンスにはこれが入っていないようです。これを入れたあとにはまず、PyTorch を 1.4 にアップグレードし、その後に残りの必要なパッケージを入れていくという手順で行きます。まとめると、

pip install nvidia-ml-py3
pip install -U torch
pip install -r requirements.txt

これで完了です!

ここまでくれば、あとは普段 Jupyter Lab を使うときと同じです。インスタンスを起動している間は課金の対象になるのでしばらく使わないときには停止をするのを忘れないようにしてください。では、深層学習の勉強をがんばりましょう!!