1 PC avec 2 GPU. Pour former 2 CNN indépendants sur 2 GPU. J'utilise followings pour créer le graphique pour GPU:Tensorflow Comment former 2 CNN (indépendant) sur 2 GPU. CUDA_ERROR_OUT_OF_MEMORY Erreur
with tf.device('/gpu:%d' % self.single_gpu):
self._create_placeholders()
self._build_conv_net()
self._create_cost()
self._creat_optimizer()
boucle de formation ne relève pas de th.device()
Après avoir démarré le 1er processus de formation CNN, par exemple en utilisant le GPU 1. Ensuite, je commence 2ème formation CNN avec GPU 0. Je reçois toujours l'erreur CUDA_ERROR_OUT_OF_MEMORY, et je n'ai pas pu démarrer le 2ème processus de formation.
Exécution de 2 tâches d'entraînement indépendantes assignées à 2 GPU sur le même PC possible? Si possible, qu'est-ce qui me manque?
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/core/common_runtime/bfc_allocator.cc: 274] ____ ******* ****************** _______________________________________________________________________ W tensorflow /core/common_runtime/bfc_allocator.cc:275] Manque de mémoire essayant d'allouer 384.00MiB. Voir les journaux pour l'état de la mémoire. Traceback (dernier appel en dernier): Fichier "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py", ligne 1022 , dans _do_call return fn (* args) Fichier "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/client/session.py", ligne 1004, en _run_fn état, run_metadata) fichier "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/contextlib.py", ligne 89, à la sortie suivant (auto. gen) Fichier "/home/hl/anaconda3/envs/dl-conda-py36/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", ligne 466, dans raise_exception_on_not_ok_status pywrap_tensorflow.TF_GetCode (st atus)) tensorflow.python.framework.errors_impl.InternalError: Le tenseur DST n'est pas initialisé. [[Nœud: _recv_inputs/input_placeholder_0/_7 = _Recvclient_terminated = false, recv_device = "/ travail: localhost/réplique: 0/tâche: 0/gpu: 2", send_device = "/ travail: hôte local/réplique: 0/tâche: 0/cpu: 0 ", send_device_incarnation = 1, nom_tenseur =" edge_3__recv_inputs/input_placeholder_0 ", tensor_type = DT_FLOAT, _device ="/travail: hôte local/réplique: 0/tâche: 0/gpu: 2 "]] [[Node: Moyenne/_15 = _Recvclient_terminated = false, recv_device = "/ travail: localhost/réplique: 0/tâche: 0/cpu: 0", send_device = "/ travail: hôte local/réplique: 0/tâche: 0/gpu: 2", send_device_incarnation = 1, tensor_name = "edge_414_Mean", tensor_type = DT_FLOAT, _device = "/ job: localhost/réplique: 0/tâches: 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"]()]]
Par conséquent, un procédé pour utiliser une GPU 0: \t os.environ [ "CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" \t os.environ [ "CUDA_VISIBLE_DEVICES"] = "0" \t tf.device ('/ gpu : 0 '): processus 2 pour utiliser gpu 3: \t os.environ [ "CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" \t os.environ [ "CUDA_VISIBLE_DEVICES"] = "3" \t tf.device ('/ GPU: 3'): sont nécessaires pour utiliser deux GPU? – user6101147
Que diriez-vous de 1 processus de formation, 2 tâches pour mettre en parallèle des données de lot dans 2 GPU? Même configuration que ci-dessus ou pas? – user6101147
Je pense que dans ce cas, vous devrez utiliser tensorflow distribué de sorte que le processus d'entraînement et les 2 tâches se parlent. – npf