GCP 上で PyTorch を利用する
内容
Google Cloud Platform 上で PyTorch を GPU を利用して実行するまでの設定方法。
プロジェクトの作成
最初にプロジェクトを作成します。
既存のプロジェクトを使用する場合は必要ありません。
GCP の画面の上の赤丸で囲った部分を選択します。
プロジェクトの選択画面が出てくるので、新しいプロジェクトを選択して作成します。
GCP の割り当て
PyTorch は GPU で実行したいので、GPU のしよう申請をします。
ここでは、プロジェクト内で使用する GPU の台数の申請をします。
申請しないと GPU は使用できません。
まずは、画面左のメニューバーから「IAM と管理」を選択します。
次に、「割り当て」を選択します。
画面が変わるので、指標の「すべての指標」を選択します。
指標から GPU のみを選択します。
まず、「なし」をクリックし、次に「GPUs (all regions)」を選択します。
画面のサービスに GPU が表示されるので、チェックを入れます。
GPU が選択された状態で、「割り当てを編集」をクリックします。
画面右側に必要事項の記入欄が現れるので全て記入して、「次へ」を選択します。
使用したい GPU の台数と使用目的の記入欄が現れます。記入後「リクエストを送信」をクリックします。
作業はここまでです。
承認までにしばらく時間がかかると表示されましたが、今回はすぐに使用許可のメールが届きました。
これで GPU の割り当て申請は終わりです。
インスタンスの作成
GPU を使用するインスタンスを立ち上げます。
まず、画面左上の三本線のメニューマークから、「Compute Engine」次に「VM インスタンス」を選択します。
画面が変わるので、「インスタンスを作成」を選択します。
立ち上げたいインスタンスの内容を設定します。
GPU は「CPU プラットフォームと GPU」から選択できます。
使用する GPU の型と使用台数を選択します。
使用できる GPU の種類は、リージョンにより異なります。
プリエンプティブという、料金の安いインスタンスも作成できます。
画面下の方の「管理」から「可用性ポリシー」を変えることで選択できます。
プリエンプティブは安い代わりに 24 時間以内に一度立下ります。また、Google のリソースの状況によっても立下ります。
今回は 1 時間以内に立ち下がってしまいました。立てたリージョンが混雑していたのかもしれません。
最後に画面下の「作成」を選択してインスタンスの立ち上げは終了です。
環境設定
作ったインスタンスで PyTorch を実行できる環境を整えます。
まずはインスタンスを起動します。
先ほどの VM インスタンスの画面から、起動したいインスタンスのチェックボックスにチェックを入れ、「開始」を選択します。
インスタンスへアクセスします。
SSH の横の ▼ から、「ブラウザウィンドウで開く」を選択します。
(ほかの接続方法もありますが、今回はこれで行きます。)
インスタンスに接続したら環境を整えます。
とりあえず、アップデートをかけます。
下のコマンドを実行します。
$ sudo apt update
次に解析時に使いたいものを入れます。
$ sudo apt install git vim build-essential tmux htop
y を打ち込んだりしなが、インストールの終了までしばらく待ちます。
次は、Anaconda を入れます。
Anaconda のサイトから URL を入手します。
サイトの Python 3.7 向けの「Download」ボタンの上で右クリックし、「リンクのアドレスのコピー」をします。
コピーしたアドレスを使って、ファイルをダウンロードします。
$ wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
ダウンロードが完了したらファイルを実行します。
$ sh Anaconda3-2019.10-Linux-x86_64.sh
yes や、enter を打ち込んで実行の完了までしばらく待ちます。
anaconda を有効化します。
$ . ~/anaconda3/bin/activate
次に PyTorch をインストールします。
コマンドはPyTorch のサイトから持ってきます。
OS は Linux, Package は Conda, Language は Python, CUDA は 10.1 としました。
$ conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
次に CUDA ドライバをインストールします。
google のサイトに説明があるので、コマンドをコピーしてきて実行します。
$ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-10-1
しばらく待っているとインストールが完了します。
無事にインストールが終了したか確認します。 次のコマンドを実行します。
nvidia-smi
上のような画面が出力されたら導入は完了です。
ライブラリーのインストール
この後に、画像解析のネットワークを動かすためにいくつか入れました。
CV2, pillow, torch summary, tensorboard など
止め方
まずはコンソールから抜けます
$ exit
次に、 止めたいインスタンスにチェックを入れて「停止」をクリック。
料金がかかるので確実に止めましょう。 (プリエンプティブは忘れてても勝手に止まるので、その点では安全かと思います。)
疑問
cudnn を入れる必要があるのかが分からない。 pytorch についてくるのでしょうか?
確認のために以下のプログラムを実行しました。
import torch
torch.cudnn.is_available()
True を返すので cudnn を認識しているようです。
おわりに
Google Cloud Platform の利用に関しては、丁寧な記事がネット上に沢山ありました。 ありがたいことです。それでも、悩む部分があったので、将来の自分のために記録しました。
cuDNN について疑問点はあるものの GCP で PyTorch を実行できる環境の構築ができました。 それなりの料金はかかりますが、100 万円前後の高性能 GPU を使用できるのですから素晴らしいことです。