2台のGPUを搭載した1台のPC。 2つの独立したCNNを2つのGPUでトレーニングする。私は、GPUのためのグラフを作成するために、以下を使用します。Tensorflow 2 GPUで2 CNN(独立型)をトレーニングする方法。 CUDA_ERROR_OUT_OF_MEMORYエラー
with tf.device('/gpu:%d' % self.single_gpu):
self._create_placeholders()
self._build_conv_net()
self._create_cost()
self._creat_optimizer()
トレーニングループは、その後、GPU 1を用いて、第一CNNトレーニングプロセスを開始した後th.device()
の下ではありませんが、私は第二CNNのトレーニングを開始しますGPU 0で私はいつもCUDA_ERROR_OUT_OF_MEMORYエラーが発生し、2回目のトレーニングプロセスを開始できませんでした。
同じPC上の2つのGPUに割り当てられた2つの独立したトレーニングタスクを実行できますか?可能であれば、私は何が欠けていますか?
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 164.06M (172032000 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
Wのtensorflow /コア/ common_runtime/bfc_allocator.cc:274] ******* ____ ****************** _______________________________________________________________________ W tensorflow /core/common_runtime/bfc_allocator.cc:275]メモリが不足して384.00MiBを割り当てようとしました。メモリ状態のログを参照してください。 トレースバック(最新の最後のコール): ファイル "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py"、1022行目、in _do_call return fn(* args) ファイル "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py"、行1004年、_run_fn 状況、終了 次の(自己中run_metadata) ファイル "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/contextlib.py"、ライン89、インチgen) ファイル "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py"、466行目、raise_exception_on_not_ok_status pywrap_tensorflow.TF_GetCode (st atus)) tensorflow.python.framework.errors_impl.InternalError:Dstテンソルが初期化されていません。[ノード:_recv_inputs/input_placeholder_0/_7 = _Recvclient_terminated = false、recv_device = "/ job:localhost/replica:0/task:0/gpu:2"、send_device = "/ job:localhost/replica:0/task: tenor_type = DT_FLOAT、_device = "/ job:localhost/replica:0/task:0/gpu:2"] [[ノード:0/cpu:0]、send_device_incarnation = 1、テンソル名= "edge_3__recv_inputs/input_placeholder_0"平均/ _15 = _Recvclient_terminated = false、recv_device = "/ job:localhost/replica:0/task:0/cpu:0"、send_device = "/ job:localhost/replica:0/task:0/gpu:2" send_device_incarnation = 1、tensor_name = "edge_414_Mean"、tensor_type = DT_FLOAT、_device = "/仕事:localhostの/レプリカ:0 /タスク:0/CPU:0"]]デフォルトで
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "mg_model_nvidia_gpu.py", line 491, in <module>
main()
File "mg_model_nvidia_gpu.py", line 482, in main
nvidia_cnn.train(data_generator, train_data, val_data)
File "mg_model_nvidia_gpu.py", line 307, in train
self.keep_prob: self.train_config.keep_prob})
File "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 767, in run
run_metadata_ptr)
File "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 965, in _run
feed_dict_string, options, run_metadata)
File "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1015, in _do_run
target_list, options, run_metadata)
File "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1035, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InternalError: Dst tensor is not initialized.
[[Node: _recv_inputs/input_placeholder_0/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:2", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_3__recv_inputs/input_placeholder_0", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:2"]()]]
[[Node: Mean/_15 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:2", send_device_incarnation=1, tensor_name="edge_414_Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
従って、プロセス1は、GPU 0を使用します:0 '): gpuを使用するプロセス2 3: \t os。環境[ "CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" \tはos.environ [ "CUDA_VISIBLE_DEVICES"] = "3" \t tf.device( '/ GPU:3'): 2のGPUを使用するために必要とされていますか? – user6101147
2つのGPUにデータをパラレルにバッチするには、1トレーニングプロセス、2タスクはどうですか?上記と同じ設定かどうか? – user6101147
私はこの場合、トレーニングプロセスと2つのタスクがお互いに話すように、テンソルフローを使用する必要があると思います。 – npf