343

私は、計算リソースが共有される環境で作業しています。つまり、それぞれ数台の Nvidia Titan X GPU を搭載した数台のサーバー マシンがあります。

小規模から中程度のサイズのモデルの場合、12 GB の Titan X は通常、2 ~ 3 人が同じ GPU で同時にトレーニングを実行するのに十分です。モデルが非常に小さいため、単一のモデルでは GPU のすべての計算ユニットを十分に活用できない場合、トレーニング プロセスを次々と実行する場合と比較して、実際には速度が向上する可能性があります。GPU への同時アクセスによって個々のトレーニング時間が遅くなる場合でも、複数のユーザーが GPU で同時にトレーニングできるという柔軟性があると便利です。

TensorFlow の問題は、デフォルトでは、起動時に利用可能な GPU メモリの全量を割り当てることです。小さな 2 層ニューラル ネットワークでも、12 GB の GPU メモリがすべて使用されていることがわかります。

特定のモデルにこれで十分であることがわかっている場合、TensorFlow に 4 GB の GPU メモリのみを割り当てる方法はありますか?

4

16 に答える 16

326

オプションの引数の一部として atf.Sessionを渡すことにより、a を作成するときに割り当てられる GPU メモリの割合を設定できます。tf.GPUOptionsconfig

# Assume that you have 12GB of GPU memory and want to allocate ~4GB:
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)

sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

これper_process_gpu_memory_fractionは、同じマシン上の各 GPU のプロセスによって使用される GPU メモリ量の厳密な上限として機能します。現在、この割合は同じマシン上のすべての GPU に均一に適用されます。これを GPU ごとに設定する方法はありません。

于 2015-12-10T11:00:19.170 に答える
210
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)

https://github.com/tensorflow/tensorflow/issues/1578

于 2016-05-26T07:43:45.363 に答える
8

TensorFlow 1.X上記のすべての回答は、バージョンでメモリをある程度設定するか、 TensorFlow 2.X.

この方法 tf.config.experimental.set_memory_growthは、割り当て/前処理中に動的な成長を可能にするために実際に機能します。それでも、特定の上限 GPU メモリを最初から割り当てたい場合があります。

特定の GPU メモリを割り当てる背後にあるロジックは、トレーニング セッション中に OOM メモリを防止することにもなります。たとえば、ビデオ メモリを消費する Chrome タブやその他のビデオ消費プロセスを開いてトレーニングするとtf.config.experimental.set_memory_growth(gpu, True)、OOM エラーが発生する可能性があるため、場合によっては、最初からより多くのメモリを割り当てる必要があります。

TensorFlow 2.X で GPU ごとにメモリを割り当てる推奨の正しい方法は、次の方法で行われます。

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=1024)]
于 2020-08-28T09:54:59.383 に答える