2020年12月10日木曜日

TensorflowでGPUメモリの使用を制限

ディープラーニングという分野に興味があり、GTX 1660 Superという廉価GPUで自作PCを作りました。本格的にディープラーニングを研究する人にはこのGPUをお勧めできませんが。

このPCはほかの用途にも使用され、すべてのGPUメモリをモデル学習に使うわけではいきません。そこで、Tensorflowを使うとき、使用するGPUメモリの上限をプログラム内に設定する方法を見つかりました。

import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    # Currently, memory growth needs to be the same across GPUs
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    # Memory growth must be set before GPUs have been initialized
    print(e)

MEMORY_LIMIT=4096
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Restrict TensorFlow to only allocate 1GB of memory on the first GPU
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=MEMORY_LIMIT)])
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    # Virtual devices must be set before GPUs have been initialized
    print(e)

こうすれば、使用するGPUメモリの上限がMEMORY_LIMIT(単位:MB)の値になります。
ちなみに、最近RTX 30xxシリーズのGPUが出てきて、値段もそんなに高くない。
本格的にディープラーニングを始めようとする方はそちらがお勧めです。

0 件のコメント:

コメントを投稿