Detectron: Multi-GPU-Training löst einen illegalen Speicherzugriff aus

Erstellt am 25. Jan. 2018  ·  64Kommentare  ·  Quelle: facebookresearch/Detectron

Wenn ich eine GPU zum Trainieren benutze, gibt es kein Problem. Aber wenn ich zwei oder vier GPUs benutze, tritt das Problem auf. Die Protokollausgabe:

Beenden wird aufgerufen, nachdem eine Instanz von 'caffe2 :: EnforceNotMet' ausgelöst wurde.
what (): [Fehler erzwingen bei context_gpu.h: 170]. CUDA-Fehler festgestellt: Es wurde ein unzulässiger Speicherzugriff festgestellt. Fehler vom Bediener:
Eingabe: "gpu_0 / rpn_cls_logits_fpn2_w_grad" Eingabe: "gpu_1 / rpn_cls_logits_fpn2_w_grad" Ausgabe: "gpu_0 / rpn_cls_logits_fpn2_w_grad"
* Bei 1516866180 (Unix-Zeit) abgebrochen. Versuchen Sie "Datum -d @ 1516866180", wenn Sie das GNU-Datum verwenden. *
beenden rekursiv aufgerufen
beenden rekursiv aufgerufen
beenden rekursiv aufgerufen
PC: @ 0x7ff67559f428 gsignal
beenden rekursiv aufgerufen
beenden rekursiv aufgerufen
E0125 07: 43: 00.745853 55683 pybind_state.h: 422] Beim Ausführen der PythonOp-Funktion ist eine Ausnahme aufgetreten: RuntimeError: [Fehler erzwingen bei context_gpu.h: 307] error == cudaSuccess. 77 vs 0. Fehler bei: /mnt/hzhida/project/caffe2/caffe2/core/context_gpu.h:307: Es wurde ein unzulässiger Speicherzugriff festgestellt

Beim:
/mnt/hzhida/facebook/detectron/lib/ops/generate_proposals.py(101): vorwärts
* SIGABRT (@ 0x3e80000d84f), empfangen von PID 55375 (TID 0x7ff453fff700) von PID 55375;
beenden rekursiv aufgerufen
@ 0x7ff675945390 (unbekannt)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a abbrechen
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff66f37c6b6 (unbekannt)
@ 0x7ff66f37c701 std :: terminate ()
@ 0x7ff66f3a7d38 (unbekannt)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141d Klon
@ 0x0 (unbekannt)
Abgebrochen (Core Dumped)

upstream bug

Hilfreichster Kommentar

Danke Leute. Dies bestätigt meine Annahme, dass der illegale Speicherzugriff vom Add-Op stammt, der die geräteübergreifende Kommunikation nicht ordnungsgemäß verarbeitet, wenn der Peer-Zugriff nicht aktiviert ist. Wird ein Update ausgeben.

Alle 64 Kommentare

Ich habe den gleichen Fehler bekommen. Der Unterschied ist, wenn ich eine GPU oder zwei GPUs verwende, gibt es kein Problem. Bei Verwendung von 4 GPUs zum Trainieren von Mask RCNN (mask_rcnn_R-101-FPN) oder RetinaNet (retinanet_R-101-FPN) tritt das gleiche Problem auf.

Ich habe das gleiche Problem, wenn ich das tutorial_Res50-Netzwerk mit zwei oder mehr GPUs trainiere.

Beim Angeben von GPU-IDs ist dasselbe Problem aufgetreten (dh anders als bei den niedrigsten IDs, z. B. '1,3,5,7' für 4 GPUs). Wenn die niedrigsten GPU-IDs angegeben sind, wird das Training problemlos fortgesetzt.

@jwnsu : Wir arbeiten an einem Fix, damit das Training immer noch funktioniert, wenn CUDA_VISIBLE_DEVICES nicht die niedrigsten IDs verwendet. Vielen Dank für die Meldung und Diagnose.

Hallo @jwnsu , @coolbrain , @tshizys , @lwher : Wir können dieses Problem auf unserer Seite nicht reproduzieren.

