GCPでGPUインスタンス立ててkeras(tensorflow-gpu)実行するまで
コンソールからポチポチするだけかと思ったら、案外やること多かったのでまとめ。
非GPUインスタンス立てるとこまでは苦労しなかったので、そこからスタート想定。
主な導入するもの
- CUDA 9.0
- cuDNN 7.12
- NVIDIADriver 3.84
- tensorflow-gpu 1.11
当初はcondaでインストールされるCUDA9.2を基準にするつもりだったが、ドライバインストールなどうまくいかなかったので断念。またトライする予定...
1.GPU割り当て申請
インスタンス作成画面からポチるだけではダメで、GPU割り当て申請というものが必要。
公式ドキュメントちゃんと呼めばいいんだけど、ちと分かりにくい。
リージョン、リソース(GPU等)ごとに申請して、許可された中から選んでインスタンスを作るという手順。
公式:https://cloud.google.com/compute/docs/gpus/add-gpus?hl=ja
メニューからIAMと管理>割り当て、と選択。
割り当て申請をするためには有料アカウントにアップグレードする必要がある。
とはいえ特別な作業は必要なく、画面に表示される”アップグレード”を押すだけ。
今後、課金されちゃうので注意。
”指標”をgpuで検索して使いたいGPUを選択する。Preemptibleと通常インスタンスで別個。
”場所”でリージョンを検索。リージョンによって使える資源に制約がある。
公式:https://cloud.google.com/compute/docs/gpus/?hl=ja
一通り選んだら”割り当てを編集”。アドレスや電話番号を入力すると割り当て数の入力画面が出るので、欲しい数を入力する。あまり多い(100とか)とサポートとやりとりすることになるらしい。各10個の申請はサクっと通った。
リクエストを送信すると2通程通知メールが来て、翌日あたりに承認メールが来る。
私は当初リージョン気にせず申請(東京でGPU申請)してリジェクトされてしまった...
2.GPUインスタンス作成
インスタンス作成自体はポチポチするだけ。
GPU周りのインストールでcondaを使って楽したいので、condaで入れることができるCUDA9.0想定で進める。そのためCUDA9.0対応のUbuntu16.04を選択。容量は適当。
プリエンプティブ(制約があるが価格が安い)を利用したい場合は
詳細表示>可用性ポリシー>プリエンプティブをオンにすること。
3.NVIDIAドライバーのインストール
CUDAとCuDNNはcondaが一発で入れてくれる。 上にも書いたがCUDA9.0が入るので、その想定でNVIDIAドライバーを手動インストールする。
One of the following supported CUDA versions and NVIDIA graphics driver:
NVIDIA graphics driver R375 or newer for CUDA 8
NVIDIA graphics driver R384 or newer for CUDA 9
NVIDIA graphics driver R390 or newer for CUDA 9.2
cuDNNドキュメントより、CUDA9.0には3.84以降のドライバーが必要。
3.84はgoogleがスクリプトを用意してくれていたり、手間なくインストールできる。
sudo apt install nvidia-384
4.CUDA,cuDNNのインストール
www.anaconda.com
Anaconda公式ブログより、condaでtensorflow入れるとCUDAとかcuDNNとかよしなにやってくれるよ、という話。
なので、Miniconda入れてcondaするだけ。
Anacondaでもいいが、私は最小限の構成にしたかったのでMiniconda採用。
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh
shell再起動して
conda create -n gpuenv tensorflow-gpu conda install cudatoolkit=9.0
仮想環境を作りつつtensorflow-gpuをインストールする。
その際、画像の通り依存パッケージとしてCUDAやcuDNNなどがインストールされる。
CUDAは自動的に9.2が入るので、condaでバージョン指定してダウングレードする。
ここで一度インスタンスを再起動する。
再起動後、ドライバーやCUDAが入っていることを確認する。
nvidia-smi
ドライバのバージョンや、K80が認識されていることを確認。
最後にkerasでCNNのサンプルを実行してみる。
github.com
keras公式に多くのサンプルコードがあるので、その中からmnist_cnn.pyを実行する。
git cloneするまでもないと思うので、pyファイルを直接ダウンロードして実行。
source activate gpuenv conda install keras wget https://raw.githubusercontent.com/keras-team/keras/master/examples/mnist_cnn.py python mnist_cnn.py
実行結果。1epock8秒。CPUだと1分弱だったので、GPUが効いてるのが分かる。
ということで、無事GPUインスタンスでkeras(GPU)実行するところまで到達。
kaggleなどやる際はXGBoostとかLightGBMとか色々追加すること。
5.おしまい
今までは手元の貧相なWin機のGPU環境(1050Ti)で頑張ってたけど、これでGCPが使える!
これまでWindowsプライベートも仕事も1本だったので 、GCPがほぼ初めてのLinux系。
Windows時はVisualStudioのインストールに躓いたり、一個一個のインストールやアンインストールが手間だったり色々と手間だったのが、GPU導入という短い手順だけ見てもだいぶ楽になったかも。
今回はとにかく手軽に動くところまで、ということでconda利用してゴリゴリ作ったけど、デスクトップ、ノートPC、GCPなど使い分けるならDockerを利用した方がいいはず。GPU環境はNVIDIA Dockerが使えるはずだし。
また少ししたら、Docker使って改めて環境構築してブログ書きます。多分。
ねんがんの じーぴーゆー を てにいれたぞ!
おまけ:コードだけまとめ
インスタンス作成後のコードだけ一覧化。
順番に実行してEnterかyes入力で、一通りそろうはず。
sudo apt install nvidia-384 wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh shell再起動 conda create -n gpuenv tensorflow-gpu conda install cudatoolkit=9.0 インスタンス再起動 nvidia-smi source activate gpuenv conda install keras wget https://raw.githubusercontent.com/keras-team/keras/master/examples/mnist_cnn.py python mnist_cnn.py
おまけ:コマンド備忘
CUDAアンインストール
sudo apt-get remove nvidia\* sudo apt-get remove cuda\* sudo apt autoremove
CUDA,ドライバーのバージョン確認
dpkg -l | grep nvidia dpkg -l | grep cuda