2017-11-20 27 views
2

ディープニューラルネットワークトレーニングの文脈では、GPUを処理単位として使用する場合、トレーニングはより速く動作します。 。これはCudNNの最適化を設定して、次の行(Windows上のPython 2.7とKeras)と、環境変数の処理ユニットを変更することで行われます実行時(GPUからCPUへ)に処理ユニットを変更する方法は?

os.environ["THEANO_FLAGS"] = "floatX=float32,device=gpu,optimizer_including=cudnn,gpuarray.preallocate=0.8,dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic,dnn.include_path=e:/toolkits.win/cuda-8.0.61/include,dnn.library_path=e:/toolkits.win/cuda-8.0.61/lib/x64" 

出力は次のとおりです。

Using gpu device 0: TITAN Xp (CNMeM is disabled, cuDNN 5110) 

問題は、GPUメモリがRAM(それぞれ12GBと128GB)に比べて制限されており、トレーニングは全体の流れの1つのフェーズに過ぎないということです。したがって、トレーニングが完了したら、私はCPUに戻る必要があります。

os.environ["THEANO_FLAGS"] = "floatX=float32,device=cpu" 

私の質問は次のとおりです:私は次の行を試してみたが、それは効果がありません

  1. は、実行時にCPUとその逆にGPUから変更することが可能ですか? (技術的に)
  2. もしそうなら、私はどのようにプログラムでPythonでそれを行うことができますか? (2.7、Windows、およびTheanoバックエンドを使用したKeras)。

答えて

1

はいこれは少なくともテンソルフローバックエンドで可能です。あなただけのもtensorflowをインポートすると、次のwithにあなたのコードを配置する必要があります。

with tf.device(/cpu:0): 
    your code 

with tf.device(/gpu:0): 
    your code 

これもtheanoバックエンドのために働く場合、私はわかりませんよ。しかし、あるバックエンドから別のバックエンドへの切り替えはあらかじめフラグを設定するだけで済み、あまり問題にならないはずです。

関連する問題