Können Sie jeweils weitere Informationen bereitstellen, die möglicherweise ein gemeinsames Muster aufzeigen?

Bestimmtes:

  • Betriebssystem: ?
  • Compiler-Version :?
  • CUDA-Version :?
  • cuDNN-Version :?
  • NVIDIA-Treiberversion :?
  • GPU-Modelle (für alle Geräte, wenn sie nicht alle gleich sind) :?
  • Sonst noch etwas, das relevant erscheint :?

Folgendes sehen wir beispielsweise beim Training mit GPU-IDs 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 |
+-----------------------------------------------------------------------------+

Betriebssystem: Ubuntu 16.04
Compiler-Version: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
CUDA-Version: 8.0
cuDNN-Version: v5.1
NVIDIA-Treiberversion: 384.111

nvidia-smi:
+ --------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Treiberversion: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU-Name Persistence-M | Bus-ID Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Verwendung / Kappe | Speichernutzung | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Aus | 00001543: 00: 00.0 Aus | Aus |
| N / A 42C P0 41W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 Aus | 00003134: 00: 00.0 Aus | Aus |
| N / A 42C P0 39W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Aus | 00004975: 00: 00.0 Aus | Aus |
| N / A 38C P0 41W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Aus | 0000F3E6: 00: 00.0 Aus | Aus |
| N / A 38C P0 40W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Betriebssystem: CentOS Linux Release 7.1.1503
Compiler-Version: gcc-Version 4.8.2
CUDA-Version: CUDA 8.0
cuDNN-Version: cuDNN 6.0.21
NVIDIA-Treiberversion: 375.26
GPU-Modelle: 4x GeForce GTX TITAN X (12G)

nvidia-smi:
image

Bei Verwendung von 4 GPUs (0,1,2,3) zum Trainieren der Maske RCNN (e2e_mask_rcnn_R-101-FPN), des RetinaNet (retinanet_R-101-FPN) oder der schnelleren RCNN (e2e_faster_rcnn_R-50-FPN) wird der Fehler „context_gpu.h : 307: Es wurde ein unzulässiger Speicherzugriff festgestellt. ”Oder“ context_gpu.h: 170. Es ist ein CUDA-Fehler aufgetreten: Es wurde ein unzulässiger Speicherzugriff festgestellt. Fehler vom Bediener: Eingabe: "gpu_0 / retnet_cls_pred_fpn3_b_grad" Eingabe: "gpu_2 / retnet_cls_pred_fpn3_b_grad" Ausgabe: "gpu_0 / retnet_cls_pred_f_" : 0} ”tritt auf.

Mit einer GPU oder zwei GPUS (0,1 oder 2,3) kann es jedoch normal trainiert werden.
Vielen Dank.

@jwnsu : CUDA_VISIBLE_DEVICES ). Der Fehler "ungültige Geräte-Ordnungszahl" ist darauf zurückzuführen, dass versucht wird, Operationen auf Geräten zu erstellen, auf die der Prozess keinen Zugriff hat.

@coolbrain , @tshizys : Danke für die Details. Was passiert, wenn Sie zwei GPUs mit den IDs {0,2}, {0,3}, {1,2} oder {1,3} verwenden?

@rbgirshick Sie haben Recht, haben eine falsche Konfigurationsdatei (mit 8 GPUs) ausgewählt, um es gestern zu versuchen. Ich habe es gerade noch einmal mit der richtigen Konfigurationsdatei versucht (4 GPUs, Fehler von den GPU-IDs "1,2,4,5", "0,1,2,3" funktioniert einwandfrei). Der Fehler ähnelt jetzt dem, was andere sehen:

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 : Ein Schuss in die Dunkelheit besteht darin, die All-Reduce-Implementierung auf nccl umzustellen, indem USE_NCCL True an train_net.py , wie in:

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

Dies setzt voraus, dass Caffe2 mit nccl ops erstellt wurde. Ich bin mir nicht sicher, ob dies standardmäßig erfolgt oder ob einige Arbeiten erforderlich sind, um Caffe2 mit nccl-Unterstützung neu zu erstellen.

