Detectron: la formation multi-GPU jette un accès illégal à la mémoire

Créé le 25 janv. 2018  ·  64Commentaires  ·  Source: facebookresearch/Detectron

Lorsque j'utilise un GPU pour m'entraîner, il n'y a pas de problème. Mais lorsque j'utilise deux ou quatre GPU, le problème se pose. La sortie du journal:

terminer appelé après avoir lancé une instance de 'caffe2 :: EnforceNotMet'
what (): [appliquer échoue à context_gpu.h: 170]. Erreur CUDA rencontrée: un accès mémoire illégal a été rencontré Erreur de l'opérateur:
entrée: "gpu_0 / rpn_cls_logits_fpn2_w_grad" entrée: "gpu_1 / rpn_cls_logits_fpn2_w_grad" sortie: "gpu_0 / rpn_cls_logits_fpn2_w_grad" nom: "" type: "Add" device_pidg_périphérique: "" type: "Add" device_typeu cid: ""
* Annulé à 1516866180 (heure Unix) essayez "date -d @ 1516866180" si vous utilisez la date GNU *
terminer appelé récursivement
terminer appelé récursivement
terminer appelé récursivement
PC: @ 0x7ff67559f428 gsignal
terminer appelé récursivement
terminer appelé récursivement
E0125 07: 43: 00.745853 55683 pybind_state.h: 422] Exception rencontrée lors de l'exécution de la fonction PythonOp: RuntimeError: [enforce fail at context_gpu.h: 307] error == cudaSuccess. 77 vs 0. Erreur à: /mnt/hzhida/project/caffe2/caffe2/core/context_gpu.h:307: un accès mémoire illégal a été rencontré

À:
/mnt/hzhida/facebook/detectron/lib/ops/generate_proposals.py(101): avant
* SIGABRT (@ 0x3e80000d84f) reçu par le PID 55375 (TID 0x7ff453fff700) du PID 55375;
terminer appelé récursivement
@ 0x7ff675945390 (inconnu)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a abandonner
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff66f37c6b6 (inconnu)
@ 0x7ff66f37c701 std :: terminate ()
@ 0x7ff66f3a7d38 (inconnu)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141d clone
@ 0x0 (inconnu)
Abandonné (core dumpé)

upstream bug

Commentaire le plus utile

Merci les gars. Cela vérifie mon hypothèse selon laquelle l'accès illégal à la mémoire provient de l'opération Add qui ne gère pas correctement les communications entre appareils lorsque l'accès par les pairs n'est pas activé. Émettra un correctif.

Tous les 64 commentaires

J'ai eu la même erreur. La différence est que lorsque j'utilise un GPU ou deux GPU, il n'y a pas de problème. Mais en utilisant 4 GPU pour entraîner Mask RCNN (mask_rcnn_R-101-FPN) ou RetinaNet (retinanet_R-101-FPN), le même problème se produit.

J'ai le même problème lorsque j'entraîne le réseau tutorial_Res50 avec deux GPU ou plus.

J'ai rencontré le même problème lors de la spécification des identifiants GPU (c'est-à-dire différents des identifiants les plus bas, par exemple «1,3,5,7» pour 4 GPU) Si les ID de GPU les plus bas sont spécifiés, la formation se déroule correctement.

@jwnsu : nous travaillons sur un correctif pour que lorsque CUDA_VISIBLE_DEVICES n'utilise pas les identifiants les plus bas, la formation fonctionne toujours. Merci d'avoir signalé et diagnostiqué.

Salut @jwnsu , @coolbrain , @tshizys , @lwher : nous ne pouvons pas reproduire ce problème de notre côté.

Pouvez-vous chacun fournir des informations supplémentaires susceptibles de révéler un schéma commun?

En particulier:

  • Système opérateur: ?
  • Version du compilateur:?
  • Version CUDA:?
  • Version cuDNN:?
  • Version du pilote NVIDIA:?
  • Modèles de GPU (pour tous les appareils s'ils ne sont pas tous identiques):?
  • Quelque chose d'autre qui semble pertinent:?

Voici ce que nous voyons lors de l'entraînement, par exemple, avec les identifiants GPU 1,3,5,7:

CUDA_VISIBLE_DEVICES=1,3,5,7 python2 tools/train_net.py --cfg configs/12_2017_baselines/e2e_faster_rcnn_R-50-FPN_1x.yaml OUTPUT_DIR /tmp/dbg-cvd-train TRAIN.DATASETS "('coco_2014_minival',)" NUM_GPUS 4

Every 0.1s: nvidia-smi                                                                                                                                                                                                                                                                                                                             Fri Jan 26 09:09:26 2018

Fri Jan 26 09:09:26 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39                 Driver Version: 375.39                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M40           On   | 0000:07:00.0     Off |                  Off |
|  0%   42C    P8    17W / 250W |      0MiB / 12209MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla M40           On   | 0000:08:00.0     Off |                  Off |
|  0%   51C    P0   144W / 250W |   7214MiB / 12209MiB |     46%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla M40           On   | 0000:09:00.0     Off |                  Off |
|  0%   38C    P8    19W / 250W |      0MiB / 12209MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Tesla M40           On   | 0000:0A:00.0     Off |                  Off |
|  0%   52C    P0   220W / 250W |   7502MiB / 12209MiB |     38%      Default |
+-------------------------------+----------------------+----------------------+
|   4  Tesla M40           On   | 0000:0B:00.0     Off |                  Off |
|  0%   40C    P8    17W / 250W |      0MiB / 12209MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   5  Tesla M40           On   | 0000:0C:00.0     Off |                  Off |
|  0%   60C    P0    85W / 250W |   7081MiB / 12209MiB |     48%      Default |
+-------------------------------+----------------------+----------------------+
|   6  Tesla M40           On   | 0000:0D:00.0     Off |                  Off |
|  0%   40C    P8    20W / 250W |      0MiB / 12209MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   7  Tesla M40           On   | 0000:0E:00.0     Off |                  Off |
|  0%   56C    P0    81W / 250W |   7494MiB / 12209MiB |     40%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    1   2871837    C   ..............gcc-5-glibc-2.23/bin/python2.7  7210MiB |
|    3   2871837    C   ..............gcc-5-glibc-2.23/bin/python2.7  7498MiB |
|    5   2871837    C   ..............gcc-5-glibc-2.23/bin/python2.7  7077MiB |
|    7   2871837    C   ..............gcc-5-glibc-2.23/bin/python2.7  7490MiB |
+-----------------------------------------------------------------------------+

Système d'exploitation: Ubuntu 16.04
Version du compilateur: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Version CUDA: 8.0
Version cuDNN: v5.1
Version du pilote NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| Version du pilote NVIDIA-SMI 384.111: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Nom du GPU Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Utilisation / Cap | Utilisation de la mémoire | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Off | 00001543: 00: 00.0 Arrêt | Off |
| Sans objet 42C P0 41W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 Off | 00003134: 00: 00.0 Arrêt | Off |
| Sans objet 42C P0 39W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Off | 00004975: 00: 00.0 Arrêt | Off |
| Sans objet 38C P0 41W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Off | 0000F3E6: 00: 00.0 Arrêt | Off |
| Sans objet 38C P0 40W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Système d'exploitation: CentOS Linux version 7.1.1503
Version du compilateur: gcc version 4.8.2
Version CUDA: CUDA 8.0
Version cuDNN: cuDNN 6.0.21
Version du pilote NVIDIA: 375.26
Modèles de GPU: 4x GeForce GTX TITAN X (12G)

nvidia-smi:
image

Lors de l'utilisation de 4 GPU (0,1,2,3) pour entraîner Mask RCNN (e2e_mask_rcnn_R-101-FPN), RetinaNet (retinanet_R-101-FPN) ou Faster RCNN (e2e_faster_rcnn_R-50-FPN), l'erreur «context_gpu.h : 307: un accès mémoire illégal a été rencontré »ou« context_gpu.h: 170. Erreur CUDA rencontrée: un accès mémoire illégal a été rencontré Erreur de l'opérateur: entrée: "gpu_0 / retnet_cls_pred_fpn3_b_grad" entrée: "gpu_2 / retnet_cls_pred_fpn3_b_grad" sortie: "gpu_0 / retnet_cls_cls_pred_fpn3_b_grad" entrée: "gpu_2 / retnet_cls_pred_fpn3_b_grad" sortie: "gpu_0 / retnet_cls_cls_pred_fpn3_b_grad" entrée: "gpu_2 / retnet_cls_pred_fpn3_b_grad" sortie: "gpu_0 / retnet_cls_pred_fpn3 device_bype" : 0} »se produit.

Mais en utilisant un GPU ou deux GPUS (0,1 ou 2,3), il peut être entraîné normalement.
Merci.

@jwnsu : en regardant votre erreur de plus près ("numéro de périphérique invalide"), il semble que vous essayez de vous entraîner avec une configuration configurée pour 8 GPU mais en limitant le processus pour n'avoir accès qu'à 4 (via CUDA_VISIBLE_DEVICES ). L'erreur "ordinal de périphérique non valide" est due au fait qu'il tente de créer des opérations sur des périphériques auxquels le processus n'a pas accès.

@coolbrain , @tshizys : merci pour les détails. Que se passe-t-il si vous utilisez deux GPU utilisant les identifiants {0,2}, {0,3}, {1,2} ou {1,3}?

@rbgirshick vous avez raison, vous avez choisi le mauvais fichier de configuration (avec 8 paramètres GPU) pour essayer hier. Je viens de réessayer avec le bon fichier de configuration (4 GPU, erreur de gpu ids "1,2,4,5", "0,1,2,3" fonctionne bien), l'erreur est maintenant similaire à ce que les autres voient:

I0127 09:06:48.220716 10872 context_gpu.cu:325] Total: 20748 MB
terminate called after throwing an instance of 'caffe2::EnforceNotMet'
terminate called after throwing an instance of 'caffe2::EnforceNotMet'
  what():  [enforce fail at context_gpu.h:170] . Encountered CUDA error: an illegal memory access was encountered Error from operator: 
