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

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

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

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

Python 3.x

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

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

2回答

2735閲覧

複数のGPUメモリを最大限使う方法

harug

総合スコア28

JupyterLab

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

Python 3.x

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

メモリリーク

メモリリークは、プログラムファイルがメモリの解放に失敗した時に起こります。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2022/07/01 12:42

編集2022/07/02 02:54

前提・実現したいこと

プログラム実行時にGPU:0,GPU:1,GPU2,GPU:3のすべてのGPUメモリを最大限使用できるようにしたいです.
現在こちらと同じような問題に悩まされています.

jupyter lab上でpythonのプログラムを実行しているのですが,os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"として実行してもOOMエラーが吐かれてしまいます.

!nvidia-smiの実行結果は以下のようになりました.
ちなみにモデルはシャムネットワーク,訓練データ数は900000,データタイプはfloat32,バッチサイズは1です.

↓実行前

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.156.00 Driver Version: 450.156.00 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-DGXS... On | 00000000:07:00.0 Off | 0 | | N/A 59C P0 226W / 300W | 5442MiB / 32499MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-DGXS... On | 00000000:08:00.0 Off | 0 | | N/A 59C P0 233W / 300W | 5350MiB / 32508MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 2 Tesla V100-DGXS... On | 00000000:0E:00.0 Off | 0 | | N/A 58C P0 226W / 300W | 5350MiB / 32508MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 3 Tesla V100-DGXS... On | 00000000:0F:00.0 Off | 0 | | N/A 56C P0 230W / 300W | 5350MiB / 32508MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+

↓実行後

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.156.00 Driver Version: 450.156.00 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-DGXS... On | 00000000:07:00.0 Off | 0 | | N/A 59C P0 240W / 300W | 31911MiB / 32499MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-DGXS... On | 00000000:08:00.0 Off | 0 | | N/A 59C P0 233W / 300W | 5789MiB / 32508MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 2 Tesla V100-DGXS... On | 00000000:0E:00.0 Off | 0 | | N/A 58C P0 226W / 300W | 5789MiB / 32508MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 3 Tesla V100-DGXS... On | 00000000:0F:00.0 Off | 0 | | N/A 56C P0 230W / 300W | 5789MiB / 32508MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+

どうやらos.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"で優先的にGPU:0を使用し,それ以外はまんべんなく少し使用しているようですが,GPU:0が上限に達したらOOMエラーを吐いているのでしょうか.

GPU:0が上限に達したら次はGPU:1というように,複数のGPUメモリを最大限使う方法はないのでしょうか.

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

ubuntu 20.04
Python 3.8.10

tensorflow 1.15.5+nv22.5
tensorflow-estimator 1.15.1

Keras-Applications 1.0.8
Keras-Preprocessing 1.0.5

jupyter lab 2.3.2

PCスペックはこちらの都合上記載できません.すみません.

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/07/01 16:22

古めのTFはGPUの管理がずさんだったと思います。TFv2系までアップグレードしてTFv1の再現モード(?)で動かした方がうまくいきそうな気もします(保証はないですので、やるのであれば要バックアップです)
退会済みユーザー

退会済みユーザー

2022/07/02 03:45 編集

CUDAで4つGPUを認識できるようにした「だけ」で、TF側で使うGPUの個数を指定していない可能性はありませんか? > それ以外はまんべんなく少し使用しているようですが,GPU:0が上限に達したらOOMエラーを吐いているのでしょうか. 環境側であるCUDAで4台使えるようにしておいても、使う側のTFでデフォルト設定なのか標準構成なのかで1台しか使えるようになっているのかも、と思った次第です。ほかのGPUも少し使っているように見えているだけで、実際のところは使っていないのかな、という印象を受けました。 > PCスペックはこちらの都合上記載できません.すみません. GPU構成が特殊過ぎて、推定型番が出せてしまいます(私からあえてここで載せることはしません)。検索でヒットさせたくないか、本気で知られたくないかで対応が変わってくると思います。
harug

2022/07/06 02:30

アドバイスいただき,誠にありがとうございます. 現在は,ライブラリのバージョンを変更すると問題なく動作するようになりした. また途中で同様の問題が発生したら,また参考にさせていただきます. よろしくお願いします.
guest

回答2

0

自己解決

tensorflow-gpu==2.5.3 keras==2.8.0 numpy==1.19.5

に変更すると,問題なく動作するようになりました.

投稿2022/07/06 02:30

harug

総合スコア28

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

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

0

ソースコードが開示されていないので推定の話です。

TFv1.15でmulti GPUの処理をしようとすると、multi_gpu_modelというモジュールがカギということがわかりました。

日本語の説明で実際に使ったコードもあるといい、ということで探すと、Kerasで複数のGPUを使い、学習を高速化してみたという記事が見つかりました(※ただしTF 1.4.x)。恐らく関数の使い方は変わっていないと思いますので、使い方の参考にすればよいと思います。

キモは、以下の3点のようです。
・ バッチサイズをGPUの倍数にする
・ OOMを起こさないようにモデルはCPUで定義する
・ multi_gpu_modelTF側で使えるGPUの個数を定義する

投稿2022/07/02 04:14

編集2022/07/02 04:15
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

harug

2022/07/02 14:55

回答ありがとうございます. 上記のバージョンではうまく動作せずmulti_gpu_modelの部分でインポートエラーが吐かれましたが, numpy==1.19.5,tensorflow==2.2.0,keras==2.2.4 として実行するとエラーは消えました. しかし,次はmodel = multi_gpu_model(model, gpus=gpu_count)の部分で以下のエラーが吐かれました. AttributeError: module 'tensorflow' has no attribute 'get_default_session' どうやら,こちらはv1系のtensorflowにしか対応していない?ようです. しかし,pythonのバージョンは下げることができないのでpythonはこのままのバージョンで作業をしたいのですが困っています.
harug

2022/07/06 02:27

アドバイスいただき,誠にありがとうございます. しかし,ライブラリのバージョンを変更すると,今のところは問題なく動作するようになりした(なぜか). また途中で同様の問題が発生したらお世話になるかもしれません. その時はよろしくお願いします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問