Detectron: 4GBカヌドのメモリが䞍足しおいたす

䜜成日 2018幎01月24日  Â·  24コメント  Â·  ゜ヌス: facebookresearch/Detectron

Nvidia GTX 1050TiでFaster-RCNNを実行しようずしおいたすが、メモリが䞍足しおいたす。 Nvidia-smiによるず、玄170MBがすでに䜿甚されおいたすが、Faster-RCNNは実際に3.8GBのVRAMを䜿甚しお画像を凊理しおいたすか

Mask-RCNN入門チュヌトリアルのモデルも詊しおみたしたが、クラッシュする前に玄4぀の画像ブラりザヌを閉じた堎合は5぀を取埗したした。

これはバグですか、それずも本圓に4GB以䞊のメモリが必芁ですか

INFO infer_simple.py: 111: Processing demo/18124840932_e42b3e377c_k.jpg -> /home/px046/prog/Detectron/output/18124840932_e42b3e377c_k.jpg.pdf
terminate called after throwing an instance of 'caffe2::EnforceNotMet'
  what():  [enforce fail at blob.h:94] IsType<T>(). wrong type for the Blob instance. Blob contains nullptr (uninitialized) while caller expects caffe2::Tensor<caffe2::CUDAContext> .
Offending Blob name: gpu_0/conv_rpn_w.
Error from operator: 
input: "gpu_0/res4_5_sum" input: "gpu_0/conv_rpn_w" input: "gpu_0/conv_rpn_b" output: "gpu_0/conv_rpn" name: "" type: "Conv" arg { name: "kernel" i: 3 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 1 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 0 } engine: "CUDNN"
*** Aborted at 1516787658 (unix time) try "date -d @1516787658" if you are using GNU date ***
PC: @     0x7f08de455428 gsignal
*** SIGABRT (@0x3e800000932) received by PID 2354 (TID 0x7f087cda9700) from PID 2354; stack trace: ***
    @     0x7f08de4554b0 (unknown)
    @     0x7f08de455428 gsignal
    @     0x7f08de45702a abort
    @     0x7f08d187db39 __gnu_cxx::__verbose_terminate_handler()
    @     0x7f08d187c1fb __cxxabiv1::__terminate()
    @     0x7f08d187c234 std::terminate()
    @     0x7f08d1897c8a execute_native_thread_routine_compat
    @     0x7f08def016ba start_thread
    @     0x7f08de52741d clone
    @                0x0 (unknown)
Aborted (core dumped)

enhancement

最も参考になるコメント

1぀の远加の泚意珟圚の実装では、トレヌニング䞭にメモリの最適化が䜿甚されたすが、掚論䞭には䜿甚されたせん。 掚論の堎合、䞀床消費されるず䞭間アクティベヌションが䞍芁になるため、メモリ䜿甚量を倧幅に削枛できたす。 将来的には、掚論のみのメモリ最適化を远加するこずを怜蚎したす。

党おのコメント24件

こんにちは@ Omegastick 、Faster R-CNNアルゎリズムのメモリ芁件は、バックボヌンネットワヌクアヌキテクチャや䜿甚するテストむメヌゞスケヌルなど、さたざたな芁因によっお異なりたす。

たずえば、次を䜿甚しお、デフォルトのResNet-50構成でFasterR-CNNを実行できたす。

python2 tools/infer_simple.py \
  --cfg configs/12_2017_baselines/e2e_faster_rcnn_R-50-FPN_2x.yaml \
  --output-dir /tmp/detectron-visualizations \ 
  --image-ext jpg \
  --wts https://s3-us-west-2.amazonaws.com/detectron/35857389/12_2017_baselines/e2e_faster_rcnn_R-50-FPN_2x.yaml.01_37_22.KSeq0b5q/output/train/coco_2014_train%3Acoco_2014_valminusminival/generalized_rcnn/model_final.pkl \
  demo

デモむメヌゞで実行するのに3GB以䞊は必芁ありたせん。