input: "gpu_0/retnet_bbox_pred_fpn3_b_grad" input: "gpu_2/retnet_bbox_pred_fpn3_b_grad" output: "gpu_0/retnet_bbox_pred_fpn3_b_grad" name: "" type: "Add" device_option { device_type: 1 cuda_gpu_id: 0 }
  what():  [enforce fail at context_gpu.h:170] . Encountered CUDA error: an illegal memory access was encountered Error from operator: 
input: "gpu_2/retnet_cls_conv_n3_fpn3" input: "gpu_2/__m13_shared" output: "gpu_2/__m13_shared" name: "" type: "ReluGradient" arg { name: "cudnn_exhaustive_search" i: 0 } arg { name: "order" s: "NCHW" } device_option { device_type: 1 cuda_gpu_id: 2 } engine: "CUDNN" is_gradient_op: true
*** Aborted at 1517072808 (unix time) try "date -d @1517072808" if you are using GNU date ***
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
PC: @     0x7fd71f6bd428 gsignal
*** SIGABRT (@0x3e900002a18) received by PID 10776 (TID 0x7fd548e3d700) from PID 10776; stack trace: ***
    @     0x7fd71fa63390 (unknown)
    @     0x7fd71f6bd428 gsignal
    @     0x7fd71f6bf02a abort
    @     0x7fd71b51c84d __gnu_cxx::__verbose_terminate_handler()
    @     0x7fd71b51a6b6 (unknown)
    @     0x7fd71b51a701 std::terminate()
    @     0x7fd71b545d38 (unknown)
    @     0x7fd71fa596ba start_thread
    @     0x7fd71f78f41d clone
    @                0x0 (unknown)
./itrain4.sh: line 9: 10776 Aborted                 (core dumped) python2 tools/train_net.py --multi-gpu-testing --cfg configs/iret-rn50-fpn-voc.yaml OUTPUT_DIR ./output

@coolbrain , @tshizys : un coup dans le noir est de basculer l'implémentation all-reduction vers nccl en passant USE_NCCL True à train_net.py , comme dans:

python2 tools/train_net.py --multi-gpu-testing \
  --cfg configs/getting_started/tutorial_2gpu_e2e_faster_rcnn_R-50-FPN.yaml \
  OUTPUT_DIR /tmp/output USE_NCCL True

Cela nécessitera que Caffe2 ait été construit avec les opérations nccl - je ne suis pas sûr que cela soit fait par défaut ou si cela nécessitera du travail pour reconstruire Caffe2 avec le support nccl.

@rbgirshick , lors de l'utilisation de deux GPU, c'est-à-dire {0,2}, {0,3}, {1,2}, {1,3}, l'erreur existe toujours. Voici les détails, en utilisant {0,3} et en entraînant RetinaNet (retinanet_R-101-FPN) par exemple:

