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

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

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

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

深層学習

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

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

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

Q&A

3回答

12766閲覧

yolov5の学習時に「CUDA out of memory」とエラー表示される

Saba3

総合スコア15

CUDA

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

深層学習

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

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

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

0グッド

0クリップ

投稿2021/05/18 14:36

前提・実現したいこと

yolov5を用いて物体検出をしたい。

教えていただきたいこと

学習時に以下のエラーメッセージが表示され、学習がストップしてしまう。

CUDA out of memory. Tried to allocate 12.50 MiB (GPU 0; 10.92 GiB total capacity; 8.57 MiB already allocated; 9.28 GiB free; 4.68 MiB cached)

該当のソースコード

python train.py --img 640 --batch 32 --epochs 100 --data training/dataset.yaml --cfg training/yolov5x-custom.yaml --weights 'yolov5x.pt '

試したこと

・海外のサイトを読んだのですが、どう具体的にGPUの容量を減らしているのか分からなかったです。
・batch数を16に変更すると学習するのですが、損失関数の値が大きくなってしまいます。
・他のyolov5l.ptの場合、batch数32のエポック数100でも学習はできましたが、損失関数のグラフが横ばいになってしまいます。

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

参考サイト:
yolov5:https://github.com/ultralytics/yolov5.git
CUDA out of memoyの対策:https://github.com/pytorch/pytorch/issues/16417

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

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

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

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

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

jbpb0

2021/05/18 14:54

https://github.com/pytorch/pytorch/issues/16417 に「You need at least as much system RAM free as GPU memory Pytorch is about to use.」と書かれてます system RAM(GPUではなくCPUのメモリー)の空き領域は、充分にありますでしょうか?
jbpb0

2021/05/18 22:34

上記Webページに書かれてる他の対策です 各エポックの最後に下記を追加実行します import gc gc.collect() torch.cuda.empty_cache()
Saba3

2021/05/19 02:14 編集

分かりました。 確認してGPUの容量を減らし、コメント文のコードを入力しても、 「 CUDA out of memory. Tried to allocate 16.00 MiB (GPU 0; 8.00 GiB total capacity; 6.22 GiB already allocated; 3.69 MiB free; 6.30 GiB reserved in total by PyTorch)」 とでてきました。 この場合、GPUの容量を極限まで減らすか別のバージョンのyolov5でエポック数を増やしてみるのがいいと考えています。 なにか他の対策を教えてくださると幸いです。
jbpb0

2021/05/19 06:40

> 確認してGPUの容量を減らし 「You need at least as much system RAM free as GPU memory Pytorch is about to use.」 は、PytorchはGPUのメモリーと同じくらいCPUのメモリーも使う、という意味です GPUのメモリーに充分に余裕があっても、CPUのメモリーに空きが残ってないとエラーになるので、CPUのメモリーの空き容量も確認してください
jbpb0

2021/05/19 06:47

https://github.com/pytorch/pytorch/issues/16417 の最後の方に、対策がまとめられています (これまでに書いてきたものと同内容ですが)  ・gc.collect()  ・torch.cuda.empty_cache()  ・halve the batch size from 4 to 2  ・increase system RAM 一番最後のは、「Once try to free the memory.Open task manager(ctrl+alt+del) and then start releasing the memory by ending unnecessary tasks.This worked in my case」と書かれてます (タスクマネージャーで、不要なタスクを終了させて、メモリーの空き容量を増やす)
Saba3

2021/05/26 10:00 編集

返信が非常に遅れてしまい申し訳ありません。 色々試した結果、バッチ数を24にし、エポック数を300にするのが限界でした。
guest

回答3

0

私も同じ問題に出くわしたのですが、ここに記載している方法以外で解決したので追記させていただきます。


colaboratoryを使っている場合の話であれば、
「ランタイム」メニューの「ランタイムを出荷時設定にリセット」を実行することによってにこの問題が解消しました。

イメージ説明

おそらくですが、私の場合はこれまでに実行してきたデータの残りかす(キャッシュなど)が溜まっていて、それらを掃除する必要があったのだと思います。

データ量次第ではありますが、一度このように掃除することによって学習が実行可能になる場合もあるという例として参考にしていただければ幸いです。


【参考】
他にも、stackoverflowにはこのような記事もありました。

How to avoid "CUDA out of memory" in PyTorch

エラー文や、その一部をキーワードとして検索すればまだまだ解決法は出てくるかもしれませんね。

投稿2021/12/12 00:22

siruku6

総合スコア1382

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

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

0

cfgのsubdivisions=1
を16か32にしてみてはいかがでしょう?

投稿2021/08/06 17:21

A5_M

総合スコア2

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

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

Saba3

2021/09/08 06:55

ご指摘ありがとうございます。現在 YOLOv4での学習を実施しているのですが、その参考にさせていただきます。
guest

0

入力の画像サイズを小さくしてみるのはどうでしょう?
サイズはいくつでやってますか?

投稿2021/05/23 08:43

kyokio

総合スコア560

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

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

Saba3

2021/05/26 10:04

返信が非常に遅れてしまい申し訳ありません。 入力サイズは現在640で行っています 現在は320で行っています
kyokio

2021/05/26 10:20

私はYOLOv3でCPUで学習を行ないました。 現在はサイズ320で学習を行なっているとのことなので大丈夫だと思いますが、参考程度に私が学習を行なった時のパラメータを載せておきます。 training data: 450枚 validation data: 50枚 画像サイズ: 416*416 バッチサイズ: 8 イテレーション: 56
Saba3

2021/06/04 02:32

参考をご提供くださってありがとうございます。 参考にさせていただきます。
Saba3

2021/09/08 06:54

現在はGoogle ColabのPro版で実行を継続しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問