@rbgirshick , wenn zwei GPUs verwendet werden, dh {0,2}, {0,3}, {1,2}, {1,3}, besteht der Fehler weiterhin. Hier sind die Details, zum Beispiel mit {0,3} und Training RetinaNet (retinanet_R-101-FPN):

F0128 12: 09: 08.461153 4938 context_gpu.cu:387] Fehler bei: /home/yszhu/local/caffe2/caffe2/core/context_gpu.cu:387: Es wurde ein unzulässiger Speicherzugriff festgestellt
* Überprüfen Sie die Ablaufverfolgung des Fehlerstapels:
beenden rekursiv aufgerufen
beenden rekursiv aufgerufen
Abgebrochen um 1517112548 (Unix-Zeit) versuchen Sie "Datum -d @ 1517112548", wenn Sie das GNU-Datum verwenden
Beenden wird aufgerufen, nachdem eine Instanz von 'caffe2 :: EnforceNotMet' ausgelöst wurde.
what (): [Fehler erzwingen bei context_gpu.h: 170]. CUDA-Fehler festgestellt: Es wurde ein unzulässiger Speicherzugriff festgestellt. Fehler vom Bediener:
Eingabe: "gpu_0 / fpn_6_relu" Eingabe: "gpu_0 / fpn_7_w" Eingabe: "gpu_0 / __ m23_shared" Ausgabe: "gpu_0 / fpn_7_w_grad" Ausgabe: "gpu_0 / fpn_7_b_grad" "arg {name:" kernel "i: 3} arg {name:" erschöpfende_suche "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 (unbekannt)
SIGABRT (@ 0x3e8000012b7), empfangen von PID 4791 (TID 0x7f2a6effd700) von PID 4791;
@ 0x7f2bdf7126ce google :: LogMessage :: SendToLog ()
@ 0x7f2c2670e130 (unbekannt)
@ 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 (unbekannt)
@ 0x7f2be27f42d9 std :: _ Sp_counted_base <> :: _ M_release ()
@ 0x7f2c1b1af973 std :: terminate ()
@ 0x7f2c1b2062c5 (unbekannt)
@ 0x7f2bdfd377d1 caffe2 :: Tensor <> :: ResizeLike <> ()
@ 0x7f2c26706df5 start_thread
@ 0x7f2bdfd6e3e2 _ZN6caffe210CuDNNState7executeIRZNS_19CudnnConvGradientOp13DoRunWithTypeIffffffffEEbvEUlPS0_E1_EEvP11CUstream_stOT_
@ 0x7f2c25d2b1ad __clone
@ 0x7f2bdfd707e1 caffe2 :: CudnnConvGradientOp :: DoRunWithType <> ()
@ 0x0 (unbekannt)

image

Die Fehlerformen sind nicht jedes Mal gleich, sondern nur "CUDA-Fehler aufgetreten: Es wurde ein unzulässiger Speicherzugriff festgestellt".