F0128 12: 09: 08.461153 4938 context_gpu.cu:387] Erreur à: /home/yszhu/local/caffe2/caffe2/core/context_gpu.cu:387: un accès mémoire illégal a été rencontré
* Vérifiez la trace de la pile d'échec:
terminer appelé récursivement
terminer appelé récursivement
Annulé à 1517112548 (heure Unix) essayez "date -d @ 1517112548" si vous utilisez la date GNU
terminer appelé après avoir lancé une instance de 'caffe2 :: EnforceNotMet'
what (): [appliquer échoue à context_gpu.h: 170]. Erreur CUDA rencontrée: un accès mémoire illégal a été rencontré Erreur de l'opérateur:
entrée: "gpu_0 / fpn_6_relu" entrée: "gpu_0 / fpn_7_w" entrée: "gpu_0 / __ m23_shared" sortie: "gpu_0 / fpn_7_w_grad" sortie: "gpu_0 / fpn_7_b_grad" sortie "type de convocation" m2G: " "arg {name:" kernel "i: 3} arg {name:" exhaust_search "i: 0} arg {name:" pad "i: 1} arg {name:" order "s:" NCHW "} arg {name : "stride" i: 2} device_option {device_type: 1 cuda_gpu_id: 0} engine: "CUDNN" is_gradient_op: true
@ 0x7f2bdf712772 google :: LogMessage :: Fail ()
PC: @ 0x0 (inconnu)
SIGABRT (@ 0x3e8000012b7) reçu par le PID 4791 (TID 0x7f2a6effd700) du PID 4791;
@ 0x7f2bdf7126ce google :: LogMessage :: SendToLog ()
@ 0x7f2c2670e130 (inconnu)
@ 0x7f2bdf71204c google :: LogMessage :: Flush ()
@ 0x7f2c25c6a5d7 __GI_raise
@ 0x7f2bdf71556d google :: LogMessageFatal :: ~ LogMessageFatal ()
@ 0x7f2c25c6bcc8 __GI_abort
@ 0x7f2c1b1b1965 __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7f2bdfdd1180 caffe2 :: CUDAContext :: Delete ()
@ 0x7f2c1b1af946 (inconnu)
@ 0x7f2be27f42d9 std :: _ Sp_counted_base <> :: _ M_release ()
@ 0x7f2c1b1af973 std :: terminate ()
@ 0x7f2c1b2062c5 (inconnu)
@ 0x7f2bdfd377d1 caffe2 :: Tensor <> :: ResizeLike <> ()
@ 0x7f2c26706df5 start_thread
@ 0x7f2bdfd6e3e2 _ZN6caffe210CuDNNState7executeIRZNS_19CudnnConvGradientOp13DoRunWithTypeIffffffffEEbvEUlPS0_E1_EEvP11CUstream_stOT_
@ 0x7f2c25d2b1ad __clone
@ 0x7f2bdfd707e1 caffe2 :: CudnnConvGradientOp :: DoRunWithType <> ()
@ 0x0 (inconnu)

image

Les formes d'erreur ne sont pas les mêmes à chaque fois, mais il s'agit simplement de "Erreur CUDA rencontrée: un accès mémoire illégal a été rencontré".

Je reconstruis également caffe2 avec nccl-1.3.5 (suivant https://caffe2.ai/docs/getting-started.html?platform=centos&configuration=cloud#null__troubleshooting):

image

et basculez l'implémentation all-reduction vers nccl en passant USE_NCCL True à train_net.py, comme dans:

outils python2 / train_net.py --multi-gpu-testing \
--cfg configs / 12_2017_baselines / retinanet_R-101-FPN_1x_4gpus.yaml \
OUTPUT_DIR results_retinanet_R-101-FPN_1x_4gpus_model USE_NCCL True

L'erreur a disparu ^ - ^ pour les deux utilisant quatre GPU {0,1,2,3} ou l'un des deux GPU {0,2}, {0,3}, {1,2}, {1,3}.
@rbgirshick , merci beaucoup.

Salut, j'ouvre l'op nccl pour former le tutorial_network et l'erreur ci-dessus a disparu. Cependant, le programme se bloque après le chargement des données et occupe tout le temps 100% du processeur.

.......
I0129 03: 25: 13.106998 118074 context_gpu.cu:321] GPU 0: 2175 Mo
I0129 03: 25: 13.107028 118074 context_gpu.cu:321] GPU 1: 2078 Mo
I0129 03: 25: 13.107045 118074 context_gpu.cu:321] GPU 2: 2266 Mo
I0129 03: 25: 13.107059 118074 context_gpu.cu:321] GPU 3: 1860 Mo
I0129 03: 25: 13.107072 118074 context_gpu.cu:325] Total: 8381 Mo
I0129 03: 25: 13.122316 118079 context_gpu.cu:321] GPU 0: 2195 Mo
I0129 03: 25: 13.122344 118079 context_gpu.cu:321] GPU 1: 2145 Mo
I0129 03: 25: 13.122361 118079 context_gpu.cu:321] GPU 2: 2267 Mo
I0129 03: 25: 13.122378 118079 context_gpu.cu:321] GPU 3: 1924 Mo
I0129 03: 25: 13.122395 118079 context_gpu.cu:325] Total: 8532 Mo
I0129 03: 25: 13.151623 118079 context_gpu.cu:321] GPU 0: 2245 Mo
I0129 03: 25: 13.151650 118079 context_gpu.cu:321] GPU 1: 2159 Mo
I0129 03: 25: 13.152823 118079 context_gpu.cu:321] GPU 2: 2269 Mo
I0129 03: 25: 13.153623 118079 context_gpu.cu:321] GPU 3: 2020 Mo
I0129 03: 25: 13.154454 118079 context_gpu.cu:325] Total: 8694 Mo
I0129 03: 25: 13.186017 118079 context_gpu.cu:321] GPU 0: 2260 Mo
I0129 03: 25: 13.186053 118079 context_gpu.cu:321] GPU 1: 2214 Mo
I0129 03: 25: 13.186067 118079 context_gpu.cu:321] GPU 2: 2279 Mo
I0129 03: 25: 13.186077 118079 context_gpu.cu:321] GPU 3: 2080 Mo
I0129 03: 25: 13.186089 118079 context_gpu.cu:325] Total: 8835 Mo
I0129 03: 25: 13.215306 118076 context_gpu.cu:321] GPU 0: 2310 Mo
I0129 03: 25: 13.215342 118076 context_gpu.cu:321] GPU 1: 2269 Mo
I0129 03: 25: 13.215351 118076 context_gpu.cu:321] GPU 2: 2308 Mo
I0129 03: 25: 13.215368 118076 context_gpu.cu:321] GPU 3: 2081 Mo
I0129 03: 25: 13.215384 118076 context_gpu.cu:325] Total: 8970 Mo
I0129 03: 25: 13.307595 118084 context_gpu.cu:321] GPU 0: 2310 Mo
I0129 03: 25: 13.307623 118084 context_gpu.cu:321] GPU 1: 2301 Mo
I0129 03: 25: 13.307641 118084 context_gpu.cu:321] GPU 2: 2391 Mo
I0129 03: 25: 13.307652 118084 context_gpu.cu:321] GPU 3: 2104 Mo
I0129 03: 25: 13.307665 118084 context_gpu.cu:325] Total: 9108 Mo
I0129 03: 25: 13.324935 118077 context_gpu.cu:321] GPU 0: 2312 Mo
I0129 03: 25: 13.324965 118077 context_gpu.cu:321] GPU 1: 2313 Mo
I0129 03: 25: 13.324982 118077 context_gpu.cu:321] GPU 2: 2452 Mo
I0129 03: 25: 13.324993 118077 context_gpu.cu:321] GPU 3: 2171 Mo
I0129 03: 25: 13.325011 118077 context_gpu.cu:325] Total: 9250 Mo
I0129 03: 25: 13.343673 118080 context_gpu.cu:321] GPU 0: 2336 Mo
I0129 03: 25: 13.343698 118080 context_gpu.cu:321] GPU 1: 2380 Mo
I0129 03: 25: 13.343715 118080 context_gpu.cu:321] GPU 2: 2468 Mo
I0129 03: 25: 13.343731 118080 context_gpu.cu:321] GPU 3: 2233 Mo
I0129 03: 25: 13.343747 118080 context_gpu.cu:325] Total: 9417 Mo
I0129 03: 25: 13.369802 118085 cuda_nccl_gpu.cc:110] Création de NCCLContext pour la clé: 0: 0,1,2,3,
I0129 03: 25: 13.381914 118076 context_gpu.cu:321] GPU 0: 2361 Mo
I0129 03: 25: 13.381942 118076 context_gpu.cu:321] GPU 1: 2453 Mo
I0129 03: 25: 13.381961 118076 context_gpu.cu:321] GPU 2: 2524 Mo
I0129 03: 25: 13.381978 118076 context_gpu.cu:321] GPU 3: 2247 Mo
I0129 03: 25: 13.381995 118076 context_gpu.cu:325] Total: 9587 Mo
I0129 03: 25: 13.613253 118083 context_gpu.cu:321] GPU 0: 2388 Mo
I0129 03: 25: 13.613292 118083 context_gpu.cu:321] GPU 1: 2525 Mo
I0129 03: 25: 13.613301 118083 context_gpu.cu:321] GPU 2: 2524 Mo
I0129 03: 25: 13.613308 118083 context_gpu.cu:321] GPU 3: 2310 Mo
I0129 03: 25: 13.613315 118083 context_gpu.cu:325] Total: 9748 Mo

