1. forblgac

    Posted

    forblgac
Changes in title
+Jupyter上で使用するGPUを指定する最適解
Changes in tags
Changes in body
Source | HTML | Preview

皆さん、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を食い尽くして嫌な目で見られることもなくなりますね!