私は示唆している私のTensorFlow深い学習モデルのGPUのメモリフットプリントにラフなハンドルを取得しようとしている、としてa heuristic I've foundに頼っています:TensorFlowモデルのGPUフットプリントはどのように見積もりますか?
ConvNet アーキテクチャをされて構築する際の注意すべき最大のボトルネックメモリのボトルネック。最新のGPUの多くは、3/4/6GBメモリの制限が で、最高のGPUは約12GBのメモリを搭載しています。中間ボリュームサイズから
: を追跡するために、メモリの三の大原因があるこれらは、同じサイズの生ConvNetのすべての層で アクティベーションの数、またその勾配 (あります)。通常、ほとんどのアクティベーションは、ConvNetの最初のレイヤー(つまり、最初のコンバレイヤー)にあります。これらは、バックプロパゲーションに必要であるため、 の周囲に保持されていますが、テスト時にのみConvNetを実行する巧妙な 実装では、 のアクティブ化をすべてのレイヤーに保存し、下の レイヤーのアクティベーションパラメータサイズから
:最適化は勢い、 Adagrad、またはRMSPropを使用している場合 はまた、一般的にステップキャッシュをバックプロパゲーション、 中にネットワークパラメータ、その勾配を保持していること、これらは数字があります。したがって、パラメータ ベクトルだけを格納するメモリには、通常少なくとも3または の係数を乗算する必要があります。
すべてConvNet実装は、 等の画像データバッチ、おそらくそれらの拡張バージョンとして
もし値の合計数の概算を取得したら
(のためのその他のメモリを維持しなければなりません アクティベーション、グラデーション、その他)は、数字を (GB単位)に変換する必要があります。値の数を取って、生の のバイト数を得るには4を掛けてください(浮動小数点はすべて4バイトなので、多分倍精度の場合は8 )。1024を複数回に分けて、メモリの量を にしますKB単位、MB単位、および最終的にGB単位で指定します。ネットワーク が適合しない場合は、一般に の起動によってメモリの大部分が消費されるため、「適合させる」というヒューリスティックは、 のバッチサイズを減らすことです。
しかし、私はいくつかのことがわからないよ:
- この計算でバッチサイズの役割は何ですか?アクティベーションにのみ影響するようです(つまり、バッチサイズでアクティベーションを増やす必要があります)。あれは正しいですか?
- GPU(12GiBあり)とCPUのRAM(TensorFlow)にどのようなものがあるのかをどのように知るのですか?一般的にこれらのほとんどすべてがGPUにありますか?
- 「雑貨」はどこで探すべきですか?入力データはこれの主なソースですか?もしそうなら、そのようなデータの1つのバッチ、またはそのすべてを数えますか?
は、あなたが質問1-3にその翻訳することができます元のテキストを解釈することに関係しているからですか? – orome
3つの異なるパラグラフ、ポイントごとに1つがあります。しかし、私は編集するつもりです – nessuno