le programme se bloque ......

mon environnement:
Système d'exploitation: Ubuntu 16.04
Version du compilateur: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Version CUDA: 8.0
Version cuDNN: v5.1
Version du pilote NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| Version du pilote NVIDIA-SMI 384.111: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Nom du GPU Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Utilisation / Cap | Utilisation de la mémoire | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Off | 00001543: 00: 00.0 Arrêt | Off |
| Sans objet 42C P0 41W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 Off | 00003134: 00: 00.0 Arrêt | Off |
| Sans objet 42C P0 39W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Off | 00004975: 00: 00.0 Arrêt | Off |
| Sans objet 38C P0 41W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Off | 0000F3E6: 00: 00.0 Arrêt | Off |
| Sans objet 38C P0 40W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +

@lwher : c'est dommage. La raison pour laquelle nous n'utilisons pas NCCL par défaut est qu'il est susceptible de provoquer des blocages, ce que je pense que vous voyez.

Après avoir reconstruit caffe2 avec NCCL , Je relance le programme avec ce script :
outils python / train_net.py \
- test multi-gpu \
--cfg configs / getting_started / tutorial_4gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR ./output USE_NCCL True

Il jette cette erreur :

Création de NCCLContext pour la clé: 0: 0,1,2,3,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ATTENTION:

Vous devez toujours exécuter avec libnvidia-ml.so qui est installé avec votre
Pilote d'affichage NVIDIA. Par défaut, il est installé dans / usr / lib et / usr / lib64.
libnvidia-ml.so dans le package GDK est une bibliothèque stub qui est attachée uniquement pour
à des fins de construction (par exemple, la machine que vous générez
pour avoir le pilote d'affichage installé).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminer appelé après avoir lancé une instance de 'caffe2 :: EnforceNotMet'
what (): [appliquer échoue à cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 vs 0. Erreur à: /mnt/hzhida/project/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: erreur système Erreur de l'opérateur:
entrée: "gpu_0 / rpn_cls_logits_fpn2_w_grad" entrée: "gpu_1 / rpn_cls_logits_fpn2_w_grad" entrée: "gpu_2 / rpn_cls_logits_fpn2_w_grad" entrée: "gpu_3 / rpn_cls_logits_fpn2_w_grad" sortie "gpu_0 / rpn_cls_logits_fpn2_w_grad" output: sortie "gpu_1 / rpn_cls_logits_fpn2_w_grad": output "gpu_2 / rpn_cls_logits_fpn2_w_grad" : "gpu_3 / rpn_cls_logits_fpn2_w_grad" name: "" type: "NCCLAllreduce" device_option {device_type: 1 cuda_gpu_id: 0}
* Annulé à 1517210588 (heure Unix) essayez "date -d @ 1517210588" si vous utilisez la date GNU
PC: @ 0x7ff1e0383428 gsignal
SIGABRT (@ 0x3e800007a46) reçu par le PID 31302 (TID 0x7fefb5ffb700) du PID 31302;
I0129 07: 23: 08.187249 31591 cuda_nccl_gpu.cc:110] Création de NCCLContext pour la clé: 0: 0,1,2,3,

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ATTENTION:

Vous devez toujours exécuter avec libnvidia-ml.so qui est installé avec votre
Pilote d'affichage NVIDIA. Par défaut, il est installé dans / usr / lib et / usr / lib64.
libnvidia-ml.so dans le package GDK est une bibliothèque stub qui est attachée uniquement pour
à des fins de construction (par exemple, la machine que vous créez votre application n'a
pour avoir le pilote d'affichage installé).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminer appelé récursivement
@ 0x7ff1e0729390 (inconnu)
I0129 07: 23: 08.188051 31592 context_gpu.cu:321] GPU 0: 2466 Mo
I0129 07: 23: 08.188074 31592 context_gpu.cu:321] GPU 1: 2387 Mo
I0129 07: 23: 08.188091 31592 context_gpu.cu:321] GPU 2: 2311 Mo
I0129 07: 23: 08.188099 31592 context_gpu.cu:321] GPU 3: 2382 Mo
I0129 07: 23: 08.188107 31592 context_gpu.cu:325] Total: 9548 Mo
@ 0x7ff1e0383428 gsignal
@ 0x7ff1e038502a abandonner
@ 0x7ff1da16284d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff1da1606b6 (inconnu)
@ 0x7ff1da160701 std :: terminate ()
@ 0x7ff1da18bd38 (inconnu)
@ 0x7ff1e071f6ba start_thread
@ 0x7ff1e045541d clone
@ 0x0 (inconnu)
Abandonné (core dumpé)

Environnement de fonctionnement :
Système d'exploitation: Ubuntu 16.04
Version du compilateur: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Version CUDA: 8.0
Version cuDNN: v5.1
Version du pilote NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| Version du pilote NVIDIA-SMI 384.111: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Nom du GPU Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Utilisation / Cap | Utilisation de la mémoire | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Off | 00001543: 00: 00.0 Arrêt | Off |
| Sans objet 42C P0 41W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 Off | 00003134: 00: 00.0 Arrêt | Off |
| Sans objet 42C P0 39W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Off | 00004975: 00: 00.0 Arrêt | Off |
| Sans objet 38C P0 41W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Off | 0000F3E6: 00: 00.0 Arrêt | Off |
| Sans objet 38C P0 40W / 150W | 0MiB / 8123MiB | 0% par défaut |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Une note supplémentaire à propos de NCCL: Caffe2 se construit avec NCCL par défaut , il n'est donc pas nécessaire de le reconstruire.

