セットアップGPU + CPU Tensorflowトレーニング
Iネットワーク、そのパラメータ大埋め込みマトリックス(サイズ300万X 300)ものを持っているが、embed_matを言います。トレーニング中
は、各ミニバッチについて、私はembedding_lookup OPを使用して選択されるembed_mat(最大15000のベクター)からのベクトルの小さなサブセットを更新します。私はアダムオプティマイザを使用してモデルをトレーニングしています。
GPUにこのembed_matを格納することはできないので、そのサイズのためにCPU(たとえば/ cpu:0)デバイスの下で定義しますが、モデル、オプティマイザなどの残りのパラメータはGPU(例えば、gpu:/ 0)デバイス。
質問
私は私のGPUの使用率はすべての私の訓練はCPU上で起こっているを示唆している、(200メガバイト)非常に最小限であることがわかります。私が期待していたのは、embedding_lookupの結果がGPUにコピーされ、すべてのトレーニングがそこで発生するということでした。私は間違ったことをしていますか?
トレーニング時間は、私にとって正しいとは思われない埋め込みマトリックスのサイズ(num_vectors)の影響を非常に大きく受けます。どのミニバッチでも、私はネットワークパラメータとベクトルを更新します(〜15000)ので、トレーニング時間は埋め込み行列のサイズに比例して線形に成長するはずです。
私のembed_matを複数のGPUに自動的かつシームレスに分割して、より速いトレーニングをする方法はありますか?
私はこのためにAdam Optimizerを使用していると思われます。 embed_matがCPU上にあるため、すべてのトレーニングがCPU上で行われているように見えます。これは正しいです?
これは既に確認済みです。それはあなたが提案した通りです。 GPUの使用量が非常に少ないにもかかわらず、GPUでトレーニングが実行されていると思います。 質問2と質問3に関する考え方 –
[タイムライン](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/client/timeline.py)は、一般的にはなぜGPUが利用されていないのかを知ることができます。これは、どのデバイス上で実行されているオプションがどのデバイスで実行されているのか、どこでブロックされているのかを示しています。あなたが言及したように時間が伸びれば、面白いことがあるように見えます。 –
パーティショニングについては、[partitioned_variables.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/partitioned_variables.py)のコードを参照してください。 –