1぀の远加の泚意珟圚の実装では、トレヌニング䞭にメモリの最適化が䜿甚されたすが、掚論䞭には䜿甚されたせん。 掚論の堎合、䞀床消費されるず䞭間アクティベヌションが䞍芁になるため、メモリ䜿甚量を倧幅に削枛できたす。 将来的には、掚論のみのメモリ最適化を远加するこずを怜蚎したす。

@Omegastick私のマシンでテストしたずころ、Faster RCNN- resnet101ずMaskRCNN- resnet101はどちらも玄4GBのGPUメモリを䜿甚しおいたす。

@ ir413おかげで、あなたがリンクしたモデルは私のマシンでうたく機胜したす2.5GBのVRAM䜿甚量で実行されたす。

掚論にGPUがたったく必芁ないのであれば、それはすばらしいこずです。

2GメモリGPUでmask-rcnnを実行するにはどうすればよいですか 誰かが私を助けるこずができたすか

この問題は、Caffe 2たたはDetectronの実装が原因ですか この問題を解決するには、Detectronのどのファむルを確認する必芁がありたすか

@rbgirshick

掚論の堎合、䞀床消費されるず䞭間アクティベヌションが䞍芁になるため、メモリ䜿甚量を倧幅に削枛できたす。 将来的には、掚論のみのメモリ最適化を远加するこずを怜蚎したす。

PyTorch / Caffe2にはすでに䜕かが実装されおいたすか はいの堎合、どこを掘る必芁がありたすか

@gadcamこれは長い間私のcaffe2.python.memonger.release_blobs_when_used https://github.com/pytorch/pytorch/blob/master/caffe2/python/memonger.py#L229は、必芁なもののほずんどを実装する必芁があるず思いたす。 ただし、察凊する必芁のある重芁な問題がいく぀かありたす。

  • 䞀郚のネットワヌクマスクR-CNNなどでは、掚論時に耇数のネットが䜿甚されるため、1぀のグラフのみを掚論しおすべおのアクティベヌションを解攟できるわけではありたせんマスクヘッドネットなどの別のグラフで必芁になる堎合があるため。
  • この機胜では、テストしおいないキャッシュメモリマネヌゞャヌを䜿甚する必芁があるため、単にオンにするだけでは問題が発生する可胜性がありたす。

@rbgirshick詳しい説明ありがずうございたす

私が理解しおいるように、私たちにずっおrelease_blobs_when_usedは、通垞のProtoから「メモリ最適化」ぞのコンバヌタヌずしお機胜したす。

䞀郚のネットワヌクマスクR-CNNなどでは、掚論時に耇数のネットが䜿甚されるため、1぀のグラフのみを掚論しおすべおのアクティベヌションを解攟できるわけではありたせんマスクヘッドネットなどの別のグラフで必芁になる堎合があるため。

蚀い換えれば、 dont_free_blobsを第2段階で䜿甚されるブロブで埋める必芁がありたすか

この機胜では、テストしおいないキャッシュメモリマネヌゞャヌを䜿甚する必芁があるため、単にオンにするだけでは問題が発生する可胜性がありたす。

したがっお、テストする堎合は、 FLAGS_caffe2_cuda_memory_poolをcub たたはthc に蚭定する必芁がありたすが、Pythonでこれを行うこずはできたすか
私が芋぀けるこずができたそれぞの非垞に垌少な参照の1぀はここにありたすhttps://github.com/pytorch/pytorch/blob/6223bfdb1d3273a57b58b2a04c25c6114eaf3911/caffe2/core/context_gpu.cu#L190

@gadcam

私が理解しおいるように、release_blobs_when_usedは、通垞のProtoから「メモリ最適化」ぞのコンバヌタヌずしお機胜したす。

それは正解です。 蚈算グラフを分析し、各blobがい぀䜿甚されなくなるかを決定しおから、メモリ解攟操䜜を挿入したす。

蚀い換えれば、dont_free_blobsを第2段階で䜿甚されるblobで埋める必芁がありたすか

はい、この関数がどれだけうたく䜿甚および/たたはテストされおいるかわからないずいう譊告がありたす...コヌドをgrepするこずから、実際には䜿甚されおいないようです。 したがっお、期埅どおりに機胜しない可胜性があるこずに泚意しおください。

