Detectron: El entrenamiento de múltiples GPU arroja un acceso ilegal a la memoria

Creado en 25 ene. 2018  ·  64Comentarios  ·  Fuente: facebookresearch/Detectron

Cuando uso una GPU para entrenar, no hay problema. Pero cuando uso dos o cuatro GPU, surge el problema. La salida del registro:

terminar llamado después de lanzar una instancia de 'caffe2 :: EnforceNotMet'
what (): [ejecutar falla en context_gpu.h: 170]. Error de CUDA encontrado: se encontró un acceso ilegal a la memoria Error del operador:
entrada: "gpu_0 / rpn_cls_logits_fpn2_w_grad" entrada: "gpu_1 / rpn_cls_logits_fpn2_w_grad" salida: "gpu_0 / rpn_cls_logits_fpn2_w_grad" nombre: "" tipo: "Agregar" device_gpe_option {device_option {0}
* Abortado en 1516866180 (hora Unix) intente "date -d @ 1516866180" si está usando GNU date *
terminar llamado de forma recursiva
terminar llamado de forma recursiva
terminar llamado de forma recursiva
PC: @ 0x7ff67559f428 gsignal
terminar llamado de forma recursiva
terminar llamado de forma recursiva
E0125 07: 43: 00.745853 55683 pybind_state.h: 422] Se encontró una excepción al ejecutar la función PythonOp: RuntimeError: [error de ejecución en context_gpu.h: 307] error == cudaSuccess. 77 vs 0. Error en: /mnt/hzhida/project/caffe2/caffe2/core/context_gpu.h:307: se encontró un acceso ilegal a la memoria

A:
/mnt/hzhida/facebook/detectron/lib/ops/generate_proposals.py(101): adelante
* SIGABRT (@ 0x3e80000d84f) recibido por PID 55375 (TID 0x7ff453fff700) desde PID 55375;
terminar llamado de forma recursiva
@ 0x7ff675945390 (desconocido)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a abortar
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff66f37c6b6 (desconocido)
@ 0x7ff66f37c701 std :: terminate ()
@ 0x7ff66f3a7d38 (desconocido)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141d clon
@ 0x0 (desconocido)
Abortado (núcleo volcado)

upstream bug

Comentario más útil

Gracias chicos. Esto verifica mi suposición de que el acceso ilegal a la memoria proviene de la operación Agregar que no maneja correctamente las comunicaciones entre dispositivos cuando el acceso entre pares no está habilitado. Emitirá una solución.

Todos 64 comentarios

Tengo el mismo error. La diferencia es que cuando uso una GPU o dos GPU, no hay problema. Pero al usar 4 GPU para entrenar Mask RCNN (mask_rcnn_R-101-FPN) o RetinaNet (retinanet_R-101-FPN), ocurre el mismo problema.

Tengo el mismo problema cuando entreno la red tutorial_Res50 con dos o más GPU.

Se encontró el mismo problema al especificar los ID de GPU (es decir, diferentes de los ID más bajos, por ejemplo, '1,3,5,7' para 4 GPU). Si se especifican los identificadores de GPU más bajos, el entrenamiento continúa bien.

@jwnsu : estamos trabajando en una solución para que cuando CUDA_VISIBLE_DEVICES no use los ID más bajos, el entrenamiento aún funcione. Gracias por informar y diagnosticar.

Hola @jwnsu , @coolbrain , @tshizys , @lwher : no podemos reproducir este problema de nuestro lado.

¿Pueden cada uno proporcionar más información que pueda revelar un patrón común?

En particular:

  • Sistema operativo: ?
  • Versión del compilador:?
  • Versión CUDA:?
  • versión cuDNN:?
  • Versión del controlador NVIDIA:?
  • Modelos de GPU (para todos los dispositivos si no son todos iguales):?
  • ¿Algo más que parezca relevante:?

Esto es lo que vemos al entrenar, por ejemplo, con los ID de 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 |
+-----------------------------------------------------------------------------+