Sauter là-dessus: puisque l'accès illégal à la mémoire provient de l'opérateur Add, vous voudrez peut-être vérifier si l'accès direct par les pairs est disponible entre les gpus que vous utilisez. L'opération Add actuelle repose sur cela, et sinon, nous pourrions vouloir corriger le code. En gros, pour ce faire, en python, faites:

from caffe2.python import workspace
print(workspace.GetCudaPeerAccessPattern())

Pourriez-vous coller la sortie de cela pour le débogage? (Surtout, si vous utilisez CUDA_VISIBLE_DEVICES, assurez-vous d'appeler python avec cela aussi)

Sortie @Yangqing de vos deux lignes de débogage:
[[ True True False False] [ True True False False] [False False True True] [False False True True]]
merci d'avoir examiné ce problème (et ... les frameworks caffe / caffe2!)

@jwnsu merci! Juste pour confirmer, donc l'opérateur Add ajoute des tenseurs sur gpu {0,1} et {2,3}, n'est-ce pas? (Je suppose que cela ajoute des éléments à partir des 4 gpus).

Il s'agit de 4 gpus config, avec les identifiants GPU spécifiés comme "0,1,2,4" (via CUDA_VISIBLE_DEVICES.) Si les identifiants GPU sont configurés comme "0,1,2,3" (identifiants GPU les plus bas), cela fonctionne bien sans aucun Erreur.

@Yangqing
Mon serveur Linux a 4 GPU M60,
Ceci est mon espace de travail. Sortie de GetCudaPeerAccessPattern ():
[[Vrai Faux Faux Faux]
[Faux Vrai Faux Faux]
[Faux Faux Vrai Faux]
[Faux Faux Faux Vrai]]

Je peux bien m'entraîner au net en utilisant 1 GPU, mais quand je m'entraîne au net en utilisant 2 ou 4 GPUS, je rencontre les mêmes problèmes ci-dessus, même si je règle NCCL = True

Merci les gars. Cela vérifie mon hypothèse selon laquelle l'accès illégal à la mémoire provient de l'opération Add qui ne gère pas correctement les communications entre appareils lorsque l'accès par les pairs n'est pas activé. Émettra un correctif.

même problème dans les communications inter-appareils ...
cette machine peut utiliser 4 GPU [0,1,2,3]:
image
cette machine peut utiliser [0,1] et [2,3]:
image

BTW, j'ai utilisé 12 Cpu et 4 titan x pour entraîner 3D Faster RCNN dans le cadre de pytorch. Pourquoi Pytorch n'a pas ce problème ????

@Yangqing Parce que je ne peux pas entraîner Detectron en multi-GPU, je veux donc savoir combien de temps allez-vous résoudre le problème de communication cross-GPU? Merci.

@Yangqing J'ai rencontré des problèmes similaires à ceux ci-dessus. Ma station de travail Linux a 2 GTX-1080Ti. Les informations sur l'erreur sont les suivantes:
[enforce fail at context_gpu.h:170] . Encountered CUDA error: an illegal memory access was encountered Error from operator: input: "gpu_0/rpn_cls_logits_fpn2_b_grad" input: "gpu_1/rpn_cls_logits_fpn2_b_grad" output: "gpu_0/rpn_cls_logits_fpn2_b_grad" name: "" type: "Add" device_option { device_type: 1 cuda_gpu_id: 0 }
et la sortie de mon workspace.GetCudaPeerAccessPattern () est:
[[Vrai faux]
[Faux vrai]]
S'agit-il également d'un problème de communication cross-GPU? Sinon, n'importe qui peut m'aider à le réparer, merci.

Oui, c'est le même problème. Les dégradés dans cross-GPU ne peuvent pas s'additionner car les GPU ne peuvent pas communiquer entre eux. si vous voulez résoudre le problème, vous pouvez peut-être copier les dégradés du GPU au CPU, puis les additionner et les faire la moyenne. Et enfin, copiez le gradient moyen du CPU au GPU. @blateyang

Merci pour vos conseils! @coolbrain Mais je ne comprends pas pourquoi certaines personnes peuvent réussir à former un modèle avec deux GPU ou plus. N'ont-ils pas rencontré le même problème de communication cross-GPU?

La formation de 4 GPU avec les ID de GPU les plus bas (0,1,2,3) ou les ID de GPU les plus élevés (4,5,6,7) fonctionne ici sans aucune erreur (8 gpus peuvent fonctionner aussi, mais ne l'ont pas encore essayé. ) Il n'a de problème qu'avec le mélange d'identifiants particuliers, par exemple "0,1,2,4" ou "1,3,5,7".

Le problème de communication entre GPU suspect caffe2 peut se comporter différemment avec la construction de matériel individuel (rbgirshick mentionné précédemment, le serveur Facebook M40 fonctionne également avec un mélange d'identifiants).

Rencontrez le même problème. Est-ce corrigé?

J'ai rencontré le même problème sur une station de travail avec 4 GPUS GTX 1080TI. Le multi-gpu fonctionne bien sur d'autres plates-formes, telles que caffe et tensorflow.
Ceci est mon espace de travail. Sortie de GetCudaPeerAccessPattern ():
[[Vrai Vrai Faux Faux]
[Vrai Vrai Faux Faux]
[Faux Faux Vrai Vrai]
[Faux Faux Vrai Vrai]]
La configuration à deux gpu (avec {0,1} ou {2,3}) fonctionne bien. Trois ou quatre GPU seront confrontés au problème susmentionné. Cependant, mon erreur ne concerne pas l'opération Add , je me souviens que le type est Copy

Le problème a-t-il été réglé?

@rbgirshick Bonjour, j'ai rencontré le même problème que @lwher. Le programme semble rester bloqué avec près de 50% de chances avec NCCL sur ma machine avec Ubuntu 14.04 et 4 GPU. Existe-t-il une solution pour éviter de tels comportements de NCCL? Merci beaucoup!

@Yangqing Bonjour, j'ai rencontré le même problème dans l'opérateur Copy .
Lorsque je n'ajoute pas l'indicateur USE_NCCL True , les erreurs sont les suivantes:

E0325 02:26:02.258566  8284 operator_schema.cc:73] Input index 0 and output idx 0 (gpu_0/res3_0_branch2a_w_grad) are set to be in-place but this is actually not supported by op Copy
Original python traceback for operator 2817 in network `generalized_rcnn` in exception above (most recent call last):
  File "tools/train_net.py", line 358, in <module>
  File "tools/train_net.py", line 196, in main
  File "tools/train_net.py", line 205, in train_model
  File "tools/train_net.py", line 283, in create_model
  File "/home/shuqin/git/RefineNet/lib/modeling/model_builder.py", line 120, in create
  File "/home/shuqin/git/RefineNet/lib/modeling/model_builder.py", line 92, in generalized_rcnn
  File "/home/shuqin/git/RefineNet/lib/modeling/model_builder.py", line 254, in build_generic_detection_model
  File "/home/shuqin/git/RefineNet/lib/modeling/optimizer.py", line 42, in build_data_parallel_model
  File "/home/shuqin/git/RefineNet/lib/modeling/optimizer.py", line 84, in _add_allreduce_graph
  File "/home/shuqin/git/caffe2/build/caffe2/python/muji.py", line 64, in Allreduce
  File "/home/shuqin/git/caffe2/build/caffe2/python/muji.py", line 204, in AllreduceFallback
Traceback (most recent call last):
  File "tools/train_net.py", line 358, in <module>
    main()
  File "tools/train_net.py", line 196, in main
    checkpoints = train_model()
  File "tools/train_net.py", line 210, in train_model
    setup_model_for_training(model, output_dir)
  File "tools/train_net.py", line 316, in setup_model_for_training
    workspace.CreateNet(model.net)
  File "/home/shuqin/git/caffe2/build/caffe2/python/workspace.py", line 166, in CreateNet
    StringifyProto(net), overwrite,
  File "/home/shuqin/git/caffe2/build/caffe2/python/workspace.py", line 192, in CallWithExceptionIntercept
    return func(*args, **kwargs)
RuntimeError: [enforce fail at operator.cc:125] schema->Verify(operator_def). Operator def did not pass schema checking: input: "gpu_0/res3_0_branch2a_w_grad" output: "gpu_0/res3_0_branch2a_w_grad" name: "" type: "Copy" device_option { device_type: 1 cuda_gpu_id: 0 }

Si j'ai ajouté le drapeau USE_NCCL True , les erreurs deviennent alors:

Original python traceback for operator 2928 in network `generalized_rcnn` in exception above (most recent call last):
  File "tools/train_net.py", line 358, in <module>
  File "tools/train_net.py", line 196, in main
  File "tools/train_net.py", line 205, in train_model
  File "tools/train_net.py", line 283, in create_model
  File "/home/shuqin/git/RefineNet/lib/modeling/model_builder.py", line 120, in create
  File "/home/shuqin/git/RefineNet/lib/modeling/model_builder.py", line 92, in generalized_rcnn
  File "/home/shuqin/git/RefineNet/lib/modeling/model_builder.py", line 254, in build_generic_detection_model
  File "/home/shuqin/git/RefineNet/lib/modeling/optimizer.py", line 42, in build_data_parallel_model
  File "/home/shuqin/git/RefineNet/lib/modeling/optimizer.py", line 82, in _add_allreduce_graph
Traceback (most recent call last):
  File "tools/train_net.py", line 358, in <module>
    main()
  File "tools/train_net.py", line 196, in main
    checkpoints = train_model()
  File "tools/train_net.py", line 217, in train_model
    workspace.RunNet(model.net.Proto().name)
  File "/home/shuqin/git/caffe2/build/caffe2/python/workspace.py", line 230, in RunNet
    StringifyNetName(name), num_iter, allow_fail,
  File "/home/shuqin/git/caffe2/build/caffe2/python/workspace.py", line 192, in CallWithExceptionIntercept
    return func(*args, **kwargs)
RuntimeError: [enforce fail at cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 vs 0.  Error at: /home/shuqin/git/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: system error Error from operator:
input: "gpu_0/rpn_cls_logits_fpn2_b_grad" input: "gpu_1/rpn_cls_logits_fpn2_b_grad" input: "gpu_2/rpn_cls_logits_fpn2_b_grad" output: "gpu_0/rpn_cls_logits_fpn2_b_grad" output: "gpu_1/rpn_cls_logits_fpn2_b_grad" output: "gpu_2/rpn_cls_logits_fpn2_b_grad" name: "" type: "NCCLAllreduce" device_option { device_type: 1 cuda_gpu_id: 0 }

Mon système est Ubuntu 14.04, avec Cuda 8.0 et Cudnn 5.1. Ma machine dispose de 8 GPU mais j'ai testé le code uniquement sur les 4 derniers, donc la communication entre les GPU ne devrait pas poser de problème. J'utilise NCCL 2.1.15 pour CUDA 8.0.

J'espère que ce problème pourra être résolu bientôt. C'est assez ennuyeux.

Ce problème existe toujours, non?

En ajoutant «USE_NCLL True» lors de l'exécution d'un entraînement multi-GPU, j'ai réussi à démarrer mon entraînement. Bien que des blocages puissent parfois se produire, vous pouvez essayer de modifier certains paramètres d'entraînement tels que le taux d'apprentissage pour le résoudre.

Le problème existe toujours.

@xieshuqin J'ai rencontré le même problème 'status == ncclSuccess. 2 contre 0. » avec vous lorsque vous utilisez «USE_NCCL True». Comment résolvez-vous ce problème? Merci

@pkuxwguan Mon problème a été résolu mais j'ai oublié comment je l'ai résolu. Désolé pour ça. Mais je me souviens que le problème devrait être lié à une mauvaise installation de NCCL.

Salut à tous, j'ai également souffert de ce problème, alors je l'ai finalement résolu par moi-même. https://github.com/pytorch/pytorch/pull/6896 a résolu ce problème :)

quelqu'un me dit si je peux exécuter le masque r-cnn avec un seul GPU?

@daquexian J'ai essayé votre PR, ça marche !!! Merci beaucoup

@daquexian Ce PR ne semble pas fonctionner pour moi. Je rencontre des blocages en utilisant un seul GPU sans NCCL et également en utilisant 2 GPU avec USE_NCCL True . Après avoir changé muji.py fonction de votre PR et exécuté avec 2 GPU avec USE_NCCL True , je rencontre toujours une impasse; la formation s'arrête simplement à des nombres d'itérations aléatoires.

Merci d'avoir essayé :) Vous n'avez pas besoin de définir USE_NCCL = True si vous utilisez mon
pr. NCCL et "muji" sont deux méthodes de communication gpu différentes. Mon pr est un
patch pour muji, qui nécessitait un accès par les pairs gpu auparavant, et non pour nccl.
Il suffit de définir USE_NCCL = False et mon pr fonctionnera.

Le mer.2 mai 2018, 02:51 Thomas Balestri [email protected]
a écrit:

@daquexian https://github.com/daquexian Ce PR ne semble pas fonctionner
pour moi. Je rencontre des blocages en utilisant un seul GPU sans NCCL
et aussi lors de l'utilisation de 2 GPU avec USE_NCCL True. Après avoir changé muji.py
selon votre PR et fonctionnant avec 2 GPU avec USE_NCCL True, je suis
vit toujours une impasse; la formation s'arrête juste à une itération aléatoire
Nombres.

-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/facebookresearch/Detectron/issues/32#issuecomment-385755468 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ALEcn2nGO9e-fIF8S3bTDNkK4370hjOVks5tuK7DgaJpZM4Rsc8n
.

Il me manque peut-être quelque chose, mais si je mets USE_NCCL = False et que j'utilise votre PR modifié muji.py et muji_test.py, j'obtiens l'erreur d'origine:

I0502 14:35:57.192476 79712 context_gpu.cu:318] Total: 23025 MB
E0502 14:35:58.382604 79711 net_dag.cc:195] Exception from operator chain starting at '' (type 'Add'): caffe2::EnforceNotMet: [enforce fail at context_gpu.h:156] . Encountered CUDA error: an illegal memory access was encountered Error from operator: 
input: "gpu_0/rpn_cls_logits_fpn2_b_grad" input: "gpu_1/rpn_cls_logits_fpn2_b_grad" output: "gpu_0/rpn_cls_logits_fpn2_b_grad" name: "" type: "Add" device_option { device_type: 1 cuda_gpu_id: 0 }
E0502 14:35:58.382622 79712 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'Add'): caffe2::EnforceNotMet: [enforce fail at context_gpu.h:156] . Encountered CUDA error: an illegal memory access was encountered Error from operator: 
input: "gpu_0/rpn_cls_logits_fpn2_w_grad" input: "gpu_1/rpn_cls_logits_fpn2_w_grad" output: "gpu_0/rpn_cls_logits_fpn2_w_grad" name: "" type: "Add" device_option { device_type: 1 cuda_gpu_id: 0 }
F0502 14:35:58.382670 79711 context_gpu.h:107] Check failed: error == cudaSuccess an illegal memory access was encountered
*** Check failure stack trace: ***
F0502 14:35:58.382683 79712 context_gpu.h:107] Check failed: error == cudaSuccess an illegal memory access was encountered
*** Check failure stack trace: ***
E0502 14:35:58.383510 79709 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at context_gpu.cu:336] error == cudaSuccess. 77 vs 0. Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:336: an illegal memory access was encountered Error from operator: 
input: "gpu_1/fpn_res3_3_sum" input: "gpu_1/conv_rpn_fpn2_w" input: "gpu_1/__m18_shared" output: "_gpu_1/conv_rpn_fpn2_w_grad_autosplit_2" output: "_gpu_1/conv_rpn_fpn2_b_grad_autosplit_2" output: "_gpu_1/fpn_res3_3_sum_grad_autosplit_0" name: "" type: "ConvGradient" arg { name: "kernel" i: 3 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 1 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 1 } engine: "CUDNN" is_gradient_op: true
E0502 14:35:58.383541 79713 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at conv_op_cudnn.cc:1290] status == CUDNN_STATUS_SUCCESS. 8 vs 0. , Error at: /home/markable-ai/pytorch/caffe2/operators/conv_op_cudnn.cc:1290: CUDNN_STATUS_EXECUTION_FAILED Error from operator: 
input: "gpu_3/conv_rpn_fpn4" input: "gpu_3/rpn_bbox_pred_fpn2_w" input: "gpu_3/rpn_bbox_pred_fpn4_grad" output: "_gpu_3/rpn_bbox_pred_fpn2_w_grad_autosplit_1" output: "_gpu_3/rpn_bbox_pred_fpn2_b_grad_autosplit_1" output: "gpu_3/__m13_shared" name: "" type: "ConvGradient" arg { name: "kernel" i: 1 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 0 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 3 } engine: "CUDNN" is_gradient_op: true
E0502 14:35:58.383591 79706 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at context_gpu.cu:336] error == cudaSuccess. 77 vs 0. Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:336: an illegal memory access was encountered Error from operator: 
input: "gpu_3/conv_rpn_fpn3" input: "gpu_3/rpn_cls_logits_fpn2_w" input: "gpu_3/rpn_cls_logits_fpn3_grad" output: "_gpu_3/rpn_cls_logits_fpn2_w_grad_autosplit_2" output: "_gpu_3/rpn_cls_logits_fpn2_b_grad_autosplit_2" output: "_gpu_3/conv_rpn_fpn3_grad_autosplit_0" name: "" type: "ConvGradient" arg { name: "kernel" i: 1 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 0 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 3 } engine: "CUDNN" is_gradient_op: true
F0502 14:35:58.382683 79712 context_gpu.h:107] Check failed: error == cudaSuccess an illegal memory access was encounteredF0502 14:35:58.434631 79709 context_gpu.h:107] FCheck failed: error == cudaSuccess an illegal memory access was encountered0502 14:35:58.434648 79713 c*** Check failure stack trace: ***
E0502 14:35:58.383741 79700 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at context_gpu.cu:336] error == cudaSuccess. 77 vs 0. Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:336: an illegal memory access was encountered Error from operator: 
input: "gpu_3/conv_rpn_fpn2" input: "gpu_3/rpn_cls_logits_fpn2_w" input: "gpu_3/rpn_cls_logits_fpn2_grad" output: "_gpu_3/rpn_cls_logits_fpn2_w_grad_autosplit_3" output: "_gpu_3/rpn_cls_logits_fpn2_b_grad_autosplit_3" output: "_gpu_3/conv_rpn_fpn2_grad_autosplit_0" name: "" type: "ConvGradient" arg { name: "kernel" i: 1 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 0 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 3 } engine: "CUDNN" is_gradient_op: true
Aborted (core dumped)

