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

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

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

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2414閲覧

ディープラーニング の学習に必要な専用GPUメモリの計算方法を知りたい。

HayatoN

総合スコア11

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/06/25 12:37

前提・実現したいこと

状況によって変わると思いますが、ディープラーニングの学習をGPUを使用して行うのに必要な専用GPUメモリの容量の計算方法を教えて頂きたいです。

とゆうのも、U-netを使用してセグメンテーションを行おうとしているのですが、現在使用しているGPU(GeForce 1050 Ti、専用メモリ:4GB)では私の理想的なミニバッチ数を設定して実行するとOut of memoryとエラーが出てしまいます。そこで、新しいGPUを購入しようと考えているのですが、そのためにはモデルの学習に必要なGPU専用メモリの容量の計算方法を知らないと、どのGPUを買えばいいのか決めることが難しいため、困っております。

仮の設定

-タスク: 分類 -トレーニングデータ: 256×256の白黒(1 channel)画像が200枚 -テストデータ: その画像のカテゴリーの値(cat, apple, boatなど全10種類) -使用言語: python -フレームワーク: chainer -モデル: VGG16 -ミニバッチ数: 20 -最適化アルゴリズム: adam -エポック数: 300

私の考え

ミニバッチ分だけのデータをパラメータの更新のたびにGPU上にコピーしてゆくプログラムの場合、上の設定で必要なメモリは、 20(ミニバッチの数)×画像1枚の容量+VGG16の容量 これだけだと考えておりました。(ここで、VGG16の容量は学習後のmodelを保存(serializers.save_npzで)した後にできるパラメータの値を保持しているファイルの容量を調べて確認するものとします。) しかし実際には、タスクマネージャーで確認するとこの計算した容量よりも、もっと多くの容量が使用されていることが確認できました。 これは、私の計算が間違っているのでしょうか? それとも、モデルのパラメータの更新などの計算のためにも専用GPUメモリが使用されるからでしょうか?もしそうだとしたら、どのように、その計算のために使用されるメモリ量を計算することができるでしょうか? また、chainerの設定で、実際に必要なGPUのメモリよりも多くのメモリを確保する設定がデフォルトでされているのではないか、とも考えております。そこら辺もご存知でしたら、教えて頂きたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これは、私の計算が間違っているのでしょうか?

Deep Learning でメモリが必要となる主な部分は、

(1) モデルの重み (float 型は4バイトなので、パラメータ数 * 4バイト)
(2) バッチサイズ * 各層の出力

です。
質問の例だと (2) の考慮が抜けています。
Deep Learning は合成関数と考えることができますが、学習時はバックプロパゲーションを行う際にデルタの値を計算するために順伝搬時のすべての層の出力を記録しておく必要があります。
例えば、バッチサイズが N のとき、ある畳み込み層の出力の形状が (N, W, H, C) であったとき、これを記録しておく必要があります。
中間層すべての層の出力となると、結構な容量が必要になります。

GPU専用メモリの容量の計算方法を知らないと、どのGPUを買えばいいのか決めることが難しいため、困っております。

(地道に計算すればできるものの)実際に計算で算出するのはモデルが複雑だと大変なので、Google Colab のような GPU が 12G ぐらい使える環境で試しに動かしてみてはどうでしょうか。
もしそれで動けば、そのメモリ量があれば足りると判断できると思います。

【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory - Qiita

投稿2019/06/25 14:19

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問