web-dev-qa-db-ja.com

CUDNN ERROR:たたみ込みアルゴリズムの取得に失敗しました

ソースコンパイルされたTensorflowビルドを使用してKerasで畳み込みネットワークを実行するのに問題があります。私はCUDA 10.0とCuDNN 7.4を使用していますが、両方とも正しくコンパイルされており、サンプルのmakefileで確認されています。密集したネットワークではなくconvネットを実行すると、これらのエラーが発生します。

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 conv2d_1/convolution}}]]
 [[metrics/acc/Mean/_169]]

CUDAとCuDNNへのパスをパスに直接追加しようとしましたが、TensorFlowを再インストールして再コンパイルしようとしましたが、結果はありませんでした。これはこのマシンへの新規インストールなので、バージョンの競合に関する問題はありません。

import keras
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout
from keras.datasets import mnist
import sys

def one_hot(data, num_categories):
    oh = np.zeros((len(data),num_categories))
    for i,entry in enumerate(data):
        oh[i, entry] = 1
    return oh


# import data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# preprocess data
x_train = x_train.reshape( (60000,28,28,1) ) / 256
x_test = x_test.reshape( (10000,28,28,1) ) / 256
y_train = one_hot(y_train, 10)
y_test = one_hot(y_test, 10)

# build the model
model = Sequential()
input_shape=(28,28,1)
model.add(Conv2D(filters=32,
                 kernel_size=(3,3),
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2,2),
                       strides=(2,2)))
model.add(Conv2D(filters=32,
                 kernel_size=(3,3),
                 activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),
                       strides=(2,2)))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(units=256,
                activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=10,
                activation='softmax'))

# load model weight

# compile model
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.summary()

# train
num_epochs = 20
if num_epochs != 0:
    # train the model
    model.fit(x_train, y_train,
              batch_size=32,
              epochs=num_epochs)

# evaluate model
score = model.evaluate(x_test, y_test)
print('\nScore: ', score)

私が実行しているコードは、専用GPUを備えていない私のラップトップで完全にうまく機能しますが、CUDA/CuDNNをこのデスクトップで稼働させようとしています。この問題の診断に役立つ情報をいただければ幸いです。

更新:ソースからTFをビルドするとき、最新バージョンとは対照的に、デフォルトのNCCLの使用に関連するエラーがあるようです。 OSに依存しないバージョンの最新のNCCLをインストールしようとしています。これにより、新しいエラーが発生します。ldconfigはNCCLをリストしますが、ライブラリを見つけることができません。このため、最新のNCCLを使用してソースからビルドすることはできません。そのため、これが根本的な原因かどうかはわかりません。

5
BranchedOut

このエラーメッセージは、解決策が異なる3つの理由で表示されています。

1.キャッシュに問題がある

pythonプロセスをシャットダウンし、~/.nvディレクトリを削除して(Linuxではrm -rf ~/.nv)、Pythonプロセス。これが機能する理由は正確にはわかりません。おそらく、少なくとも部分的に2番目のオプションに関連しています。

3.メモリ不足です

このエラーは、グラフィックカードのRAMが不足した場合にも表示されることがあります。 nvidia GPUでは、nvidia-smiを使用してグラフィックカードのメモリ使用量を確認できます。これにより、使用中のGPU RAMの使用量(ほぼ限界に達している場合は6025MiB / 6086MiBのようなもの)だけでなく、プロセスはGPU RAMを使用しています。

RAMが不足している場合は、プロセスを再起動して(RAMを解放する必要があります)、メモリをあまり使用しないアプローチをとる必要があります。いくつかのオプションは次のとおりです。

  • バッチサイズを減らす
  • より単純なモデルを使用する
  • より少ないデータを使用
  • tensorFlow GPUメモリの割合を制限する:たとえば、次のようにすると、TensorFlowがRAMの90%以下を使用するようになります。
import keras
import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))

上記の項目と一緒に使用しないと、モデルの評価が遅くなる可能性があります。

3. CUDA、TensorFlow、NVIDIAドライバーなどの互換性のないバージョンがあります。

同様のモデルが機能していない場合は、VRAMおよびが不足していないため、キャッシュはクリーンです。戻って設定します。利用可能な最良のインストールガイドを使用したCUDA + TensorFlow-NVIDIA/CUDAサイトの手順ではなく、 https://www.tensorflow.org/install/gp の指示に従うことで最も成功しました。

3
waterproof