web-dev-qa-db-ja.com

GPUのみが使用されている1-5%Tensorflow-gpuおよびKeras

GPUにtensorflowをインストールし、CNNにkerasを使用しています。トレーニング中、私のGPUは約5%しか使用されていませんが、トレーニング中に6GBのVRAMのうち5つが使用されています。時々それはグリッチし、コンソールに0.000000e + 00を出力し、GPUは100%になりますが、数秒後にトレーニングは5%に戻ります。私のGPUはZotacgtx 1060 miniで、Ryzen 51600xを使用しています。

Epoch 1/25
 121/3860 [..............................] - ETA: 31:42 - loss: 3.0575 - acc: 0.0877 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00Epoch 2/25
 121/3860 [..............................] - ETA: 29:48 - loss: 3.0005 - acc: 0.0994 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00Epoch 3/25
  36/3860 [..............................] - ETA: 24:47 - loss: 2.9863 - acc: 0.1024

通常、ボトルネックはGPUにある必要があります(したがって、100%の使用率)。それが起こらない場合は、コードの他の部分が各バッチ処理中に長い時間を要しています。それが何であるかを言うのは難しいですが(特にコードを追加しなかったため)、試すことができることがいくつかあります。

1。入力データ

ネットワークの入力データが常に利用可能であることを確認してください。ディスクからの画像の読み取りには時間がかかるため、複数のworkersおよびmultiprocessingインターフェースを使用してください。

model.fit(..., use_multiprocessing=True, workers=8)

2。モデルをGPUに強制します

/gpu:0がデフォルトのデバイスであるため、これはほとんど問題になりませんが、目的のデバイスでモデルを実行していることを確認する価値があります。

with tf.device('/gpu:0'):
    x = Input(...)
    y = Conv2D(..)
    model = Model(x, y)

2。モデルのサイズを確認してください

バッチサイズが大きく、ソフト配置が許可されている場合、ネットワークの一部(GPUのメモリに収まらなかった)がCPUに配置される可能性があります。これにより、プロセスが大幅に遅くなります。

ソフト配置がオンになっている場合は、無効にして、メモリエラーがスローされるかどうかを確認してください。

# make sure soft-placement is off
tf_config = tf.ConfigProto(allow_soft_placement=False)
tf_config.gpu_options.allow_growth = True
s = tf.Session(config=tf_config)
K.set_session(s)

with tf.device(...):
    ...

model.fit(...)

その場合は、バッチサイズを収まるまで減らして、GPUを適切に使用できるようにしてください。次に、ソフト配置を再度オンにします。

11
ldavid

あなたが試すことができるいくつかの方向。

  1. 入力パイプラインを再確認し、パフォーマンスのボトルネックになっていないことを確認してください。
  2. バッチ番号またはレイヤー幅を増やして、GPUが消費するのに十分なデータを取得していることを確認します。
  3. 最も効果的な方法は、プロファイルjsonをダンプして確認することです。

私の経験では、ほとんどの場合、使用率が低いのは、GPUが消費するデータが不足しているためです。

いくつかの便利なリンク* https://www.tensorflow.org/guide/performance/datasets * https://towardsdatascience.com/howto-profile-tensorflow-1a49fb18073d

0
Carpemer