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

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

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

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

機械学習

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

Python

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

Q&A

解決済

2回答

18069閲覧

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

Lickey

総合スコア8

Windows 10

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

機械学習

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

Python

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

0グッド

1クリップ

投稿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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lickey

2017/11/10 13:44

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

0

ベストアンサー

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

投稿2017/11/10 12:22

MasashiKimura

総合スコア1150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lickey

2017/11/10 12:27

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問