Ich habe auch caffe2 mit nccl-1.3.5 neu erstellt (nach https://caffe2.ai/docs/getting-started.html?platform=centos&configuration=cloud#null__troubleshooter):

image

und schalten Sie die All-Reduce-Implementierung auf nccl um, indem Sie USE_NCCL True an train_net.py übergeben, wie in:

python2 tools / 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

Der Fehler verschwand ^ - ^ für beide mit vier GPUs {0,1,2,3} oder einer von zwei GPUs {0,2}, {0,3}, {1,2}, {1,3}.
@rbgirshick ,

Hallo, ich öffne die nccl-Operation, um das tutorial_network zu trainieren, und der obige Fehler ist verschwunden. Das Programm bleibt jedoch nach dem Laden der Daten hängen und belegt ständig 100% der CPU.

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

das Programm hängt ......

meine Umgebung:
Betriebssystem: Ubuntu 16.04
Compiler-Version: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
CUDA-Version: 8.0
cuDNN-Version: v5.1
NVIDIA-Treiberversion: 384.111

nvidia-smi:
+ --------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Treiberversion: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU-Name Persistence-M | Bus-ID Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Verwendung / Kappe | Speichernutzung | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Aus | 00001543: 00: 00.0 Aus | Aus |
| N / A 42C P0 41W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 Aus | 00003134: 00: 00.0 Aus | Aus |
| N / A 42C P0 39W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Aus | 00004975: 00: 00.0 Aus | Aus |
| N / A 38C P0 41W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Aus | 0000F3E6: 00: 00.0 Aus | Aus |
| N / A 38C P0 40W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +

@lwher : das ist unglücklich. Der Grund, warum wir NCCL standardmäßig nicht verwenden, ist, dass es dazu neigt, Deadlocks zu verursachen, was ich denke, dass Sie sehen.

Nachdem ich caffe2 mit NCCL neu erstellt habe, führe ich das Programm mit diesem Skript erneut aus:
Python Tools / train_net.py \
--multi-gpu-testing \
--cfg configs / Getting_started / tutorial_4gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR ./output USE_NCCL True

Es wirft diesen Fehler aus:

Erstellen von NCCLContext für Schlüssel: 0: 0,1,2,3,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WARNUNG:

Sie sollten immer mit libnvidia-ml.so arbeiten, das mit Ihrem installiert ist
NVIDIA Display-Treiber. Standardmäßig ist es in / usr / lib und / usr / lib64 installiert.
libnvidia-ml.so im GDK-Paket ist eine Stub-Bibliothek, die nur für angehängt ist
Erstellungszwecke (z. B. Computer, den Sie für Ihre Anwendung nicht haben)
Display-Treiber installiert haben).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Beenden wird aufgerufen, nachdem eine Instanz von 'caffe2 :: EnforceNotMet' ausgelöst wurde.
what (): [Fehler erzwingen bei cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 vs 0. Fehler bei: /mnt/hzhida/project/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: Systemfehler Fehler vom Bediener:
Eingabe: "gpu_0 / rpn_cls_logits_fpn2_w_grad" input "gpu_1 / rpn_cls_logits_fpn2_w_grad" input "gpu_2 / rpn_cls_logits_fpn2_w_grad" input "gpu_3 / rpn_cls_logits_fpn2_w_grad" output: "gpu_0 / rpn_cls_logits_fpn2_w_grad" output: "gpu_1 / rpn_cls_logits_fpn2_w_grad" output: "gpu_2 / rpn_cls_logits_fpn2_w_grad" -Ausgang : "gpu_3 / rpn_cls_logits_fpn2_w_grad" name: "" type: "NCCLAllreduce" device_option {device_type: 1 cuda_gpu_id: 0}
* Bei 1517210588 (Unix-Zeit) abgebrochen. Versuchen Sie "Datum -d @ 1517210588", wenn Sie das GNU-Datum verwenden
PC: @ 0x7ff1e0383428 gsignal
SIGABRT (@ 0x3e800007a46), empfangen von PID 31302 (TID 0x7fefb5ffb700) von PID 31302;
I0129 07: 23: 08.187249 31591 cuda_nccl_gpu.cc:110] NCCLContext für Schlüssel erstellen: 0: 0,1,2,3,

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WARNUNG:

Sie sollten immer mit libnvidia-ml.so arbeiten, das mit Ihrem installiert ist
NVIDIA Display-Treiber. Standardmäßig ist es in / usr / lib und / usr / lib64 installiert.
libnvidia-ml.so im GDK-Paket ist eine Stub-Bibliothek, die nur für angehängt ist
Erstellungszwecke (z. B. eine Maschine, die Sie für Ihre Anwendung nicht haben)
Display-Treiber installiert haben).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
beenden rekursiv aufgerufen
@ 0x7ff1e0729390 (unbekannt)
I0129 07: 23: 08.188051 31592 context_gpu.cu:321] GPU 0: 2466 MB
I0129 07: 23: 08.188074 31592 context_gpu.cu:321] GPU 1: 2387 MB
I0129 07: 23: 08.188091 31592 context_gpu.cu:321] GPU 2: 2311 MB
I0129 07: 23: 08.188099 31592 context_gpu.cu:321] GPU 3: 2382 MB
I0129 07: 23: 08.188107 31592 context_gpu.cu:325] Gesamt: 9548 MB
@ 0x7ff1e0383428 gsignal
@ 0x7ff1e038502a abbrechen
@ 0x7ff1da16284d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff1da1606b6 (unbekannt)
@ 0x7ff1da160701 std :: terminate ()
@ 0x7ff1da18bd38 (unbekannt)
@ 0x7ff1e071f6ba start_thread
@ 0x7ff1e045541d Klon
@ 0x0 (unbekannt)
Abgebrochen (Core Dumped)

