2017-02-12 7 views
1

私は、チェックポイントからトレーニングを復元して再開するTensorFlowコードを実行しています。私はCPUのビルドから復元するたびに、それは完全に正常に動作するようだ。しかし、gpuでコードを実行したときに復元しようとすると、うまくいかないようです。私はそれが私がメモリ不足していますが、私は10GBsを言うためにメモリを増やしたときに、それは本当に何も変更しないと言うことがわかりTensorFlowで復元されたチェックポイントでメモリが不足しても、元のスクリプトは実行されないのはなぜですか?

Traceback (most recent call last): 
    File "/home_simulation_research/hbf_tensorflow_code/tf_experiments_scripts/batch_main.py", line 482, in <module> 
    large_main_hp.main_large_hp_ckpt(arg) 
    File "/usr/local/lib/python3.4/dist-packages/my_tf_pkg/main_large_hp_checkpointer.py", line 212, in main_large_hp_ckpt 
    run_hyperparam_search(arg) 
    File "/usr/local/lib/python3.4/dist-packages/my_tf_pkg/main_large_hp_checkpointer.py", line 231, in run_hyperparam_search 
    main_hp.main_hp(arg) 
    File "/usr/local/lib/python3.4/dist-packages/my_tf_pkg/main_hp.py", line 258, in main_hp 
    with tf.Session(graph=graph) as sess: 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1186, in __init__ 
    super(Session, self).__init__(target, graph, config=config) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 551, in __init__ 
    self._session = tf_session.TF_NewDeprecatedSession(opts, status) 
    File "/usr/lib/python3.4/contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors_impl.InternalError: Failed to create session. 
E tensorflow/core/common_runtime/direct_session.cc:135] Internal: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_OUT_OF_MEMORY; total memory reported: 18446744073709551615 

:特に、私はエラーを取得します。これは、私のGPUのビルドでは、CPUの1つが完全に正常に復元するために発生します。

とにかくこれを引き起こしている可能性のあるアイデアやアイデアはありますか?

gpuは本質的に自動的に割り当てられているため、何が原因かわかりませんが、これをデバッグするための開始手順は何ですか?


フルエラー:あなたのモデルを操作するためのほぼ無制限のメモリを与えて両方の物理および仮想メモリから

E tensorflow/core/common_runtime/direct_session.cc:135] Internal: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_OUT_OF_MEMORY; total memory reported: 18446744073709551615 
Traceback (most recent call last): 
    File "/home_simulation_research/hbf_tensorflow_code/tf_experiments_scripts/batch_main.py", line 482, in <module> 
    large_main_hp.main_large_hp_ckpt(arg) 
    File "/usr/local/lib/python3.4/dist-packages/my_tf_pkg/main_large_hp_checkpointer.py", line 212, in main_large_hp_ckpt 
    run_hyperparam_search(arg) 
    File "/usr/local/lib/python3.4/dist-packages/my_tf_pkg/main_large_hp_checkpointer.py", line 231, in run_hyperparam_search 
    main_hp.main_hp(arg) 
    File "/usr/local/lib/python3.4/dist-packages/my_tf_pkg/main_hp.py", line 258, in main_hp 
    with tf.Session(graph=graph) as sess: 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 1186, in __init__ 
    super(Session, self).__init__(target, graph, config=config) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 551, in __init__ 
    self._session = tf_session.TF_NewDeprecatedSession(opts, status) 
    File "/usr/lib/python3.4/contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors_impl.InternalError: Failed to create session. 

答えて

0

Tensorflow CPUの使用の利点。デバッグの最初のステップは、いくつかのウェイト/レイヤーを削除し、GPUで実行することによって、コーディングエラーがないことを確認するために、より小さなモデルを構築することです。次に、メモリが不足するまでレイヤー/ウェイトをゆっくりと上げます。これにより、GPUにメモリの問題があることが確認されます。 GPUで最初にグラフを作成することをお勧めします。それは、後でGPUに訓練するときに適合することがわかっています。大きなグラフが必要な場合は、グラフの各部分を別のGPUに割り当てることを検討してください。

+0

これが問題なのかどうかわかりませんが、私は別のグラフを作成するforループを持っています。だから私は3つのモデル、最初に私は最初の1つを訓練し、次に2番目と最後の1つを訓練します。エラーの原因になるのはなぜですか? –

+0

「デフォルトでは、TensorFlowはほぼすべてのGPUメモリをマップする」ため、セッションを正しく設定する必要があります。 https://www.tensorflow.org/tutorials/using_gpu#allowing_gpu_memory_growth –

+0

per_process_gpu_memory_fractionは、おそらく必要なものです。 config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.4 セッション= tf.Session(config = config、...) –

関連する問題