【GoogleCloudPlatform】使っているインスタンスにGPUを追加する
東京リージョンでもGPUが使えるようになったけど、新しくインスタンスを立てなおして諸々の設定を最初からやるのは面倒!となったので、既存のインスタンスでGPUを使えるようにどうにか設定しました。 パッケージのバージョンを変更したりなんだかんだあるので、バックアップ推奨です。
環境
CentOS 7.6 python 3.5
インスタンスのマシン構成を変更する
インスタンスを起動している場合は停止させて、インスタンスの編集画面へ。 編集画面のマシンタイプのところのカスタマイズを選択すると"GPUの数"が選べるようになる。
ここで好きなGPU数とタイプを選択し画面一番下の"保存"を選択。 今回はTesla-T4を選択した場合の環境設定手順について書きます。GPUタイプが異なる場合は適宜読み替えてください。 *現在GPUに対応しているリージョンは限られているので注意。もし対応していないリージョンでインスタンスを立てていたら(GPUの選択項目が出てこなければ非対応の可能性高)一旦ディスクイメージを取ってインスタンスを立て直すのが早いかと思います。
ここまで設定したら、もう一度 "開始">"起動" でインスタンスを起動。
ドライバダウンロード
まずはOSのバージョンを確認。
$cat /etc/redhat-release
念のためcuda-9-0が未インストールなことも確認しておきます。
$rpm -q cuda-9-0
NVIDIAのページからCUDAtoolkitをダウンロードしてきます。
$curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-9.0.176-1.x86_64.rpm
システムにリポジトリを追加
$sudo rpm -i --force ./cuda-repo-rhel7-9.0.176-1.x86_64.rpm
epel-releaseリポジトリをインストール
$sudo yum install epel-release
Yumキャッシュ削除
$sudo yum clean all
CUDA9.0のインストール
$sudo yum install cuda-9-0
CUDA9.0にドライバが含まれるとの記載もあったが、自身の環境ではうまく動かなかったので手動でNVIDIAドライバをダウンロード。(もしかしたら冗長なのかも。)
$sudo sh NVIDIA-Linux-x86_64-410.79.run
永続モードを有効にする
$nvidia-smi -pm 1
*ここで以下のようなエラーが出た場合はインスタンスの再起動を試してみる
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running
ここまででインスタンスでGPUを使うための準備完了。 ここからはtensorflow/kerasでGPUを使うための準備をする。
cuDNNのダウンロード
以下のサイトでcuDNNをダウンロードする。 今回はlinuxの9.0バージョンを選びました。 https://developer.nvidia.com/rdp/cudnn-download
インスタンス上にダウンロードしたフォルダを配置したらまずは解凍。
そんでもってPATHを追加しておきます。
$export CUDA_ROOT="/usr/local/cuda"
$export LIBRARY_PATH=$CUDA_ROOT/lib:$CUDA_ROOT/lib64:$LIBRARY_PATH
$export LD_LIBRARY_PATH=$CUDA_ROOT/lib64/
source ~/.bash_profile
tensorflow-gpuの導入
地味にこれが面倒だった。パッケージのバージョンはかなり注意しないとという教訓。 このあたりは各自の環境によってもかなり変わるかと思うので、自身の環境を確認しつつ実行してください。
anacondaを使用の場合は以下のコマンドで今の仮想環境のパッケージを確認出来ます。
$ conda list
ここでtensorflowと表示される場合は注意。tensorflow-gpuとは共存出来ないようなので一旦アンインストールする必要がある。(pip経由でインストールした場合はpipコマンドで削除)
$conda uninstall tensorflow
そしてtensorflow-gpuをインストール。最新版のtensorflow-gpuだとエラーになったので、バージョン1.8.0のものを取ってきます。
確認
ここまでで準備は全て出来ました。 動作確認したい場合は以下のコードを実行してみてください。keras使ってる人は念のためそちらも確認しておいた方が良さそうです。
import tensorflow as tf # Creates a graph. with tf.device('/device:GPU:0'): a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') c = tf.matmul(a, b) # Creates a session with allow_soft_placement and log_device_placement set # to True. sess = tf.Session(config=tf.ConfigProto( allow_soft_placement=True, log_device_placement=True)) # Runs the op. print(sess.run(c))