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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Windows 10

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

機械学習

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

Python

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

解決済

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

Lickey
Lickey

総合スコア8

Windows 10

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

機械学習

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

Python

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

2回答

0グッド

1クリップ

15631閲覧

投稿2017/11/10 09:19

###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

###該当のソースコード

python

1from tensorflow.examples.tutorials.mnist import input_data 2mnist = input_data.read_data_sets('MNIST_data', one_hot=True) 3 4import tensorflow as tf 5sess = tf.InteractiveSession() 6 7x = tf.placeholder(tf.float32, shape=[None, 784]) 8y_ = tf.placeholder(tf.float32, shape=[None, 10]) 9W = tf.Variable(tf.zeros([784,10])) 10b = tf.Variable(tf.zeros([10])) 11sess.run(tf.global_variables_initializer()) 12 13def weight_variable(shape): 14 initial = tf.truncated_normal(shape, stddev=0.1) 15 return tf.Variable(initial) 16 17def bias_variable(shape): 18 initial = tf.constant(0.1, shape=shape) 19 return tf.Variable(initial) 20 21def conv2d(x, W): 22 return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 23 24def max_pool_2x2(x): 25 return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') 26 27W_conv1 = weight_variable([5, 5, 1, 32]) 28b_conv1 = bias_variable([32]) 29 30x_image = tf.reshape(x, [-1, 28, 28, 1]) 31 32h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) 33h_pool1 = max_pool_2x2(h_conv1) 34 35W_conv2 = weight_variable([5, 5, 32, 64]) 36b_conv2 = bias_variable([64]) 37 38h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) 39h_pool2 = max_pool_2x2(h_conv2) 40 41W_fc1 = weight_variable([7 * 7 * 64, 1024]) 42b_fc1 = bias_variable([1024]) 43 44h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64]) 45h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) 46 47keep_prob = tf.placeholder(tf.float32) 48h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 49 50W_fc2 = weight_variable([1024, 10]) 51b_fc2 = bias_variable([10]) 52 53y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 54 55cross_entropy = tf.reduce_mean( 56 tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)) 57train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) 58correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) 59accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 60 61with tf.Session() as sess: 62 sess.run(tf.global_variables_initializer()) 63 for i in range(10000): 64 batch = mnist.train.next_batch(50) 65 if i % 100 == 0: 66 train_accuracy = accuracy.eval(feed_dict={ 67 x: batch[0], y_: batch[1], keep_prob: 1.0}) 68 print('step %d, training accuracy %g' % (i, train_accuracy)) 69 train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) 70 71 print('test accuracy %g' % accuracy.eval(feed_dict={ 72 x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})) 73

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

python

1config = tf.ConfigProto( 2 gpu_options=tf.GPUOptions( 3 # per_process_gpu_memory_fraction=0.9 # 最大値の50%まで 4 allow_growth=True 5 ) 6) 7sess = 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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

回答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 13:23

退会済みユーザー

退会済みユーザー

総合スコア0

mkgrei, Lickey👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

Lickey

2017/11/10 13:44

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

0

ベストアンサー

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

投稿2017/11/10 12:22

MasashiKimura

総合スコア1150

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

Lickey

2017/11/10 12:27

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

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

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Windows 10

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

機械学習

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

Python

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