したがっお、テストする堎合は、FLAGS_caffe2_cuda_memory_poolをcubたたはthcに蚭定する必芁がありたすが、Pythonでこれを行うこずはできたすか

はい。 新しく远加されたthcメモリマネヌゞャヌの方が効率的だず思いたす。 最近の異なるもののナヌスケヌスでは、 cub代わりにそれを䜿甚する必芁がありたした。

@rbgirshickあなたは正しいです、それは危険な道のように芋えたす

はい。 新しく远加されたメモリマネヌゞャの方が効率的だず思いたす。 最近の異なるもののナヌスケヌスでは、cubの代わりにそれを䜿甚する必芁がありたした。

私が意味したのは、それを行うためのドキュメントがどこにあるか知っおいたすか、それずも䟋がありたすか これを䞻匵しお本圓に申し蚳ありたせん、倚分私は䜕かを逃したかもしれたせんが、それに関するドキュメントを芋぀けるこずができたせんでした

ドキュメントに関する

@asaadaldienご迷惑をおかけしお申し蚳ありたせんが、あなたはアドバむスをいただいた数少ない人の1人のようです。

caffe2_cuda_memory_poolが蚭定されおいるこずを確認しおください

memongerたたはdata_parallel_modelを䜿甚する堎合参照甚にここにありたす。
キャッシュメモリマネヌゞャヌを有効にする方法に぀いおのヒントはありたすか PythonでCaffe2を䜿甚

@gadcam cubをcaffe2_cuda_memory_poolフラグに枡すこずで、cubキャッシュアロケヌタを有効にできたす。 䟋

workspace.GlobalInit([
'--caffe2_cuda_memory_pool=cub',
])

ただし、これは動的メモリメモリを䜿甚する堎合にのみ必芁です。

@asaadaldien
GlobalInitに関するドキュメントがないため、その方法を理解するのに倚くの時間がかかりたした。
手䌝っおくれおありがずうございたす だから今、私はいく぀かの実隓を始めるこずができたす

私はこの問題に察する簡単な解決策を持っおいたす。
'P2〜P5'ず 'rois'を出力blobずしお蚭定できたすが、䞭倮のblobだけでなく、メモリ最適化を䜿甚する堎合は最適化されたせん。

私にはうたくいかないようです。
私がテストしたモデルはe2e_keypoint_rcnn_R-50-FPN_s1x.yamlです。
model.net郚分に察しおテストしおみたした。

テストにはinfer_simple.pyたした。

workspace.GlobalInit(['caffe2', '--caffe2_log_level=0', '--caffe2_cuda_memory_pool=thc']) 

ず

dont_free_blobs = set(model.net.Proto().external_output)
expect_frees = set(i for op in model.net.Proto().op for i in op.input)
expect_frees -= dont_free_blobs

opti_net = release_blobs_when_used(model.net.Proto(), dont_free_blobs, selector_fun=None)
model.net.Proto().op.extend(copy.deepcopy(opti_net.op))

test_release_blobs_when_used(model.net.Proto(), expect_frees) 

ここで、 test_release_blobs_when_usedはhttps://github.com/pytorch/pytorch/blob/bf58bb5e59fa64fb49d77467f3466c6bc0cc76c5/caffe2/python/memonger_test.py#L731に觊発されおい

def test_release_blobs_when_used(with_frees, expect_frees):
    found_frees = set()
    for op in with_frees.op:
        if op.type == "Free":
            print("OP FREEE", op)
            assert(not op.input[0] in found_frees)  # no double frees
            found_frees.add(op.input[0])
        else:
            # Check a freed blob is not used anymore
            for inp in op.input:
                assert(not inp in found_frees)
            for outp in op.output:
                assert(not outp in found_frees)

    try:
        assert(expect_frees == found_frees)
    except:
        print("Found - Expect frees Nb=", len(found_frees - expect_frees), found_frees - expect_frees, "\n\n\n")
        print("Expect - Found frees Nb=", len(expect_frees - found_frees), expect_frees - found_frees, "\n\n\n")
       #assert(False)

dont_free_blobsが正しい倀に蚭定されおいないこずに泚意しおください

この関数は、予期しないblobが解攟されるこずはなく、䞀郚が欠萜しおいるこずを瀺しおいたす。
 dont_free_blobsが正しくないため、これは正垞です
だから私はモデルを実行し続けたす。

そしお...䜕も起こりたせん。 save_graph関数を䜿甚しお確認したした。無料の操䜜は、実際に適切な堎所にありたす。

このラむンのサンプル入力のメモリ䜿甚量は1910Mo +/- 5Moです。
https://github.com/facebookresearch/Detectron/blob/6c5835862888e784e861824e0ad6ac93dd01d8f5/detectron/core/test.py#L158

しかし、メモリマネヌゞャをCUBに蚭定するず、本圓に驚くべきこずが起こりたす。

workspace.GlobalInit(['caffe2', '--caffe2_log_level=0', '--caffe2_cuda_memory_pool=cub']) 

RunNet行のRAM䜿甚量は、3 Go !!のように増加したす。 通垞のコヌドたたは無料のblobを䜿甚したカスタムコヌドを䜿甚

䜕が起こっおいるのか理解できたせん...

507で説明されおいるように、Jetson TX1で掚論を開始するず、メモリ䞍足゚ラヌも発生したす。
このスレッドで説明されおいる゜リュヌションは、次のようになりたす。
python2 tools/infer_simple.py \ --cfg configs/12_2017_baselines/e2e_faster_rcnn_R-50-FPN_2x.yaml \ --output-dir /tmp/detectron-visualizations \ --image-ext jpg \ --wts https://s3-us-west-2.amazonaws.com/detectron/35857389/12_2017_baselines/e2e_faster_rcnn_R-50-FPN_2x.yaml.01_37_22.KSeq0b5q/output/train/coco_2014_train%3Acoco_2014_valminusminival/generalized_rcnn/model_final.pkl \ demo
たた、動䜜したせん。合蚈4 GBのRAMを䜿甚できたすがCPUずGPUのメモリは共有されおいたすが、メモリが䞍足しおいたす。
私が詊すこずができるより小さなモデルはただありたすか
@Omegastickが説明したように、最倧​​2.5 GBのメモリしか必芁ずしないはずですが、それでもJetsonには収たらないようです。 私が詊すこずができる他の提案はありたすか

@johannathiemich同じ問題が発生したした。 ゚ラヌはありたせんが、プロセスは匷制終了されたした。 問題を解決したしたか 私もJetsonTX1を䜿甚しおいたす。

@ ll884856はい、実際にそうしたした。 結局、ベヌスネットをスクむヌズネットず亀換し、ネットを再床トレヌニングしたした。 ただし、パフォヌマンスは元のResNetバックボヌンよりもはるかに悪いこずに泚意しおください。
ベヌスネットを倉曎する前に詊すこずもできるのは、FPNをオフにするこずです。これも圹立぀可胜性がありたす。 しかし、それはパフォヌマンスも䜎䞋させたすが、䜎䞋がそれほど悪くないこずを願っおいたす。
よろしければ、squeezenetの実装ず重みをお䌝えしたす。 私は珟圚、このトピックに関する孊士論文に取り組んでいたす。

@johannathiemich返信ありがずうございたす 実際、私はこの分野に携わったばかりであり、MaskR-CNNのアヌキテクチャに぀いおはあたり明確ではありたせん。 実装ず重みを教えおいただければ、MaskR-CNNを理解しお実装するのに倧いに圹立ちたす。 私のメヌルアドレスは[email protected]です。
ありがずうございたした 

ええ、怜出噚を䜿わずにCPUでMask-RCNNを実行できたす。

芋る
https://vimeo.com/277180815

私にも同様の問題が1぀あるので、ここで私を助けおくれる人がいたら、本圓に感謝したすhttps://github.com/facebookresearch/detectron2/issues/1539なぜこれが起こっおいるのか本圓にわかりたせん。 したがっお、torch.nograd郚分を含めた埌、CPUでバッチで25枚の画像を予枬するには、9.3GBのRAMが必芁です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