Laufumgebung:
Betriebssystem: Ubuntu 16.04
Compiler-Version: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
CUDA-Version: 8.0
cuDNN-Version: v5.1
NVIDIA-Treiberversion: 384.111

nvidia-smi:
+ --------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Treiberversion: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU-Name Persistence-M | Bus-ID Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Verwendung / Kappe | Speichernutzung | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Aus | 00001543: 00: 00.0 Aus | Aus |
| N / A 42C P0 41W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 Aus | 00003134: 00: 00.0 Aus | Aus |
| N / A 42C P0 39W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Aus | 00004975: 00: 00.0 Aus | Aus |
| N / A 38C P0 41W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Aus | 0000F3E6: 00: 00.0 Aus | Aus |
| N / A 38C P0 40W / 150W | 0MiB / 8123MiB | 0% Standard |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Ein zusätzlicher Hinweis zu NCCL: Caffe2 wird standardmäßig mit NCCL erstellt, sodass keine Neuerstellung erforderlich ist.

Springen Sie dazu: Da der unzulässige Speicherzugriff vom Operator "Hinzufügen" stammt, möchten Sie möglicherweise überprüfen, ob zwischen dem von Ihnen verwendeten GPUS ein direkter Peer-Zugriff verfügbar ist. Current Add op stützt sich darauf, und wenn nicht, möchten wir den Code möglicherweise tatsächlich korrigieren. Um dies in Python zu tun, gehen Sie grundsätzlich wie folgt vor:

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

Könnten Sie die Ausgabe davon zum Debuggen einfügen? (Insbesondere wenn Sie CUDA_VISIBLE_DEVICES verwenden, stellen Sie sicher, dass Sie auch damit Python aufrufen.)

@ Yangqing- Ausgabe Ihrer beiden Debug-Zeilen:
[[ True True False False] [ True True False False] [False False True True] [False False True True]]
Vielen Dank für die Untersuchung dieses Problems (und ... caffe / caffe2 Frameworks!)

@ jwnsu danke! Nur zur Bestätigung, also fügt der Add-Operator Tensoren über gpu {0,1} und {2,3} hinzu, oder? (Ich nehme an, es fügt Sachen aus dem 4 gpus zusammen).

Es handelt sich um eine 4-GPUS-Konfiguration mit GPU-IDs, die als "0,1,2,4" angegeben sind (über CUDA_VISIBLE_DEVICES). Wenn GPU-IDs als "0,1,2,3" (niedrigste GPU-IDs) konfiguriert sind, funktioniert dies ohne Error.

@ Yangqing
Mein Linux Server hat 4 M60 GPUs,
Dies ist mein Arbeitsbereich. GetCudaPeerAccessPattern () Ausgabe:
[[Richtig Falsch Falsch Falsch]
[Falsch Richtig Falsch Falsch]
[Falsch Falsch Richtig Falsch]
[Falsch Falsch Falsch Richtig]]

Ich kann das Netz mit 1 GPU gut trainieren, aber wenn ich das Netz mit 2 oder 4 GPUS trainiere, stoße ich auf die gleichen Probleme wie oben, selbst wenn ich NCCL = True setze

Danke Leute. Dies bestätigt meine Annahme, dass der illegale Speicherzugriff vom Add-Op stammt, der die geräteübergreifende Kommunikation nicht ordnungsgemäß verarbeitet, wenn der Peer-Zugriff nicht aktiviert ist. Wird ein Update ausgeben.

