質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • Python

    6831questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Windows 10

    847questions

    Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

  • TensorFlow

    601questions

  • 機械学習

    596questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

TensorFlowのチュートリアルでGPUメモリエラー

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 1,220

Lickey

score 2

TensorFlowのチュートリアルでGPUメモリエラー

現在、TensorFlowのDeep MNIST for Experts(https://www.tensorflow.org/get_started/mnist/pros)をみながら畳み込みニューラルネットワークの実装を行っています。コードを書くことまではできたのですが、実行すると「GPUに2.59GiBを割り当てようとしたが、足りなかった(意訳)」とエラーが出てきました。

使用しているGPUはGTX1080でメモリは8GiBあるはずですし、TensorFlowの出力にも6.61GiBの空きと出ています。しかし、何度行ってもエラーが消えません。

発生している問題・エラーメッセージ

C:\DL\TensorFlow\tutorial>python mnist-pro.py
Extracting MNIST_data\train-images-idx3-ubyte.gz
Extracting MNIST_data\train-labels-idx1-ubyte.gz
Extracting MNIST_data\t10k-images-idx3-ubyte.gz
Extracting MNIST_data\t10k-labels-idx1-ubyte.gz
2017-11-10 18:02:34.970054: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2017-11-10 18:02:35.255329: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1030] Found device 0 with properties:
name: GeForce GTX 1080 major: 6 minor: 1 memoryClockRate(GHz): 1.7335
pciBusID: 0000:01:00.0
totalMemory: 8.00GiB freeMemory: 6.61GiB
2017-11-10 18:02:35.255434: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0, compute capability: 6.1)
2017-11-10 18:02:35.837899: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0, compute capability: 6.1)
step 0, training accuracy 0.06
~中略~
step 9900, training accuracy 1
2017-11-10 18:03:27.986211: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\bfc_allocator.cc:217] Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.59GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.
test accuracy 0.9911

該当のソースコード

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

import tensorflow as tf
sess = tf.InteractiveSession()

x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
sess.run(tf.global_variables_initializer())

def weight_variable(shape):
  initial = tf.truncated_normal(shape, stddev=0.1)
  return tf.Variable(initial)

def bias_variable(shape):
  initial = tf.constant(0.1, shape=shape)
  return tf.Variable(initial)

def conv2d(x, W):
  return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
  return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])

x_image = tf.reshape(x, [-1, 28, 28, 1])

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2

cross_entropy = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  for i in range(10000):
    batch = mnist.train.next_batch(50)
    if i % 100 == 0:
      train_accuracy = accuracy.eval(feed_dict={
          x: batch[0], y_: batch[1], keep_prob: 1.0})
      print('step %d, training accuracy %g' % (i, train_accuracy))
    train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

  print('test accuracy %g' % accuracy.eval(feed_dict={
      x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))

試したこと

上限をあえて設定しなおすことを行いました。

config = tf.ConfigProto(
    gpu_options=tf.GPUOptions(
        # per_process_gpu_memory_fraction=0.9 # 最大値の50%まで
        allow_growth=True
    )
)
sess = sess = tf.Session(config=config)


しかし、問題は解決できませんでした。

補足情報(言語/FW/ツール等のバージョンなど)

開発環境

  • OS:windows10
  • CPU:Intel(R) Core(TM) i7-6700K
  • GPU:GTX1080
  • メモリ:32.0 GB
  • ディスク:SSD 256 GB

使用ツール

  • Tensorflow 1.4
  • Anacoda 5.01
  • Pyhon 3.5.4

不足情報などがありましたら追加していきます。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

OS:windows10
CPU:Intel(R) Core(TM) i7-6700K
GPU:GTX1080
メモリ:32.0 GB
ディスク:SSD 256 GB

まるでワークステーションですねo.0


さて本題です。
CUDAを使ったことがないので、これまで見てきた記事の内容と、ログを見て思ったことを書きます。

*ログ
1) フリーメモリ

totalMemory: 8.00GiB freeMemory: 6.61GiB

このメッセージが出たのはたぶんスクリプトを動かしてすぐ(TFが本格的に動く前)だと思います。なので、TFが本格的に動く前に6.6GBくらいメモリが開いているよ、ということですね。

2)アロケーター

Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.59GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.

内容は、アロケータは2.59GBをアロケートしようとしましたが、メモリの外にはみ出てしまいました。これは破綻したのではなく、ただだいたいこういう場合はもっとメモリがたくさんあればパフォーマンスが得られるかもよ?ということですね。

たぶんですが、走らせているうちにTFがかさばって確保していた6.6GBではたりなくなったとかそういう話だと思われます。

* 実際どうするか
Stackoverflowのrdadorfさんがまとめていますが、

・正攻法はバッチサイズを小さく(smaller batches)してたくさん回す
・タスクを分割する(相当大変みたいです) こちらについては、rdadorfさんは

each of these are going to behave differently in terms of performance. This is why TF doesn't auto-partition your graph. It's actually not a straightforward problem in the general case.

(分割の仕方によって)それぞれパフォーマンスが変わってきます。この点が、TFが自動的に計算グラフを分割しない理由です。一般的に言って、スパッと割り切れるような簡単な問題じゃないのです。


だそうですので、バッチサイズをさらに小さくするのをおススメします。
(タスク分割は考えたことすらない私の手には負えません)

たしか、sess.うんたらの挟む場所でループするたびにTFが重くなるよなことがありましたので、もしメモリが無限に増え続けるようならその辺も疑ってください。
(普通、バッチで分割したとしても、ステップ毎に使用中の目盛りは一定の範囲内で上下するだけで一方的な増加はないはずです)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/10 22:44

    実行中のGPU使用メモリを確認したところ、トレーニング時とテスト時で共に約800MiBを維持しており、特に増え続けている印象はなかったです。MNISTのテストデータは10,000程あるため、それがテスト時にいきなりメモリに格納されたために警告文が出てきた感じでしょうか、、、。

    非常にわかりやすい説明をしていただき、ありがとうございました。

    キャンセル

checkベストアンサー

0

これはエラーではなく警告です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/10 21:27

    なるほど、警告だったのですね。
    回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    6831questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Windows 10

    847questions

    Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

  • TensorFlow

    601questions

  • 機械学習

    596questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。