1. forblgac

    Posted

    forblgac
Changes in title
+Jupyter上で使用するGPUを指定する最適解
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,55 @@
+皆さん、DNNしてますか?
+私は~~お金もないので~~共用サーバのGPUを使ってプログラムを動かしています。
+ですが共用サーバ上でJupyterを利用するとき、私はいつも不安を抱えていました。
+というのも、Jupyter上でTensorflowを実行すると基本的に全GPUを食い尽くしてしまうからです。
+共用サーバでこんなことをすると周りの目が怖いので、各自使用するGPUを指定するのですが、その設定は若干面倒です。
+
+通常のプログラムを実行するときは
+
+```bash
+export CUDA_VISIBLE_DEVICES=0 #GPU一つ利用
+export CUDA_VISIBLE_DEVICES=0,1,2 #GPU複数利用
+```
+でいいのですが、Jupyter上で
+
+```bash
+!export CUDA_VISIBLE_DEVICES=0
+```
+
+としてもGPUをすべて使ってしまいます。これは内部の環境変数をJupyter上で設定できないからかと思われます。
+かといってプログラム内部で使用するGPUを指定する場合、利用するフレームワークにより記述方法が異なります。
+
+簡単にフレームワークごとのGPU指定方法をまとめると、
+
+- Tensorflow
+ - tf.session内にてconfigを定義する。
+
+```python
+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を指定する必要あり。
+
+
+```python
+device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+```
+
+となってしまい、フレームワークごとに覚えることも多く非常に面倒です。
+
+## Jupyter上でGPUを指定
+
+Jupyter上でも環境変数を設定することで使用するGPUを指定できます。
+やり方は非常に単純で、最初のセルにて下記のコードを実行すれば完了です。
+
+```python
+import os
+os.environ["CUDA_VISIBLE_DEVICES"]="0"
+```
+
+これだけ覚えていれば、今後サーバ上のGPUを食い尽くして嫌な目で見られることもなくなりますね!