gleiches Problem bei der geräteübergreifenden Kommunikation ...
Diese Maschine kann 4 GPUs [0,1,2,3] verwenden:
image
Diese Maschine kann [0,1] und [2,3] verwenden:
image

Übrigens habe ich 12 CPU und 4 Titan x verwendet, um 3D Faster RCNN im Pytorch-Framework zu trainieren. Warum hat Pytorch dieses Problem nicht ????

@ Yangqing Da ich Detectron nicht mit mehreren GPUs trainieren kann, möchte ich wissen, wie lange Sie das GPU-übergreifende Kommunikationsproblem beheben können. Vielen Dank.

@ Yangqing Ich stieß auf ähnliche Probleme wie oben. Meine Linux-Workstation verfügt über 2 GTX-1080Ti. Die Fehlerinformationen lauten wie folgt:
[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 }
und mein Arbeitsbereich.GetCudaPeerAccessPattern () Ausgabe ist:
[[Wahr falsch]
[Falsch Richtig]]
Ob es sich auch um ein GPU-übergreifendes Kommunikationsproblem handelt? Wenn nicht, kann mir jeder helfen, das Problem zu beheben, danke.

Ja, es ist das gleiche Problem. Die Farbverläufe in der GPU-übergreifenden Verbindung können nicht addiert werden, da die GPUs nicht miteinander kommunizieren können. Wenn Sie das Problem lösen möchten, können Sie möglicherweise die Farbverläufe von der GPU auf die CPU kopieren, sie dann zusammenfassen und mitteln. Und schließlich kopieren Sie den durchschnittlichen Gradienten von der CPU zur GPU. @blateyang

Danke für deinen Rat! @coolbrain Aber ich kann nicht verstehen, warum manche Leute Modelle mit zwei oder mehr GPUs erfolgreich trainieren können. Haben sie nicht das gleiche GPU-übergreifende Kommunikationsproblem festgestellt?

Das Training von 4 GPUs mit entweder niedrigsten GPU-IDs (0,1,2,3) oder höchsten GPU-IDs (4,5,6,7) funktioniert hier fehlerfrei (8 gpus funktionieren möglicherweise auch, haben es aber noch nicht ausprobiert. ) Es gibt nur Probleme mit der Mischung bestimmter IDs, z. B. "0,1,2,4" oder "1,3,5,7".

Das vermutete GPU-übergreifende Kommunikationsproblem von caffe2 kann sich bei der einzelnen Hardware-Erstellung unterschiedlich verhalten (der zuvor erwähnte Facebook-M40-Server von rbgirshick funktioniert auch mit einer Mischung von IDs).

Stoßen Sie auf das gleiche Problem. Ist das behoben?

Ich habe das gleiche Problem auf einer Workstation mit 4 GTX 1080TI GPUS festgestellt. Multi-GPU funktioniert gut auf anderen Plattformen wie Kaffee und Tensorflow.
Dies ist mein Arbeitsbereich. GetCudaPeerAccessPattern () Ausgabe:
[[Richtig Richtig Falsch Falsch]
[Richtig Richtig Falsch Falsch]
[Falsch Falsch Richtig Richtig]
[Falsch Falsch Richtig Richtig]]
Die Zwei-GPU-Konfiguration (mit {0,1} oder {2,3}) funktioniert gut. Drei oder vier GPUS werden mit dem oben genannten Problem konfrontiert sein. Mein Fehler liegt jedoch nicht bei der Operation Add . Ich erinnere mich, dass der Typ Copy

Ist das Problem gelöst worden?

@rbgirshick Hallo, ich habe das gleiche Problem wie @lwher getroffen. Das Programm scheint mit einer Wahrscheinlichkeit von fast 50% bei NCCL auf meinem Computer mit Ubuntu 14.04 und 4 GPUs hängen zu bleiben. Gibt es eine Lösung, um solche Verhaltensweisen von NCCL zu vermeiden? Vielen Dank!

