37
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

Jupyter上で使用するGPUを指定する最適解

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
37
Help us understand the problem. What are the problem?