皆さん、DNNしてますか?
私はお金もないので共用サーバのGPUを使ってプログラムを動かしています。
ですが共用サーバ上でJupyterを利用するとき、私はいつも不安を抱えていました。
というのも、Jupyter上でTensorflowを実行すると基本的に全GPUを食い尽くしてしまうからです。
共用サーバでこんなことをすると周りの目が怖いので、各自使用するGPUを指定するのですが、その設定は若干面倒です。
通常のプログラムを実行するときは
export CUDA_VISIBLE_DEVICES=0 #GPU一つ利用
export CUDA_VISIBLE_DEVICES=0,1,2 #GPU複数利用
でいいのですが、Jupyter上で
!export CUDA_VISIBLE_DEVICES=0
としてもGPUをすべて使ってしまいます。これは内部の環境変数をJupyter上で設定できないからかと思われます。
かといってプログラム内部で使用するGPUを指定する場合、利用するフレームワークにより記述方法が異なります。
簡単にフレームワークごとのGPU指定方法をまとめると、
- Tensorflow
- tf.session内にてconfigを定義する。
import keras
import tensorflow as tf
tf.Session(config=tf.ConfigProto(device_count = {'GPU': 0}))
- Keras
- Tensorflowと同様。ただしtensorflow_backendで上記コードをwrapする必要あり。
- PyTorch
- 基本的にはCPUモードでdeviceに指定したGPUがあるときはそれを使う仕様。
- また変数の指定の際にもGPUを指定する必要あり。
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
となってしまい、フレームワークごとに覚えることも多く非常に面倒です。
Jupyter上でGPUを指定
Jupyter上でも環境変数を設定することで使用するGPUを指定できます。
やり方は非常に単純で、最初のセルにて下記のコードを実行すれば完了です。
import os
os.environ["CUDA_VISIBLE_DEVICES"]="0"
これだけ覚えていれば、今後サーバ上のGPUを食い尽くして嫌な目で見られることもなくなりますね!