J'utilise Cuda 9.1, cudnn 7.1 avec 4 V100.

@ Feynman27 Pouvez-vous me dire quelle branche (comme Allreduce4 , Allreduce4Group2 , Allreduce2 ou autres) de Allreduce dans le muji.py mis à jour est entrée? Vous voudrez peut-être ajouter des fonctions d'impression dans ces branches pour le savoir. Et si vous remplacez l'implémentation de Allreduce en appelant simplement AllreduceFallback ? Ce sera formidable si vous pouvez également fournir votre modèle d'accès gpu comme https://github.com/facebookresearch/Detectron/issues/32#issuecomment -361739340. Merci!

Allreduce4 est appelé. Le modèle d'accès gpu est:

>>> from caffe2.python import workspace
>>> print(workspace.GetCudaPeerAccessPattern())
[[ True False False False]
 [False  True False False]
 [False False  True False]
 [False False False  True]]

J'essaierai d'appeler AllreduceFallback.

L'appel de AllreduceFallback donne une erreur similaire à celle ci-dessus:

I0502 17:08:51.294476 88651 context_gpu.cu:318] Total: 22524 MB
E0502 17:08:52.009866 88659 net_dag.cc:195] Exception from operator chain starting at '' (type 'Add'): caffe2::EnforceNotMet: [enforce fail at context_gpu.h:156] . Encountered CUDA error: an illegal memory access was encountered Error from operator: 
input: "gpu_0/rpn_cls_logits_fpn2_w_grad" input: "gpu_1/rpn_cls_logits_fpn2_w_grad" output: "gpu_0/rpn_cls_logits_fpn2_w_grad" name: "" type: "Add" device_option { device_type: 1 cuda_gpu_id: 0 }
F0502 17:08:52.009990 88659 context_gpu.h:107] Check failed: error == cudaSuccess an illegal memory access was encountered
*** Check failure stack trace: ***
E0502 17:08:52.010440 88651 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at context_gpu.cu:336] error == cudaSuccess. 77 vs 0. Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:336: an illegal memory access was encountered Error from operator: 
input: "gpu_2/fpn_res3_3_sum" input: "gpu_2/conv_rpn_fpn2_w" input: "gpu_2/__m15_shared" output: "_gpu_2/conv_rpn_fpn2_w_grad_autosplit_2" output: "_gpu_2/conv_rpn_fpn2_b_grad_autosplit_2" output: "_gpu_2/fpn_res3_3_sum_grad_autosplit_0" name: "" type: "ConvGradient" arg { name: "kernel" i: 3 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 1 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 2 } engine: "CUDNN" is_gradient_op: true
E0502 17:08:52.010524 88663 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at context_gpu.cu:336] error == cudaSuccess. 77 vs 0. Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:336: an illegal memory access was encountered Error from operator: 
input: "gpu_1/fpn_res2_2_sum" input: "gpu_1/conv_rpn_fpn2_w" input: "gpu_1/__m12_shared" output: "_gpu_1/conv_rpn_fpn2_w_grad_autosplit_3" output: "_gpu_1/conv_rpn_fpn2_b_grad_autosplit_3" output: "_gpu_1/fpn_res2_2_sum_grad_autosplit_0" name: "" type: "ConvGradient" arg { name: "kernel" i: 3 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 1 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 1 } engine: "CUDNN" is_gradient_op: true
F0502 17:08:52.010545 88660 context_gpu.cu:387] Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:387: an illegal memory access was encountered
*** Check failure stack trace: ***
F0502 17:08:52.010545 88660 context_gpu.cu:387] Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:387: an illegal memory access was encounteredF0502 17:08:52.061641 88651 context_gpu.hF107] 502 17:Ch:ck failed: error == cudaSuccess 52.061651 88663 context_gpu.h:
E0502 17:08:52.010577 88653 net_dag.cc:195] Secondary exception from operator chain starting at '' (type 'ConvGradient'): caffe2::EnforceNotMet: [enforce fail at context_gpu.cu:336] error == cudaSuccess. 77 vs 0. Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:336: an illegal memory access was encountered Error from operator: 
input: "gpu_0/fpn_res4_22_sum" input: "gpu_0/conv_rpn_fpn2_w" input: "gpu_0/__m15_shared" output: "_gpu_0/conv_rpn_fpn2_w_grad_autosplit_1" output: "_gpu_0/conv_rpn_fpn2_b_grad_autosplit_1" output: "_gpu_0/fpn_res4_22_sum_grad_autosplit_0" name: "" type: "ConvGradient" arg { name: "kernel" i: 3 } arg { name: "exhaustive_search" i: 0 } arg { name: "pad" i: 1 } arg { name: "order" s: "NCHW" } arg { name: "stride" i: 1 } device_option { device_type: 1 cuda_gpu_id: 0 } engine: "CUDNN" is_gradient_op: true
*** Check failure stack trace: ***
F0502 17:08:52.010545 88660 context_gpu.cu:387] Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:387: an illegal memory access was encounteredF0502 17:08:52.061641 88651 context_gpu.hF107] 502 17:Ch:ck failed: error == cudaSuccess 52.061651 88663 context_gpu.h:
07] Check failed: error == cudaSuccess an illegal memory access was encountered
*** Check failure stack trace: ***
F0502 17:08:52.010545 88660 context_gpu.cu:387] Error at: /home/markable-ai/pytorch/caffe2/core/context_gpu.cu:387: an illegal memory access was encounteredF0502 17:08:52.061641 88651 context_gpu.hF107] 502 17:Ch:ck failed: error == cudaSuccess 52.061651 88663 context_gpu.h:
07] Check failed: error == cudaSuccess an illegal memory access was encounteredF0502 17:08:52.061749 88653 context_gpu.h:107] Check failed: error == cudaSuccess an illegal memory access was encountered
*** Check failure stack trace: ***
Aborted (core dumped

@ Feynman27 C'est étrange. Selon votre modèle d'accès gpu, AllreduceFallback au lieu de Allreduce4 sera appelé. Et lorsque vous avez appelé manuellement AllreduceFallback , le message d'erreur ne semble pas provenir de AllreduceFallback . Avez-vous changé le muji.py dans le bon dossier? Par exemple, si le package python de caffe2 est dans /usr/lib/python/site-packages/caffe2 , alors changer le muji.py dans le dossier source de caffe2 (comme ~/caffe2/python ) ne fonctionnera pas.

@ Feynman27 avez-vous reconstruit le caffe2?

@daquexian Le paquet caffe2 est installé sous pytorch/caffe2 , pas /usr/lib/python/site-packages/caffe2 ou autre. J'ai défini mon $PYTHONPATH pour chercher dans ce répertoire. J'ai également confirmé cela par:

Python 2.7.14 |Anaconda, Inc.| (default, Mar 27 2018, 17:29:31) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe2
>>> caffe2.__file__
'/home/markable-ai/pytorch/build/caffe2/__init__.pyc'
>>> from caffe2.python import muji
>>> muji.__file__
'/home/markable-ai/pytorch/build/caffe2/python/muji.pyc'
>>> 

J'ai simplement modifié le fichier muji.py sous pytorch/caffe2/python/muji.py .

@yuzcccc Je n'ai pas reconstruit caffe2, mais pourquoi devrais-je le faire? Je ne modifie qu'un fichier python.

@ Feynman27 Je pense que vous devriez modifier muji.py sous /home/markable-ai/pytorch/build/caffe2/python/muji.py

Oui, c'était ma faute. Bonne prise. J'étais en train pytorch/caffe2/python/muji.py modifier pytorch/build/caffe2/python/muji.py .

@ Feynman27 C'est heureux de le voir fonctionner :)
@Yangqing Pourriez-vous s'il vous plaît revoir mon pr https://github.com/pytorch/pytorch/pull/6896? Cela peut aider de nombreux utilisateurs de detectron :)

@daquexian Malheureusement, il me semble toujours que je rencontre des blocages.

@ Feynman27 Hmm .. Quelle est la valeur de USE_NCCL ? Cela devrait être False

Oui, USE_NCCL été défini sur false.

@ Feynman27 Désolé, je ne sais pas pourquoi cela entraînera une impasse. C'est difficile à reproduire pour moi

Assez juste. Pour autant que je sache, l'impasse que je rencontre pourrait ne pas être liée à l'activation ou non de l'accès par les pairs au GPU. Votre PR m'a définitivement permis de commencer à m'entraîner avec USE_NCCL=False . J'exécute sur des machines Azure, donc cela pourrait être lié à l'exécution sur leurs machines virtuelles. J'ai commencé à m'entraîner sur des machines locales avec 2 TitanX et la formation semble bien progresser.

@daquexian Merci! Votre PR a fonctionné pour moi!

Il semble que ce problème puisse être résolu.

@gadcam merci d'avoir aidé à identifier les problèmes qui peuvent être résolus!

Pour celui-ci, j'aimerais le laisser ouvert jusqu'à ce qu'un correctif soit fusionné dans Caffe2.

@rbgirshick Malheureusement, personne ne révise mes relations publiques : |

@rbgirshick Merci! Mon PR https://github.com/pytorch/pytorch/pull/6896 a été fusionné. Il semble que ce problème puisse être résolu :)

Cette page vous a été utile?
0 / 5 - 0 notes