@ Yangqing Hallo, ich habe das gleiche Problem im Operator Copy festgestellt .
Wenn ich das Flag USE_NCCL True nicht hinzufüge, lauten die Fehler wie folgt:

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 }

Wenn ich das Flag USE_NCCL True hinzugefügt habe, werden die Fehler zu:

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 }

Mein System ist Ubuntu 14.04 mit Cuda 8.0 und Cudnn 5.1. Mein Computer verfügt über 8 GPUs, aber ich habe den Code nur auf den letzten 4 getestet, sodass die Kommunikation zwischen GPUs kein Problem darstellen sollte. Ich benutze NCCL 2.1.15 für CUDA 8.0.

Hoffe, dieses Problem kann bald behoben werden. Es ist ziemlich nervig.

Dieses Problem besteht immer noch, oder?

Durch Hinzufügen von 'USE_NCLL True' beim Ausführen eines Multi-GPU-Trainings kann ich mein Training erfolgreich starten. Obwohl manchmal ein Deadlock auftreten kann, können Sie versuchen, einige Trainingsparameter wie die Lernrate zu ändern, um ihn zu lösen.

Das Problem besteht weiterhin.

@xieshuqin Ich habe das gleiche Problem getroffen 'status == ncclSuccess. 2 gegen 0. ' mit Ihnen, wenn Sie 'USE_NCCL True' verwenden. Wie lösen Sie dieses Problem? Danke

@pkuxwguan Mein Problem wurde behoben, aber ich habe vergessen, wie ich es behoben habe. Das tut mir leid. Ich erinnere mich jedoch, dass das Problem mit der falschen Installation von NCCL zusammenhängen sollte.

Hallo zusammen, ich habe auch unter diesem Problem gelitten, also habe ich es endlich selbst behoben. https://github.com/pytorch/pytorch/pull/6896 hat dieses Problem behoben :)

sagt mir jemand, ob ich mask r-cnn mit nur einer GPU ausführen kann?

@daquexian Ich habe deine PR ausprobiert, es funktioniert !!! Vielen Dank

@daquexian Diese PR scheint bei mir nicht zu funktionieren. Ich habe Deadlocks bei der Verwendung einer einzelnen GPU ohne NCCL und bei der Verwendung von 2 GPUs mit USE_NCCL True . Nachdem ich muji.py gemäß Ihrer PR geändert und mit 2 GPUs mit USE_NCCL True , tritt immer noch ein Deadlock auf. Das Training wird nur bei zufälligen Iterationszahlen angehalten.

Vielen Dank für Ihren Versuch :) Sie müssen USE_NCCL = True nicht setzen, wenn Sie my verwenden
pr. NCCL und "muji" sind zwei verschiedene GPU-Kommunikationsmethoden. Mein PR ist ein
Patch für Muji, für den zuvor ein GPU-Peer-Zugriff erforderlich war, und nicht für NCCL.
Setzen Sie einfach USE_NCCL = False und mein PR wird funktionieren.

Am Mittwoch, 2. Mai 2018, 02:51 Uhr Thomas Balestri [email protected]
schrieb:

@daquexian https://github.com/daquexian Diese PR scheint nicht zu funktionieren
für mich. Ich habe Deadlocks, wenn ich eine einzelne GPU ohne NCCL verwende
und auch bei Verwendung von 2 GPUs mit USE_NCCL True. Nach dem Ändern von muji.py
Laut Ihrer PR und mit 2 GPUs mit USE_NCCL True, bin ich
immer noch in einer Sackgasse; Das Training wird nur bei zufälliger Iteration unterbrochen
Zahlen.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/facebookresearch/Detectron/issues/32#issuecomment-385755468 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ALEcn2nGO9e-fIF8S3bTDNkK4370hjOVks5tuK7DgaJpZM4Rsc8n
.

Vielleicht fehlt mir etwas, aber wenn ich USE_NCCL = False setze und Ihre geänderten PRs muji.py und muji_test.py verwende, erhalte ich den ursprünglichen Fehler:

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)

Ich benutze Cuda 9.1, Cudnn 7.1 mit 4 V100s.

