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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2148閲覧

python 機械学習でResourceExhaustedError

harug

総合スコア28

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/06/02 11:20

編集2022/06/02 13:05

前提

画像データを用いた機械学習を実装中にエラーが発生しました.
用いたネットワークはCNN,loss関数にはcontrastive loss関数を用いた,Siamese Networkという距離学習手法を実装しています.

下の図はmodel.summary()の実行結果です.
model.summary()

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- ResourceExhaustedError Traceback (most recent call last) <ipython-input-37-5dda512c50ab> in <module> 15 steps_per_epoch = 10, 16 validation_steps = None, ---> 17 validation_data=([te_pairs[:, 0], te_pairs[:, 1]], te_y)) 18 /usr/local/lib/python3.5/dist-packages/tensorflow/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, max_queue_size, workers, use_multiprocessing, **kwargs) 1637 initial_epoch=initial_epoch, 1638 steps_per_epoch=steps_per_epoch, -> 1639 validation_steps=validation_steps) 1640 1641 def evaluate(self, /usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/engine/training_arrays.py in fit_loop(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps) 152 callbacks.on_batch_begin(step_index, batch_logs) 153 try: --> 154 outs = f(ins) 155 except errors.OutOfRangeError: 156 logging.warning('Your dataset iterator ran out of data; ' /usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/backend.py in __call__(self, inputs) 2984 2985 fetched = self._callable_fn(*array_vals, -> 2986 run_metadata=self.run_metadata) 2987 self._call_fetch_callbacks(fetched[-len(self._fetches):]) 2988 return fetched[:len(self.outputs)] /usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py in __call__(self, *args, **kwargs) 1437 ret = tf_session.TF_SessionRunCallable( 1438 self._session._session, self._handle, args, status, -> 1439 run_metadata_ptr) 1440 if run_metadata: 1441 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr) /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg) 526 None, None, 527 compat.as_text(c_api.TF_Message(self.status.status)), --> 528 c_api.TF_GetCode(self.status.status)) 529 # Delete the underlying status object from memory otherwise it stays alive 530 # as there is a reference to status from this from the traceback due to ResourceExhaustedError: OOM when allocating tensor with shape[1392,64,128,128] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [[{{node sequential/conv2d/Conv2D}} = Conv2D[T=DT_FLOAT, _class=["loc:@train...propFilter"], data_format="NCHW", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:GPU:0"](training_11/RMSprop/gradients/sequential/conv2d/Conv2D_grad/Conv2DBackpropFilter-0-TransposeNHWCToNCHW-LayoutOptimizer, sequential/conv2d/Conv2D/ReadVariableOp)]] Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info. [[{{node loss_11/add_2/_553}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_926_loss_11/add_2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]] Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.

該当のソースコード

入力画像は128×128の画像です.
各データのshapeはコメントアウトで記載しております.

python

1tr_y = tf.cast(tr_y, dtype='float32') # Tensor("Cast:0", shape=(1392,), dtype=float32) 2te_y = tf.cast(te_y, dtype='float32') # Tensor("Cast_1:0", shape=(124,), dtype=float32) 3 4rms = RMSprop() 5model.compile(loss=contrastive_loss, optimizer=rms, metrics=[accuracy]) 6 7H = model.fit([tr_pairs[:, 0], tr_pairs[:, 1]], tr_y, # tr_pairs[:, 0].shape = (1392, 128, 128, 1), 8 # tr_pairs[:, 1].shape = (1392, 128, 128, 1) 9 10 epochs=20, 11 verbose=1, 12 steps_per_epoch = 10, 13 validation_steps = None, 14 validation_data=([te_pairs[:, 0], te_pairs[:, 1]], te_y)) # te_pairs[:, 0].shape = (124, 128, 128, 1), 15 # te_pairs[:, 1].shape = (124, 128, 128, 1)

試したこと

おそらくメモリ不足によるエラーだと思い,jupyter labのカーネルを初期化してから実行してみたり,入力する画像数の削減などを試しましたが同じエラーが吐かれます.
7952MiBのGPUサーバを使用しているので,このようにメモリ不足になるのが少し不思議です.

他に原因があるのかと思い質問させていただきました.
有識者の方,何か対処の仕方が分かりましたら教えていただきたいです.

補足情報(FW/ツールのバージョンなど)

サーバPCのスペック

OS : Ubuntu 16.04.5 LTS
CPU : Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz
RAM : 32GiB
グラフィックカード : GeForce RTX 2080 x2

その他バージョン

Python : 3.5.2
TensorFlow : 1.13.0-rc0
Keras : 2.3.1

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

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

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

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

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

jbpb0

2022/06/03 23:17

> jupyter labのカーネルを初期化してから実行してみたり jupyterは正常に終了しないと、GPUのメモリーが確保されたままになり、その場合はパソコンを再起動する必要があります https://betashort-lab.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/python/jupyternotebook%E3%81%A7gpu%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E8%A7%A3%E6%94%BE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-windows%E7%B7%A8/ パソコンを再起動して、その直後に実行してもダメでしょうか?
harug

2022/06/04 11:24

ご回答ありがとうございます。 いつも、jupyter labをshutdownボタンを押してからブラウザを消していたのですが、それではダメなのでしょうか。
jbpb0

2022/06/04 12:52

普通は大丈夫ですが、pythonが異常終了した場合はshutdownができてないかもしれません ダメ元で、パソコンを再起動して、その直後に実行してみたらいかがでしょうか それでもダメなら、そういう話では無いと分かりますし
harug

2022/06/04 13:55

パソコンを再起動しても変わらずエラーが吐かれました。 しかし先ほど、別のパソコンにプログラムのジップファイルを送信し、このプログラムを実行すると無事実行できました。 ですがその後、Restart the Kernelボタンを押しても、PCを再起動して実行してみても二回目以降の実行では再び同じエラーが吐かれるといった状況です。 原因は何でしょうか。 Restart the Kernelボタンでは、変数のメモリのキャッシュはできないのでしょうか。
jbpb0

2022/06/04 15:04 編集

nvidia-smiで、 ・jupyter起動前 ・jupyterでpython実行中 ・jupyterのRestart the Kernelボタンをクリック後 ・jupyterのshutdownボタンをクリック後 のそれぞれの状態でのGPUのメモリーの使用量を確認してみてください https://note.nkmk.me/nvidia-smi-monitoring-gpu/
guest

回答1

0

7952MiBのGPUサーバを使用しているので,このようにメモリ不足になるのが少し不思議

nvidia-smiで、
・jupyter起動前
・jupyterでpython実行中
・jupyterのRestart the Kernelボタンをクリック後
・jupyterのshutdownボタンをクリック後
のそれぞれの状態でのGPUのメモリーの使用量を確認して、メモリーの余裕が常に十分にあるかを確認してみてください

参考
watch nvidia-smiでGPU使用率などを確認・リアルタイムモニタリング

 
経験的には、python実行中の普段は最低でも0.5GB以上空いてないと、よく落ちます

投稿2022/07/29 10:12

jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問