Sistema operativo: Ubuntu 16.04
Versión del compilador: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Versión CUDA: 8.0
Versión cuDNN: v5.1
Versión del controlador NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Versión del controlador: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU Name Persistence-M | Bus-Id Disp.A | Uncorr volátil. ECC |
| Fan Temp Perf Pwr: Uso / Cap | Uso de memoria | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Apagado | 00001543: 00: 00.0 Apagado | Apagado |
| N / D 42C P0 41W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 apagado | 00003134: 00: 00.0 Apagado | Apagado |
| N / D 42C P0 39W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Apagado | 00004975: 00: 00.0 Apagado | Apagado |
| N / D 38C P0 41W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Apagado | 0000F3E6: 00: 00.0 Apagado | Apagado |
| N / D 38C P0 40W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Sistema operativo: CentOS Linux versión 7.1.1503
Versión del compilador: gcc versión 4.8.2
Versión CUDA: CUDA 8.0
Versión cuDNN: cuDNN 6.0.21
Versión del controlador NVIDIA: 375.26
Modelos de GPU: 4x GeForce GTX TITAN X (12G)

nvidia-smi:
image

Cuando se utilizan 4 GPU (0,1,2,3) para entrenar Mask RCNN (e2e_mask_rcnn_R-101-FPN), RetinaNet (retinanet_R-101-FPN) o Faster RCNN (e2e_faster_rcnn_R-50-FPN), el error "context_gpu.h : 307: se encontró un acceso ilegal a la memoria ”o“ context_gpu.h: 170. Se encontró un error de CUDA: se encontró un acceso ilegal a la memoria Error del operador: entrada: "gpu_0 / retnet_cls_pred_fpn3_b_grad" entrada: "gpu_2 / retnet_cls_pred_fpn3_b_grad" salida: "gpu_0 / retnet_cls_pred_fpn3" nombre del dispositivo "Add" : 0} ”.

Pero usando una GPU o dos GPUS (0,1 o 2,3), se puede entrenar normalmente.
Gracias.

@jwnsu : mirando su error más de cerca ("ordinal de dispositivo no válido"), parece que está tratando de entrenar con una configuración configurada para 8 GPU, pero restringiendo el proceso para tener solo acceso a 4 (a través de CUDA_VISIBLE_DEVICES ). El error "ordinal de dispositivo no válido" se debe a que está intentando crear operaciones en dispositivos a los que el proceso no tiene acceso.

@coolbrain , @tshizys : gracias por los detalles. ¿Qué sucede si usa dos GPU con los identificadores {0,2}, {0,3}, {1,2} o {1,3}?

@rbgirshick tiene razón, eligió el archivo de configuración incorrecto (con la configuración de 8 GPU) para probar ayer. Intenté de nuevo con el archivo de configuración correcto (4 GPU, el error de gpu ids "1,2,4,5", "0,1,2,3" funciona bien), el error ahora es similar a lo que otros están viendo:

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 : una oportunidad en la oscuridad es cambiar la implementación de reducción total a nccl pasando USE_NCCL True a train_net.py , como en:

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

Esto requerirá que Caffe2 se haya construido con nccl ops; no estoy seguro de si esto se hace de forma predeterminada o si requerirá algo de trabajo para reconstruir Caffe2 con soporte nccl.

@rbgirshick , cuando se utilizan dos GPU, es decir, {0,2}, {0,3}, {1,2}, {1,3}, el error aún existe. Aquí están los detalles, usando {0,3} y entrenando RetinaNet (retinanet_R-101-FPN) por ejemplo:

F0128 12: 09: 08.461153 4938 context_gpu.cu:387] Error en: /home/yszhu/local/caffe2/caffe2/core/context_gpu.cu:387: se encontró un acceso ilegal a la memoria
* Verifique el seguimiento de la pila de fallas:
terminar llamado de forma recursiva
terminar llamado de forma recursiva
Abortado en 1517112548 (hora Unix) intente "date -d @ 1517112548" si está usando GNU date
terminar llamado después de lanzar una instancia de 'caffe2 :: EnforceNotMet'
what (): [ejecutar falla en context_gpu.h: 170]. Error de CUDA encontrado: se encontró un acceso ilegal a la memoria Error del operador:
entrada: "gpu_0 / fpn_6_relu" entrada: "gpu_0 / fpn_7_w" entrada: "gpu_0 / __ m23_shared" salida: "gpu_0 / fpn_7_w_grad" salida: "gpu_0 / fpn_7_b_grad" salida: "gpu_0" / __ient "nombre" "arg {nombre:" kernel "i: 3} arg {nombre:" exhaustive_search "i: 0} arg {nombre:" pad "i: 1} arg {nombre:" orden "s:" NCHW "} arg {nombre : "stride" i: 2} device_option {device_type: 1 cuda_gpu_id: 0} motor: "CUDNN" is_gradient_op: true
@ 0x7f2bdf712772 google :: LogMessage :: Fail ()
PC: @ 0x0 (desconocido)
SIGABRT (@ 0x3e8000012b7) recibido por PID 4791 (TID 0x7f2a6effd700) desde PID 4791;
@ 0x7f2bdf7126ce google :: LogMessage :: SendToLog ()
@ 0x7f2c2670e130 (desconocido)
@ 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 (desconocido)
@ 0x7f2be27f42d9 std :: _ Sp_counted_base <> :: _ M_release ()
@ 0x7f2c1b1af973 std :: terminate ()
@ 0x7f2c1b2062c5 (desconocido)
@ 0x7f2bdfd377d1 caffe2 :: Tensor <> :: ResizeLike <> ()
@ 0x7f2c26706df5 start_thread
@ 0x7f2bdfd6e3e2 _ZN6caffe210CuDNNState7executeIRZNS_19CudnnConvGradientOp13DoRunWithTypeIffffffffEEbvEUlPS0_E1_EEvP11CUstream_stOT_
@ 0x7f2c25d2b1ad __clone
@ 0x7f2bdfd707e1 caffe2 :: CudnnConvGradientOp :: DoRunWithType <> ()
@ 0x0 (desconocido)

image

Las formas de error no son las mismas cada vez, pero es simplemente "Error CUDA encontrado: se encontró un acceso ilegal a la memoria".

También reconstruyo caffe2 con nccl-1.3.5 (siguiendo https://caffe2.ai/docs/getting-started.html?platform=centos&configuration=cloud#null__troubleshooting):

image

y cambie la implementación de reducción total a nccl pasando USE_NCCL True a train_net.py, como en:

herramientas de 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 Verdadero

El error desapareció ^ - ^ para ambos que usaban cuatro GPU {0,1,2,3} o cualquiera de las dos GPU {0,2}, {0,3}, {1,2}, {1,3}.
@rbgirshick ,

Hola, abro nccl op para entrenar tutorial_network y el error anterior desapareció. Sin embargo, el programa se cuelga después de cargar datos y ocupa el 100% de la CPU todo el tiempo.

.......
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] Total: 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] Total: 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] Total: 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] Total: 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] Total: 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] Total: 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] Total: 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] Total: 9417 MB
I0129 03: 25: 13.369802 118085 cuda_nccl_gpu.cc:110] Creando NCCLContext para la clave: 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] Total: 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] Total: 9748 MB

el programa se cuelga ...

mi entorno:
Sistema operativo: Ubuntu 16.04
Versión del compilador: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Versión CUDA: 8.0
Versión cuDNN: v5.1
Versión del controlador NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Versión del controlador: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU Name Persistence-M | Bus-Id Disp.A | Uncorr volátil. ECC |
| Fan Temp Perf Pwr: Uso / Cap | Uso de memoria | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Apagado | 00001543: 00: 00.0 Apagado | Apagado |
| N / D 42C P0 41W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 apagado | 00003134: 00: 00.0 Apagado | Apagado |
| N / D 42C P0 39W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Apagado | 00004975: 00: 00.0 Apagado | Apagado |
| N / D 38C P0 41W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Apagado | 0000F3E6: 00: 00.0 Apagado | Apagado |
| N / D 38C P0 40W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +

@lwher : eso es lamentable. La razón por la que no usamos NCCL de forma predeterminada es que es propenso a causar interbloqueos, que es lo que creo que está viendo.

Después de reconstruir caffe2 con NCCL, vuelvo a ejecutar el programa con este script:
herramientas de Python / train_net.py \
--multi-gpu-testing \
--cfg configs / Getting_started / tutorial_4gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR ./output USE_NCCL Verdadero

Lanza este error:

Creando NCCLContext para la clave: 0: 0,1,2,3,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ADVERTENCIA:

Siempre debe ejecutar libnvidia-ml.so que se instala con su
Controlador de pantalla NVIDIA. De forma predeterminada, está instalado en / usr / lib y / usr / lib64.
libnvidia-ml.so en el paquete GDK es una biblioteca auxiliar que se adjunta solo para
propósitos de compilación (por ejemplo, la máquina que usted construye, su aplicación no tiene
tener instalado el controlador de pantalla).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminar llamado después de lanzar una instancia de 'caffe2 :: EnforceNotMet'
what (): [enforce fail at cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 vs 0. Error en: /mnt/hzhida/project/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: error del sistema Error del operador:
entrada: salida "gpu_2 / rpn_cls_logits_fpn2_w_grad": "gpu_0 / rpn_cls_logits_fpn2_w_grad" de entrada: "gpu_1 / rpn_cls_logits_fpn2_w_grad" de entrada: "gpu_2 / rpn_cls_logits_fpn2_w_grad" de entrada: "gpu_3 / rpn_cls_logits_fpn2_w_grad" de salida: "gpu_0 / rpn_cls_logits_fpn2_w_grad" de salida: "gpu_1 / rpn_cls_logits_fpn2_w_grad" salida : "gpu_3 / rpn_cls_logits_fpn2_w_grad" nombre: "" tipo: "NCCLAllreduce" opción_dispositivo {tipo_dispositivo: 1 cuda_gpu_id: 0}
* Abortado en 1517210588 (hora Unix) intente "date -d @ 1517210588" si está usando GNU date
PC: @ 0x7ff1e0383428 gsignal
SIGABRT (@ 0x3e800007a46) recibido por PID 31302 (TID 0x7fefb5ffb700) desde PID 31302;
I0129 07: 23: 08.187249 31591 cuda_nccl_gpu.cc:110] Creando NCCLContext para la clave: 0: 0,1,2,3,

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ADVERTENCIA:

Siempre debe ejecutar libnvidia-ml.so que se instala con su
Controlador de pantalla NVIDIA. De forma predeterminada, está instalado en / usr / lib y / usr / lib64.
libnvidia-ml.so en el paquete GDK es una biblioteca auxiliar que se adjunta solo para
propósitos de compilación (por ejemplo, la máquina que usted construye, su aplicación no tiene
tener instalado el controlador de pantalla).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminar llamado de forma recursiva
@ 0x7ff1e0729390 (desconocido)
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] Total: 9548 MB
@ 0x7ff1e0383428 gsignal
@ 0x7ff1e038502a abortar
@ 0x7ff1da16284d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff1da1606b6 (desconocido)
@ 0x7ff1da160701 std :: terminar ()
@ 0x7ff1da18bd38 (desconocido)
@ 0x7ff1e071f6ba start_thread
@ 0x7ff1e045541d clon
@ 0x0 (desconocido)
Abortado (núcleo volcado)

Entorno de ejecución:
Sistema operativo: Ubuntu 16.04
Versión del compilador: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Versión CUDA: 8.0
Versión cuDNN: v5.1
Versión del controlador NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Versión del controlador: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU Name Persistence-M | Bus-Id Disp.A | Uncorr volátil. ECC |
| Fan Temp Perf Pwr: Uso / Cap | Uso de memoria | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 Apagado | 00001543: 00: 00.0 Apagado | Apagado |
| N / D 42C P0 41W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 apagado | 00003134: 00: 00.0 Apagado | Apagado |
| N / D 42C P0 39W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 Apagado | 00004975: 00: 00.0 Apagado | Apagado |
| N / D 38C P0 41W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 Apagado | 0000F3E6: 00: 00.0 Apagado | Apagado |
| N / D 38C P0 40W / 150W | 0MiB / 8123MiB | 0% predeterminado |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Una nota adicional sobre NCCL: Caffe2 se compila con NCCL de forma predeterminada, por lo que no es necesario reconstruirlo.

Saltando a esto: dado que el acceso ilegal a la memoria es del operador Agregar, es posible que desee verificar si el acceso directo de pares está disponible entre las gpus que está utilizando. Current Add op se basa en eso, y si no es así, es posible que queramos arreglar el código. Básicamente, para hacerlo, en Python, haz lo siguiente:

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

¿Podrías pegar el resultado de eso para depurarlo? (Especialmente, si está utilizando CUDA_VISIBLE_DEVICES, asegúrese de invocar Python con eso también)

Salida de @Yangqing de sus dos líneas de depuración:
[[ True True False False] [ True True False False] [False False True True] [False False True True]]
gracias por investigar este problema (y ... marcos caffe / caffe2!)

@jwnsu gracias! Solo para confirmar, el operador Agregar agrega tensores en gpu {0,1} y {2,3}, ¿verdad? (Supongo que está agregando cosas de las 4 gpus).

Es una configuración de 4 gpus, con los ID de GPU especificados como "0,1,2,4" (a través de CUDA_VISIBLE_DEVICES). Si los ID de GPU están configurados como "0,1,2,3" (los ID de GPU más bajos), funciona bien sin error.

@Yangqing
Mi servidor Linux tiene 4 GPU M60,
Este es mi espacio de trabajo. Salida de GetCudaPeerAccessPattern ():
[[Verdadero Falso Falso Falso]
[Falso Verdadero Falso Falso]
[Falso Falso Verdadero Falso]
[Falso Falso Falso Verdadero]]

Puedo entrenar la red usando 1 gpu bien, pero cuando entreno la red usando 2 o 4 GPUS, encuentro los mismos problemas anteriores, incluso configuro NCCL = True

Gracias chicos. Esto verifica mi suposición de que el acceso ilegal a la memoria proviene de la operación Agregar que no maneja correctamente las comunicaciones entre dispositivos cuando el acceso entre pares no está habilitado. Emitirá una solución.

mismo problema en las comunicaciones entre dispositivos ...
esta máquina puede usar 4 GPU [0,1,2,3]:
image
esta máquina puede utilizar [0,1] y [2,3]:
image

Por cierto, he usado 12 Cpu y 4 titan x para entrenar 3D Faster RCNN en el marco de pytorch. ¿Por qué Pytorch no tiene este problema ????

@Yangqing Porque no puedo entrenar Detectron en multi-GPU, así que quiero saber cuánto tiempo solucionará el problema de comunicaciones entre GPU. Gracias.

@Yangqing Me encontré con problemas similares a los anteriores. Mi estación de trabajo Linux tiene 2 GTX-1080Ti. La información de error es la siguiente:
[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 }
y la salida de mi espacio de trabajo.GetCudaPeerAccessPattern () es:
[[Verdadero Falso]
[Falso verdadero]]
¿Se trata también de un problema de comunicaciones entre GPU? Si no es así, cualquiera puede ayudarme a solucionarlo, gracias.

Sí, es el mismo problema. Los gradientes en las GPU cruzadas no se pueden sumar porque las GPU no se pueden comunicar entre sí. Si desea resolver el problema, tal vez pueda copiar los gradientes de la GPU a la CPU, luego resumirlos y promediarlos. Y por último, copie el gradiente promedio de CPU a GPU. @blateyang

¡Gracias por su consejo! @coolbrain Pero no puedo entender por qué algunas personas pueden entrenar con éxito el modelo con dos o más GPU. ¿No se han encontrado con el mismo problema de comunicaciones entre GPU?

El entrenamiento de 4 GPU con los ID de GPU más bajos (0,1,2,3) o los ID de GPU más altos (4,5,6,7) funciona aquí sin ningún error (8 gpus también pueden funcionar, pero aún no lo he probado. ) Solo tiene problemas con la combinación de identificadores particulares, por ejemplo, "0,1,2,4" o "1,3,5,7".

Se sospecha que el problema de comunicación entre GPU de caffe2 puede comportarse de manera diferente con la construcción de hardware individual (rbgirshick mencionó anteriormente que el servidor Facebook M40 también funciona con una combinación de ID).

Encuentra el mismo problema. ¿Está esto arreglado?

Encontré el mismo problema en una estación de trabajo con 4 GTX 1080TI GPUS. Multi-gpu funciona bien en otras plataformas, como caffe y tensorflow.
Este es mi espacio de trabajo. Salida de GetCudaPeerAccessPattern ():
[[Verdadero Verdadero Falso Falso]
[Verdadero Verdadero Falso Falso]
[Falso Falso Verdadero Verdadero]
[Falso Falso Verdadero Verdadero]]
La configuración de dos gpu (con {0,1} o {2,3}) funciona bien. Tres o cuatro gpus se enfrentarán al problema antes mencionado. Sin embargo, mi error no está en la operación Add , recuerdo que el tipo es Copy

¿Se ha solucionado el problema?

@rbgirshick Hola, encontré el mismo problema que @lwher. El programa parece quedarse atascado con casi un 50% de posibilidades con NCCL en mi máquina con Ubuntu 14.04 y 4 GPU. ¿Existe una solución para evitar tales comportamientos de NCCL? ¡Muchas gracias!

@Yangqing Hola, encontré el mismo problema en el operador Copy .
Cuando no agrego la bandera USE_NCCL True , los errores son los siguientes:

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 agregué la bandera USE_NCCL True , los errores se convierten en:

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 }

Mi sistema es Ubuntu 14.04, con Cuda 8.0 y Cudnn 5.1. Mi máquina tiene 8 GPU, pero probé el código solo en las últimas 4, por lo que la comunicación entre las GPU no debería ser un problema. Utilizo NCCL 2.1.15 para CUDA 8.0.

Espero que este problema se pueda solucionar pronto. Es bastante molesto.

Este problema todavía existe, ¿verdad?

Al agregar 'USE_NCLL True' al ejecutar un entrenamiento con múltiples GPU, comienzo con éxito mi entrenamiento. Aunque a veces puede ocurrir un punto muerto, puede intentar modificar algunos parámetros de entrenamiento, como la tasa de aprendizaje, para resolverlo.

El problema sigue existiendo.

@xieshuqin Me encontré con el mismo problema 'status == ncclSuccess. 2 contra 0 '. contigo cuando uses 'USE_NCCL True'. ¿Cómo resuelves este problema? Gracias

@pkuxwguan Mi problema se ha solucionado pero olvidé cómo lo solucioné. Lo siento por eso. Pero recuerdo que el problema debería estar relacionado con la instalación incorrecta de NCCL.

Hola a todos, yo también sufrí este problema, así que finalmente lo solucioné yo mismo. https://github.com/pytorch/pytorch/pull/6896 resolvió este problema :)

¿Alguien me dice si puedo ejecutar mask r-cnn con solo una GPU?

@daquexian Probé tu PR, funciona !!! Muchas gracias

@daquexian Este PR no parece funcionar para mí. Estoy experimentando puntos muertos al usar una sola GPU sin NCCL y también al usar 2 GPU con USE_NCCL True . Después de cambiar muji.py acuerdo con su PR y ejecutar con 2 GPU con USE_NCCL True , todavía estoy experimentando un punto muerto; el entrenamiento simplemente se detiene en números de iteración aleatorios.

Gracias por intentarlo :) No necesita establecer USE_NCCL = True si usa mi
pr. NCCL y "muji" son dos métodos de comunicación de gpu diferentes. Mi pr es un
parche para muji, que antes requería acceso de pares de gpu, y no para nccl.
Simplemente configure USE_NCCL = False y mi pr funcionará.

El miércoles 2 de mayo de 2018 a las 2:51 a.m. Thomas Balestri [email protected]
escribió:

@daquexian https://github.com/daquexian Este PR no parece funcionar
para mi. Estoy experimentando puntos muertos al usar una sola GPU sin NCCL
y también al usar 2 GPU con USE_NCCL True. Después de cambiar muji.py
de acuerdo con su PR y funcionando con 2 GPU con USE_NCCL Verdadero, estoy
todavía experimentando un punto muerto; el entrenamiento solo se detiene en una iteración aleatoria
números.

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/facebookresearch/Detectron/issues/32#issuecomment-385755468 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ALEcn2nGO9e-fIF8S3bTDNkK4370hjOVks5tuK7DgaJpZM4Rsc8n
.

Tal vez me esté perdiendo algo, pero si configuro USE_NCCL = False y uso su muji.py y muji_test.py PR modificado, obtengo el error original:

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)

Estoy usando Cuda 9.1, cudnn 7.1 con 4 V100.

@ Feynman27 ¿Podría decirme qué rama (como Allreduce4 , Allreduce4Group2 , Allreduce2 u otras) de Allreduce en el muji.py actualizado se ingresa? Es posible que desee agregar algunas funciones de impresión en esta rama para saberlo. ¿Y si reemplaza la implementación de Allreduce simplemente llamando a AllreduceFallback ? Será genial si también puede proporcionar su patrón de acceso a la gpu como https://github.com/facebookresearch/Detectron/issues/32#issuecomment -361739340. ¡Gracias!

Se está llamando a Allreduce4 . El patrón de acceso a la gpu es:

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

Intentaré llamar a AllreduceFallback.

Llamar a AllreduceFallback da un error similar al anterior:

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 extraño. De acuerdo con su patrón de acceso a la gpu, se llamará AllreduceFallback lugar de Allreduce4 . Y cuando llamó a AllreduceFallback manualmente, el mensaje de error no parece provenir de AllreduceFallback . ¿Cambió muji.py en la carpeta correcta? Por ejemplo, si el paquete python de caffe2 está en /usr/lib/python/site-packages/caffe2 , cambiar muji.py en la carpeta fuente de caffe2 (como ~/caffe2/python ) no funcionará.

@ Feynman27 ¿reconstruiste el caffe2?

@daquexian El paquete caffe2 se instala bajo pytorch/caffe2 , no /usr/lib/python/site-packages/caffe2 o cualquier otra cosa. He configurado mi $PYTHONPATH para buscar en este directorio. También he confirmado esto por:

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

Simplemente modifiqué el archivo muji.py en pytorch/caffe2/python/muji.py .

@yuzcccc No reconstruí caffe2, pero ¿por qué tendría que hacerlo? Solo estoy modificando un archivo de Python.

@ Feynman27 Creo que deberías modificar muji.py debajo de /home/markable-ai/pytorch/build/caffe2/python/muji.py

Sí, ese fue mi descuido. Buena atrapada. Estaba modificando pytorch/caffe2/python/muji.py y debería haber modificado pytorch/build/caffe2/python/muji.py .

@ Feynman27 Está feliz de verlo funcionando :)
@Yangqing ¿Podría revisar mi pr https://github.com/pytorch/pytorch/pull/6896? Puede ayudar a muchos usuarios de detectron :)

@daquexian Desafortunadamente, parece que sigo experimentando puntos muertos.

@ Feynman27 Hmm .. ¿Cuál es el valor de USE_NCCL ? Debería ser False

Sí, USE_NCCL se estableció en falso.

@ Feynman27 Lo siento, no tengo idea de por qué causará un estancamiento. Es dificil de reproducir para mi

Lo suficientemente justo. Por lo que sé, el punto muerto que estoy experimentando podría no estar relacionado con si el acceso entre pares de GPU está habilitado o no. Tu RP definitivamente me permitió comenzar a entrenar con USE_NCCL=False . Estoy ejecutando en máquinas Azure, por lo que podría estar relacionado con la ejecución en sus máquinas virtuales. Comencé a entrenar en máquinas locales con 2 TitanX y el entrenamiento parece estar progresando bien.

@daquexian ¡Gracias! ¡Tu PR funcionó para mí!

Parece que este problema se puede solucionar.

@gadcam ¡ gracias por ayudarnos a identificar problemas que se pueden solucionar!

Para este, me gustaría dejarlo abierto hasta que haya una solución fusionada en Caffe2.

@rbgirshick Desafortunadamente, nadie revisa mi PR : |

@rbgirshick ¡Gracias! Mi PR https://github.com/pytorch/pytorch/pull/6896 se ha fusionado. Parece que este problema se puede solucionar :)

¿Fue útil esta página
0 / 5 - 0 calificaciones