@ Feynman27 Können Sie mir sagen, welcher Zweig (wie Allreduce4 , Allreduce4Group2 , Allreduce2 oder andere) von Allreduce in der aktualisierten Datei muji.py eingegeben wird? Möglicherweise möchten Sie in diesem Zweig einige Druckfunktionen hinzufügen, um dies zu erfahren. Und was ist, wenn Sie die Implementierung von Allreduce ersetzen, indem Sie einfach AllreduceFallback aufrufen? Es ist großartig, wenn Sie auch Ihr GPU-Zugriffsmuster wie https://github.com/facebookresearch/Detectron/issues/32#issuecomment -361739340 bereitstellen können. Vielen Dank!

Allreduce4 wird aufgerufen. Das GPU-Zugriffsmuster lautet:

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

Ich werde versuchen, AllreduceFallback.

Das Aufrufen von AllreduceFallback führt zu einem ähnlichen Fehler wie oben:

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 Es ist seltsam. Entsprechend Ihrem GPU-Zugriffsmuster wird AllreduceFallback anstelle von Allreduce4 aufgerufen. Und wenn Sie AllreduceFallback manuell angerufen haben, scheint die Fehlermeldung nicht von AllreduceFallback . Haben Sie die muji.py im richtigen Ordner geändert? Wenn sich das Python-Paket von caffe2 beispielsweise in /usr/lib/python/site-packages/caffe2 , funktioniert das Ändern von muji.py im Quellordner von caffe2 (wie ~/caffe2/python ) nicht.

@ Feynman27 hast du das caffe2 wieder aufgebaut?

@daquexian Das caffe2-Paket wird unter pytorch/caffe2 installiert, nicht unter /usr/lib/python/site-packages/caffe2 oder irgendetwas anderem. Ich habe meine $PYTHONPATH , dass sie in diesem Verzeichnis angezeigt werden. Ich habe dies auch bestätigt durch:

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'
>>> 

Ich habe einfach die muji.py -Datei unter pytorch/caffe2/python/muji.py geändert.

@yuzcccc Ich habe

@ Feynman27 Ich denke, Sie sollten muji.py unter /home/markable-ai/pytorch/build/caffe2/python/muji.py ändern

Ja, das war mein Versehen. Guter Fang. Ich habe pytorch/caffe2/python/muji.py geändert und hätte pytorch/build/caffe2/python/muji.py .

@ Feynman27 Es freut mich zu sehen, dass es funktioniert :)
@ Yangqing Könnten Sie bitte meine

@daquexian Leider habe ich immer noch Deadlocks.

@ Feynman27 Hmm .. Was ist der Wert von USE_NCCL ? Es sollte False

Ja, USE_NCCL wurde auf false gesetzt.

@ Feynman27 Entschuldigung, ich habe keine Ahnung, warum dies zu einem Deadlock führen wird. Es ist schwer für mich zu reproduzieren

Meinetwegen. Nach allem, was ich weiß, kann der Deadlock, den ich erlebe, nicht damit zusammenhängen, ob der GPU-Peer-Zugriff aktiviert ist oder nicht. Ihre PR hat mir definitiv erlaubt, mit USE_NCCL=False zu trainieren. Ich werde auf Azure-Computern ausgeführt, daher kann dies mit der Ausführung auf deren VMs zusammenhängen. Ich habe mit 2 TitanXs angefangen, auf lokalen Maschinen zu trainieren, und das Training scheint gut voranzukommen.

@daquexian Danke! Ihre PR hat bei mir funktioniert!

Es sieht so aus, als ob dieses Problem geschlossen werden kann.

@gadcam, danke, dass hast , Probleme zu identifizieren, die geschlossen werden können!

In diesem Fall möchte ich es offen lassen, bis ein Fix in Caffe2 integriert ist.

@rbgirshick Leider meine PR : |

@rbgirshick Danke! Meine PR https://github.com/pytorch/pytorch/pull/6896 wurde zusammengeführt. Es sieht so aus, als ob dieses Problem geschlossen werden kann :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen