私はキューに私の理解で何か欠けているように私は感じる:理解tensorflowキューとCPU <-> GPU転送
https://github.com/tensorflow/tensorflow/issues/3009
私はキューにデータをロードするときと考え、それが最後のバッチが計算されている間にGPUに事前転送されるため、次のバッチをロードする時間よりも計算に時間がかかると仮定すると、帯域幅のボトルネックはほとんどありません。
しかし、上記のリンクは、キューからグラフ(numpy < - > TF)に高価なコピーがあり、ファイルをグラフにロードして代わりに前処理を行う方が速いことを示しています。しかし、それは私には意味がありません。ファイルから256x256イメージを読み込んだり、生のnumpy配列を読み込んだりするのはなぜ重要なのですか?何かあれば、私はnumpyバージョンが速いと思います。私は何が欠けていますか?
numpy配列でフィードする場合は、PythonからTensorFlowランタイムにデータを取得するための余分なシングルスレッドメモリコピーがあります。 TensorFlowオペレーションを使用してファイルからロードする場合、データはTFランタイムにとどまるため、そのコピーは必要ありません。 –
最後のバッチがトレーニングされている間にGPUに事前転送することはどうですか?それで、最後のバッチが完了したらTFに入る準備ができているので、データがどこから来ているかは問題ではありません。それはどのように動作しないのですか?一日の終わりには、ディスクやキューからどこかから転送する必要がありますが、非同期の場合は重要ですか? – jstaker7
ところで、その問題では、 'QueueDequeueMany'が/ cpu:0に置かれていることがわかります。そのようにキューを使用するとGPUに非同期に物事が転送されません –