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

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

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

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

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

解決済

GPUでTensorflowモデルを実行 - UnknownError: Failed to get convolution algorithm.

koyamashinji
koyamashinji

総合スコア45

Windows 10

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

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

1回答

0評価

1クリップ

7735閲覧

投稿2020/11/26 09:27

<やりたいこと>

下記の環境で以下のシンプルなニューラルネットワークモデルを実行しました。
Code1 Denseレイヤのみを使用したモデル
Code2 Convolutionレイヤを使用したモデル(CNN)

Code1は、正常に実行されましたが、2のモデル実行時にUnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.のエラーが出てしまい。
色々と検索し、原因を探りましたが、解決できず。。皆様のお力をお借りしたく。

#####<確認したこと>

  • GPUを認識していること(tf.test.gpu_device_name() にて確認)
  • CUDA、Tensorflow等のバージョン互換性が一致していること
  • GPU RAMが別のプロセスによって不足になっていないこと

環境

Windows 10
NVIDIA GeForce GTX1650

python 3.6.12
conda 4.9.2
TensorFlow-GPU 2.0.0

Visual Studio Community 2017
CUDA 10.0
cuDNN 7.4.2


Code1

import tensorflow as tf from tensorflow import keras import numpy as np fashion_mnist = keras.datasets.fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data() train_images = train_images/225.0 test_images = test_images/225.0 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28,28)), keras.layers.Dense(units=128, activation="relu"), keras.layers.Dense(units=10, activation="softmax") ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, train_labels, epochs=10)

Code2

import tensorflow as tf from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() train_images, test_images = train_images / 255.0, test_images / 255.0 model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(units=64, activation='relu')) model.add(layers.Dense(units=10)) model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

Error

Train on 50000 samples, validate on 10000 samples Epoch 1/10 32/50000 [..............................] - ETA: 29:19 --------------------------------------------------------------------------- UnknownError Traceback (most recent call last) <ipython-input-48-ce520e3e9c1d> in <module>() 21 loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 22 metrics=['accuracy']) ---> 23 model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs) 726 max_queue_size=max_queue_size, 727 workers=workers, --> 728 use_multiprocessing=use_multiprocessing) 729 730 def evaluate(self, C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs) 322 mode=ModeKeys.TRAIN, 323 training_context=training_context, --> 324 total_epochs=epochs) 325 cbks.make_logs(model, epoch_logs, training_result, ModeKeys.TRAIN) 326 C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in run_one_epoch(model, iterator, execution_function, dataset_size, batch_size, strategy, steps_per_epoch, num_samples, mode, training_context, total_epochs) 121 step=step, mode=mode, size=current_batch_size) as batch_logs: 122 try: --> 123 batch_outs = execution_function(iterator) 124 except (StopIteration, errors.OutOfRangeError): 125 # TODO(kaftan): File bug about tf function and errors.OutOfRangeError? C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py in execution_function(input_fn) 84 # `numpy` translates Tensors to values in Eager mode. 85 return nest.map_structure(_non_none_constant_value, ---> 86 distributed_function(input_fn)) 87 88 return execution_function C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\def_function.py in __call__(self, *args, **kwds) 455 456 tracing_count = self._get_tracing_count() --> 457 result = self._call(*args, **kwds) 458 if tracing_count == self._get_tracing_count(): 459 self._call_counter.called_without_tracing() C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\def_function.py in _call(self, *args, **kwds) 518 # Lifting succeeded, so variables are initialized and we can run the 519 # stateless function. --> 520 return self._stateless_fn(*args, **kwds) 521 else: 522 canon_args, canon_kwds = \ C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\function.py in __call__(self, *args, **kwargs) 1821 """Calls a graph function specialized to the inputs.""" 1822 graph_function, args, kwargs = self._maybe_define_function(args, kwargs) -> 1823 return graph_function._filtered_call(args, kwargs) # pylint: disable=protected-access 1824 1825 @property C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\function.py in _filtered_call(self, args, kwargs) 1139 if isinstance(t, (ops.Tensor, 1140 resource_variable_ops.BaseResourceVariable))), -> 1141 self.captured_inputs) 1142 1143 def _call_flat(self, args, captured_inputs, cancellation_manager=None): C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\function.py in _call_flat(self, args, captured_inputs, cancellation_manager) 1222 if executing_eagerly: 1223 flat_outputs = forward_function.call( -> 1224 ctx, args, cancellation_manager=cancellation_manager) 1225 else: 1226 gradient_name = self._delayed_rewrite_functions.register() C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\function.py in call(self, ctx, args, cancellation_manager) 509 inputs=args, 510 attrs=("executor_type", executor_type, "config_proto", config), --> 511 ctx=ctx) 512 else: 513 outputs = execute.execute_with_cancellation( C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\eager\execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 65 else: 66 message = e.message ---> 67 six.raise_from(core._status_to_exception(e.code, message), None) 68 except TypeError as e: 69 keras_symbolic_tensors = [ C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\six.py in raise_from(value, from_value) UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [[node sequential_7/conv2d_12/Conv2D (defined at C:\Users\koyamashinji\anaconda3\envs\gpu_trial\lib\site-packages\tensorflow_core\python\framework\ops.py:1751) ]] [Op:__inference_distributed_function_24004] Function call stack: distributed_function

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

