Tensorpack.MultiProcessPrefetchData向上し、効率的なデータパイプライン

参照コード:https://github.com/tensorpack/tensorpack/blob/master/tensorpack/dataflow/parallel.py(最新バージョンはMultiProcessPrefetchDataと呼ばれる最初のバージョンでは、MultiProcessRunner名前が変更されました)

  このクラスのより良い実装がMultiProcessRunnerであるデータラインのTensorpack複数、アイデアはmultiprocess.Queueキューを使用して、非常にシンプルであり、キューがキュー__iter__プロセスから素子を取るその後、ねじ要素の数をプッシュし始めます。またcifar10_resnetで使用MultiProcessRunnerアプローチ、:https://github.com/tensorpack/tensorpack/blob/master/examples/ResNet/cifar10-resnet.py画像サイズが(cifar10サイズが32×32であり、バッチ128をフェッチ大きい場合は、画像データの総量は、128 * 32 * 32 * 3 * 4バイト= 1.5M、imagenetのデータサイズ224、バッチ採取ワード32 、データ量* 224 32 * 224 * 3 * 4バイト= 18.375M) マルチプロセス・キューの実装(パイプライン)に限定されるものではPython、いくつかの0.02msからのデータへの非常に低速のアクセスは約20ミリ秒(なりなりますデータネットワークは、実行時大きい概して大きい、基本的に除くMultiProcessRunnerZMQ例).Tensorpackのimagenetを無視するように比べてデータ獲得時間が使用され、クロスZMQあるいはキュー送信処理の使用。

  事実、MultiProcessRunnerに基づいて少しだけ改良では、あなたは同じ機能の0.2msのデータパイプラインを実現することができ、参照コード:https://github.com/WeiTang114/FMQ、すなわち速いMultiProcess.Queueは、原理は簡単です:使用Pythonのキューモジュールは、キューは、multiprocess.Queue異なるクロスプロセス転送せずに、ローカルキューに属します。そうであっても多くのデータを取り、そしてあなたは、キューとスレッド再オープン__ iter__は、ローカルキューから直接要素を取り込み、ローカルキューにキューから要素を取得し、その後、処理を継続することができますので、時間が非常に短いです。

おすすめ

転載: www.cnblogs.com/deepllz/p/11433252.html