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

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

ただいまの
回答率

87.38%

CUDAのエラーについて

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 132

score 5

前提・実現したいこと

python3.8
cuda10.1
cuDNN7.6
tensorflow-gpu 2.3を使用しています

申し訳ございませんがエラーがでている意味もあまりわかっていない状況です。自分なりにメモリを制限するコードなどを試して見ましたが効果はありませんでした。
お手数をおかけしますが宜しくおねがい致します。

コードとエラーメッセージになります

from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.applications.vgg16 import preprocess_input
from tensorflow.keras.models import Model
from tensorflow.keras.models import load_model
#tokenizerをloadする
tokenizer = load(open('tokenizer1.pkl', 'rb'))
#trainigしたときのpre-defineでmax sequence lengthの値
max_length = 43
#modelのload
model = load_model('model-ep004-loss2.778-val_loss3.210.h5')
#text_readingに使われる画像のpath
text_reading_image_path ='image2.png'
class Image_captioning: #説明文を生成するクラス     
    # extract features from each photo in the directory
    def extract_features(self,filename):
        print('a')
        # load the model
        model = VGG16()
        print('b')
        # re-structure the model
        model.layers.pop()
        print('c')
        model = Model(inputs=model.inputs, outputs=model.layers[-1].output)
        print('d')
        # load the photo
        image = load_img(filename, target_size=(224, 224))
        print('e')
        # convert the image pixels to a numpy array
        image = img_to_array(image)
        print('f')
        # reshape data for the model
        image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
        print('g')
        # prepare the image for the VGG model
        image = preprocess_input(image)
        print("h")
        # get features
        feature = model.predict(image, verbose=0)
        print('i')
        return feature
    # map an integer to a word
    def word_for_id(self,integer, tokenizer):
        for word, index in tokenizer.word_index.items():
            if index == integer:
                return word
        return None

    # generate a description for an image
    def generate_desc(self,model, tokenizer, photo, max_length):
        # seed the generation process
        in_text = 'startseq'
        # iterate over the whole length of the sequence
        for i in range(max_length):
            # integer encode input sequence
            sequence = tokenizer.texts_to_sequences([in_text])[0]
            # pad input
            sequence = pad_sequences([sequence], maxlen=max_length)
            # predict next word
            yhat = model.predict([photo,sequence], verbose=0)
            # convert probability to integer
            yhat = argmax(yhat)
            # map integer to word
            word = self.word_for_id(yhat, tokenizer)
            # stop if we cannot map the word
            if word is None:
                break
            # append as input for generating the next word
            in_text += ' ' + word
            # stop if we predict the end of the sequence
            if word == 'endseq':
                break
        return in_text
    def text_reading(self):
        photo = self.extract_features(text_reading_image_path)
        d = self.generate_desc(model, tokenizer, photo, max_length)
        description = d.replace('startseq',' ',1).replace('endseq',' ',1)
        print(description)
        sound = gTTS(text=description,lang='ja',slow=False)
        sound.save('/home/limlab/program/navigation/potential/voice/navigation.mp3')
        playsound('/home/limlab/program/voice/1.wav')
        playsound("/home/limlab/program/navigation/potential/voice/navigation.mp3") 
#ここからはエラーメッセージとなります
a
2021-11-21 11:58:17.479209: I tensorflow/stream_executor/cuda/cuda_driver.cc:775] failed to allocate 1.00G (1073741824 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
2021-11-21 11:58:17.479540: I tensorflow/stream_executor/cuda/cuda_driver.cc:775] failed to allocate 921.60M (966367744 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
2021-11-21 11:58:17.479817: I tensorflow/stream_executor/cuda/cuda_driver.cc:775] failed to allocate 829.44M (869731072 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
2021-11-21 11:58:17.480066: I tensorflow/stream_executor/cuda/cuda_driver.cc:775] failed to allocate 746.50M (782758144 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
2021-11-21 11:58:17.480313: I tensorflow/stream_executor/cuda/cuda_driver.cc:775] failed to allocate 671.85M (704482304 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
2021-11-21 11:58:17.480559: I tensorflow/stream_executor/cuda/cuda_driver.cc:775] failed to allocate 604.66M (634034176 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
2021-11-21 11:58:18.318427: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 411041792 exceeds 10% of free system memory.
b
c
d
e
f
g
h
2021-11-21 11:58:18.680658: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcublas.so.10
2021-11-21 11:58:18.779763: E tensorflow/stream_executor/cuda/cuda_blas.cc:225] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED
2021-11-21 11:58:18.781533: E tensorflow/stream_executor/cuda/cuda_blas.cc:225] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED
2021-11-21 11:58:18.782176: E tensorflow/stream_executor/cuda/cuda_blas.cc:225] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED
2021-11-21 11:58:18.782845: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudnn.so.7
2021-11-21 11:58:18.785736: E tensorflow/stream_executor/cuda/cuda_dnn.cc:328] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2021-11-21 11:58:18.786488: E tensorflow/stream_executor/cuda/cuda_dnn.cc:328] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2021-11-21 11:58:18.786504: W tensorflow/core/framework/op_kernel.cc:1767] OP_REQUIRES failed at conv_ops_fused_impl.h:642 : Unknown: 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.

試したこと

下記のコードを挿入し改善しようとしました。

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
torch.rand(1).cuda()

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • jbpb0

    2021/11/22 16:26

    質問のコードは学習をしないで推論(predict)のみですが、「物体検出」と「説明文生成」は学習は別個に行って、連続で実行するのは推論の場合だけでしょうか?

    もしそうなら、GPUを使わずにCPUのみでの推論で実行時間が満足できるのなら、そうするという手もあります
    一般的にはCPUのメモリーの方が増やしやすく、メモリー不足を解消しやすいので
    (パソコンのハード構成次第ですが)

    キャンセル

  • reiya_123

    2021/11/22 21:56

    > 物体検出」と「説明文生成」は学習は別個に行って、連続で実行するのは推論の場合だけでしょうか?

    追加していなく申し訳ございません。
    model = load_model('/home/limlab/program/data/model-ep004-loss2.778-val_loss3.210.h5')
    上記のものを読み込んでいます
    リアルタイムで物体検出をし、modelを使い説明文を生成しています

    キャンセル

  • jbpb0

    2021/11/24 11:30

    > リアルタイムで物体検出をし、modelを使い説明文を生成しています

    なら、Pythonの終了・再度起動を繰り返すのは時間がかかりすぎるので、無理ですね


    CPUのみでの「物体検出」と「説明文生成」の連続推論では間に合わないなら、

    > Geforce gtx1650で4gbですが8gb以上の環境にしたほうが良さそうでしょうか。

    ですね

    キャンセル

回答 1

0

nvidia-smiでNVIDIA GPU使用状況をモニタリングする
とかを参考にして、「nvidia-smi」コマンドを使って、下記のそれぞれの状態でGPUのメモリーの使用量と残り量がどれくらいかを確認してみてください
・Pythonコード実行前
・「物体検出」のコードのみの実行中
・「説明文生成する関数」のみの実行中

「物体検出」と「説明文生成」は、全く別のネットワークでしょうから、連続で動かしたければ、両方のメモリー使用量の合計が一度に確保できないとダメだと思います

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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