jbpb0

2020/11/27 04:14 編集

Windows 10, python 3.7.9, tensorflow 1.15 (GPU版)で、Code2も動きました tensorflowのバージョンが違うので、参考にならないかもしれませんが
meg_

2020/11/27 00:58

参考情報ですが、ubuntu18+anaconda+tensorflow2のCNNで同様のエラーが発生しました。 python3.8をインストール(ソースからビルド)し、環境構築したところCNNも問題なく動きました。
koyamashinji

2020/11/27 12:33

皆様ご回答ありがとうございます。下名はwindows 10 なので、jbpb0さんのコメントの python 3.7.9, tensorflow 1.15 (GPU版)の環境を作成して試してみましたが、やはり同じエラーが出ます。jbpb0さんは、CUDA等のバージョンは何をご利用されていますか?
jbpb0

2020/11/27 13:13

CUDA 10.0, cuDNN 7.6.4 です
jbpb0

2020/11/27 14:03

Code2実行中に、Windowsの タスクマネージャー→パフォーマンス→GPU 0 の専用GPUメモリ が 9.2/11.0 GB となります GeForce GTX1650はメモリ4GBではありませんでしたっけ?
jbpb0

2020/11/27 15:37

バッチサイズを小さくしても、9.2GBは減りませんでした tensorflowは、実際に必要かどうかは別にして、GPUのメモリーの大部分を確保してしまうみたいです
jbpb0

2020/11/28 01:55

環境変数 TF_FORCE_GPU_ALLOW_GROWTH を true に設定したら、必要な分しかGPUのメモリーを確保しなくなるとのこと https://cocoinit23.com/tensorflow-keras-tf-force-gpu-allow-growth/ それでやってみたら、Code2実行中の専用GPUメモリ は 0.8/11.0 GB になりました(バッチサイズ指定無しの場合) python起動前の状態で 0.3/11.0 GB だったので、差分は 0.5GB です GTX1650でも全然余裕ですね
koyamashinji

2020/11/28 03:27

アドバイスいただき有難うございます。 昨晩からずっと検証を続けていましたが、今回のエラー発生の直接的な原因は、ソースのコンパイル時に使用されたCuDNNライブラリのバージョンが7.6.0だったため、ランタイム時に読み込まれるcuDNNライブラリ7.4.2と不一致を起こしていたことに起因することがわかりました。 cuDNNを7.6.0にアップデートすると、正常動作しました。 ただ、メモリの使用に関しては、ご指摘のとおり、常に上限いっぱいの4G近くを使用してしまっている状態です。 提示いただいた方法含め、メモリ量の割り当てを制限するコードを書いて試しましたが、依然として上限いっぱいの4Gが使われてしまいます。 今回の質問については自己解決とし、メモリ使用に関しては別の質問を立てたいと思います。 下名メモリ使用については全く知識がなかったため、大変助かりました。
jbpb0

2020/11/28 05:18 編集

メモリーをたくさん確保するのは、その方が計算速度的に有利だからなので、GPUを使うプログラムを同時に動かすのでなければ、気にしなくてもいいと思いますよ ただし、一旦確保したメモリーは、要らなくなっても開放しないので、pythonを完全に落とさないとメモリーは返ってきません 別のGPUを使うプログラムを動かす場合は、前にGPUを使ったpythonは完全に落とさないといけません (AIの実行は終わっていても、そのpythonがまだ生きていたら「同時」になる)
koyamashinji

2020/11/28 11:55

なるほど。将来的には、同時処理もできるように、やはりメモリ使用制限については気になるところです。 色々ご教示頂き有難うございます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Windows 10

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

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。