Detectron: treinamento multi-GPU lança um acesso ilegal à memória

Criado em 25 jan. 2018  ·  64Comentários  ·  Fonte: facebookresearch/Detectron

Quando eu uso uma GPU para treinar, não há problema. Mas quando eu uso duas ou quatro GPUs, o problema aparece. A saída do log:

terminar chamado após lançar uma instância de 'caffe2 :: EnforceNotMet'
what (): [impor falha em context_gpu.h: 170]. Erro CUDA encontrado: um acesso ilegal à memória foi encontrado Erro do operador:
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" nome: "" type: "cuda_gpeuid_dispositivo} 0}
* Abortado em 1516866180 (horário unix), tente "data -d @ 1516866180" se você estiver usando a data GNU *
terminar chamado recursivamente
terminar chamado recursivamente
terminar chamado recursivamente
PC: @ 0x7ff67559f428 gsignal
terminar chamado recursivamente
terminar chamado recursivamente
E0125 07: 43: 00.745853 55683 pybind_state.h: 422] Exceção encontrada ao executar a função PythonOp: RuntimeError: [forçar falha em context_gpu.h: 307] erro == cudaSuccess. 77 vs 0. Erro em: /mnt/hzhida/project/caffe2/caffe2/core/context_gpu.h:307: foi encontrado um acesso ilegal à memória

No:
/mnt/hzhida/facebook/detectron/lib/ops/generate_proposals.py(101): forward
* SIGABRT (@ 0x3e80000d84f) recebido pelo PID 55375 (TID 0x7ff453fff700) do PID 55375;
terminar chamado recursivamente
@ 0x7ff675945390 (desconhecido)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a abortar
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff66f37c6b6 (desconhecido)
@ 0x7ff66f37c701 std :: terminate ()
@ 0x7ff66f3a7d38 (desconhecido)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141d clone
@ 0x0 (desconhecido)
Abortado (core despejado)

upstream bug

Comentários muito úteis

Obrigado rapazes. Isso confirma minha suposição de que o acesso ilegal à memória vem do op Add que não lida corretamente com as comunicações entre dispositivos quando o acesso de mesmo nível não está habilitado. Irá emitir uma correção.

Todos 64 comentários

Eu tenho o mesmo erro. A diferença é que quando eu uso uma GPU ou duas GPUs, não há problema. Mas usando 4 GPUs para treinar Mask RCNN (mask_rcnn_R-101-FPN) ou RetinaNet (retinanet_R-101-FPN), o mesmo problema ocorre.

Tenho o mesmo problema quando treino a rede tutorial_Res50 com duas ou mais GPUs.

Encontrou o mesmo problema ao especificar IDs de GPU (ou seja, diferentes dos IDs mais baixos, por exemplo, '1,3,5,7' para 4 GPUs). Se os IDs de GPU mais baixos forem especificados, o treinamento continuará bem.

@jwnsu : estamos trabalhando em uma correção para que, quando CUDA_VISIBLE_DEVICES não usar os IDs mais baixos, o treinamento ainda funcione. Obrigado por relatar e diagnosticar.

Olá @jwnsu , @coolbrain , @tshizys , @lwher : não podemos reproduzir este problema do nosso lado.

Cada um de vocês pode fornecer mais algumas informações que possam revelar um padrão comum?

Em particular:

  • Sistema operacional: ?
  • Versão do compilador:?
  • Versão CUDA:?
  • versão cuDNN:?
  • Versão do driver NVIDIA:?
  • Modelos de GPU (para todos os dispositivos, se não forem todos iguais):?
  • Qualquer outra coisa que pareça relevante:?

Aqui está o que vemos durante o treinamento, por exemplo, com IDs 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 operacional: Ubuntu 16.04
Versão do compilador: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Versão CUDA: 8.0
versão cuDNN: v5.1
Versão do driver NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| Versão do driver NVIDIA-SMI 384.111: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Nome da GPU Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Uso / Tampa | Uso de memória | GPU-Util Compute M. |
| =================================== + |
| 0 Tesla M60 desligado | 00001543: 00: 00.0 Desligado | Desligado |
| N / A 42C P0 41W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 desligado | 00003134: 00: 00.0 Desligado | Desligado |
| N / A 42C P0 39W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 desligado | 00004975: 00: 00.0 Desligado | Desligado |
| N / A 38C P0 41W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 desligado | 0000F3E6: 00: 00.0 Desligado | Desligado |
| N / A 38C P0 40W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Sistema operacional: CentOS Linux versão 7.1.1503
Versão do compilador: gcc versão 4.8.2
Versão CUDA: CUDA 8.0
versão cuDNN: cuDNN 6.0.21
Versão do driver NVIDIA: 375.26
Modelos de GPU: 4x GeForce GTX TITAN X (12G)

nvidia-smi:
image

Ao usar 4 GPUs (0,1,2,3) para treinar Mask RCNN (e2e_mask_rcnn_R-101-FPN), RetinaNet (retinanet_R-101-FPN) ou Faster RCNN (e2e_faster_rcnn_R-50-FPN), o erro “context_gpu.h : 307: um acesso ilegal à memória foi encontrado ”ou“ context_gpu.h: 170. Erro CUDA encontrado: foi encontrado um acesso ilegal à memória Erro do operador: input: "gpu_0 / retnet_cls_pred_fpn3_b_grad" input: "gpu_2 / retnet_cls_pred_fpn3_b_grad" output: "gpu_0 / retnet_cls_pred_fpn3_g_gradution" nome do dispositivo: "cpu_2 / retnet_cls_grad:" 1 c_d_dispositivo_gudau "{device_gradution" 1 cpu_0 / retnet_cls_cls_predpn: "add_g_gradution_dispositivo" nome_de_dispositivo_gudau "1" cpu_dispositivo "add_g_gradution" 1 nome do dispositivo: "cpu_dispositivo_guda" : 0} ”ocorre.

Mas usando uma GPU ou duas GPUS (0,1 ou 2,3), ele pode ser treinado normalmente.
Obrigado.

@jwnsu : olhando seu erro mais de perto ("dispositivo ordinal inválido"), parece que você está tentando treinar com uma configuração definida para 8 GPUs, mas restringindo o processo para ter acesso apenas a 4 (via CUDA_VISIBLE_DEVICES ). O erro "ordinal de dispositivo inválido" ocorre porque ele está tentando criar operações em dispositivos aos quais o processo não tem acesso.

@coolbrain , @tshizys : obrigado pelos detalhes. O que acontece se você usar duas GPUs com ids {0,2}, {0,3}, {1,2} ou {1,3}?

@rbgirshick você está certo, escolheu o arquivo de configuração errado (com configuração de 8 GPUs) para tentar ontem. Acabei de tentar novamente com o arquivo de configuração correto (4 GPUs, erro de ids gpu "1,2,4,5", "0,1,2,3" funciona bem), o erro agora é semelhante ao que os outros estão vendo:

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 : um tiro no escuro é mudar a implementação de redução total para nccl passando USE_NCCL True para train_net.py , como em:

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

Isso exigirá que o Caffe2 tenha sido construído com ops nccl - não tenho certeza se isso é feito por padrão ou exigirá algum trabalho para reconstruir o Caffe2 com suporte a nccl.

@rbgirshick , ao usar duas GPUs, ou seja, {0,2}, {0,3}, {1,2}, {1,3}, o erro ainda existe. Aqui estão os detalhes, usando {0,3} e treinando RetinaNet (retinanet_R-101-FPN), por exemplo:

F0128 12: 09: 08.461153 4938 context_gpu.cu:387] Erro em: /home/yszhu/local/caffe2/caffe2/core/context_gpu.cu:387: um acesso ilegal à memória foi encontrado
* Verifique o rastreamento da pilha de falha:
terminar chamado recursivamente
terminar chamado recursivamente
Abortado em 1517112548 (horário unix), tente "data -d @ 1517112548" se você estiver usando a data GNU
terminar chamado após lançar uma instância de 'caffe2 :: EnforceNotMet'
what (): [impor falha em context_gpu.h: 170]. Erro CUDA encontrado: um acesso ilegal à memória foi encontrado Erro do operador:
input: "gpu_0 / fpn_6_relu" input: "gpu_0 / fpn_7_w" input: "gpu_0 / __ m23_shared" output: "gpu_0 / fpn_7_w_grad" output: "gpu_0 / fpn_7_b_grad_shared" output: "gpu_0 / fpn_7_b_grad_shared" tipo: "gpu_22hared22" name / Convrad_22 "tipo convrado_22": "gpu22hared22 name" / "nome convrad_22" "arg {nome:" kernel "i: 3} arg {nome:" exaustive_search "i: 0} arg {nome:" pad "i: 1} arg {nome:" pedido "s:" NCHW "} arg {nome : "stride" i: 2} device_option {device_type: 1 cuda_gpu_id: 0} engine: "CUDNN" is_gradient_op: true
@ 0x7f2bdf712772 google :: LogMessage :: Fail ()
PC: @ 0x0 (desconhecido)
SIGABRT (@ 0x3e8000012b7) recebido pelo PID 4791 (TID 0x7f2a6effd700) do PID 4791;
@ 0x7f2bdf7126ce google :: LogMessage :: SendToLog ()
@ 0x7f2c2670e130 (desconhecido)
@ 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 (desconhecido)
@ 0x7f2be27f42d9 std :: _ Sp_counted_base <> :: _ M_release ()
@ 0x7f2c1b1af973 std :: terminate ()
@ 0x7f2c1b2062c5 (desconhecido)
@ 0x7f2bdfd377d1 caffe2 :: Tensor <> :: ResizeLike <> ()
@ 0x7f2c26706df5 start_thread
@ 0x7f2bdfd6e3e2 _ZN6caffe210CuDNNState7executeIRZNS_19CudnnConvGradientOp13DoRunWithTypeIffffffffEEbvEUlPS0_E1_EEvP11CUstream_stOT_
@ 0x7f2c25d2b1ad __clone
@ 0x7f2bdfd707e1 caffe2 :: CudnnConvGradientOp :: DoRunWithType <> ()
@ 0x0 (desconhecido)

image

As formas de erro não são sempre as mesmas, mas é apenas "Erro CUDA encontrado: um acesso ilegal à memória foi encontrado".

Eu também reconstruo o caffe2 com nccl-1.3.5 (seguindo https://caffe2.ai/docs/getting-started.html?platform=centos&configuration=cloud#null__trou troubleshooting):

image

e mude a implementação all-reduce para nccl passando USE_NCCL True para train_net.py, como em:

ferramentas 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 Verdadeiro

O erro desapareceu ^ - ^ para ambos usando quatro GPUs {0,1,2,3} ou qualquer uma das duas GPUs {0,2}, {0,3}, {1,2}, {1,3}.
@rbgirshick , muito obrigado.

Olá, abro o nccl op para treinar o tutorial_network e o erro acima desapareceu. No entanto, o programa trava após carregar os dados e ocupa 100% da CPU o tempo todo.

.......
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: 2.078 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: 8.694 MB
I0129 03: 25: 13.186017 118079 context_gpu.cu:321] GPU 0: 2.260 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: 2.080 MB
I0129 03: 25: 13.186089 118079 context_gpu.cu:325] Total: 8.835 MB
I0129 03: 25: 13.215306 118076 context_gpu.cu:321] GPU 0: 2.310 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: 2.081 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: 2.310 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: 2.104 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: 2.313 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: 9.250 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: 2.468 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] Criando NCCLContext para a chave: 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: 2.310 MB
I0129 03: 25: 13.613315 118083 context_gpu.cu:325] Total: 9748 MB

o programa trava ......

meu ambiente:
Sistema operacional: Ubuntu 16.04
Versão do compilador: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Versão CUDA: 8.0
versão cuDNN: v5.1
Versão do driver NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| Versão do driver NVIDIA-SMI 384.111: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Nome da GPU Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Uso / Tampa | Uso de memória | GPU-Util Compute M. |
| =================================== + |
| 0 Tesla M60 desligado | 00001543: 00: 00.0 Desligado | Desligado |
| N / A 42C P0 41W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 desligado | 00003134: 00: 00.0 Desligado | Desligado |
| N / A 42C P0 39W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 desligado | 00004975: 00: 00.0 Desligado | Desligado |
| N / A 38C P0 41W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 desligado | 0000F3E6: 00: 00.0 Desligado | Desligado |
| N / A 38C P0 40W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +

@lwher : isso é lamentável. O motivo de não usarmos o NCCL por padrão é que ele pode causar deadlocks, que é o que acho que você está vendo.

Depois de reconstruir o caffe2 com NCCL, executei novamente o programa com este script:
ferramentas 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 Verdadeiro

Ele lança este erro:

Criando NCCLContext para a chave: 0: 0,1,2,3,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
AVISO:

Você deve sempre executar com libnvidia-ml.so que é instalado com o seu
Driver de vídeo NVIDIA. Por padrão, ele é instalado em / usr / lib e / usr / lib64.
libnvidia-ml.so no pacote GDK é uma biblioteca stub anexada apenas para
fins de construção (por exemplo, a máquina que você constrói seu aplicativo não tem
para ter o driver de vídeo instalado).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminar chamado após lançar uma instância de 'caffe2 :: EnforceNotMet'
what (): [impor falha em cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 vs 0. Erro em: /mnt/hzhida/project/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: erro do sistema Erro do operador:
entrada: "gpu_0 / rpn_cls_logits_fpn2_w_grad" entrada: "gpu_1 / rpn_cls_logits_fpn2_w_grad" entrada: "gpu_2 / rpn_cls_logits_fpn2_w_grad" entrada: "gpu_3 / rpn_cls_logits_fpn2_w_grad" saída: "gpu_0 / rpn_cls_logits_fpn2_w_grad" saída: "gpu_1 / rpn_cls_logits_fpn2_w_grad" saída: "gpu_2 / rpn_cls_logits_fpn2_w_grad" saída : "gpu_3 / rpn_cls_logits_fpn2_w_grad" nome: "" tipo: "NCCLAllreduce" device_option {device_type: 1 cuda_gpu_id: 0}
* Abortado em 1517210588 (horário unix), tente "data -d @ 1517210588" se você estiver usando a data GNU
PC: @ 0x7ff1e0383428 gsignal
SIGABRT (@ 0x3e800007a46) recebido pelo PID 31302 (TID 0x7fefb5ffb700) do PID 31302;
I0129 07: 23: 08.187249 31591 cuda_nccl_gpu.cc:110] Criando NCCLContext para a chave: 0: 0,1,2,3,

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
AVISO:

Você deve sempre executar com libnvidia-ml.so que é instalado com o seu
Driver de vídeo NVIDIA. Por padrão, ele é instalado em / usr / lib e / usr / lib64.
libnvidia-ml.so no pacote GDK é uma biblioteca stub anexada apenas para
propósitos de construção (por exemplo, a máquina que você construiu seu aplicativo não tem
para ter o driver de vídeo instalado).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminar chamado recursivamente
@ 0x7ff1e0729390 (desconhecido)
I0129 07: 23: 08.188051 31592 context_gpu.cu:321] GPU 0: 2.466 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 (desconhecido)
@ 0x7ff1da160701 std :: terminate ()
@ 0x7ff1da18bd38 (desconhecido)
@ 0x7ff1e071f6ba start_thread
@ 0x7ff1e045541d clone
@ 0x0 (desconhecido)
Abortado (core despejado)

Ambiente de funcionamento:
Sistema operacional: Ubuntu 16.04
Versão do compilador: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Versão CUDA: 8.0
versão cuDNN: v5.1
Versão do driver NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| Versão do driver NVIDIA-SMI 384.111: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Nome da GPU Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr: Uso / Tampa | Uso de memória | GPU-Util Compute M. |
| =================================== + |
| 0 Tesla M60 desligado | 00001543: 00: 00.0 Desligado | Desligado |
| N / A 42C P0 41W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 desligado | 00003134: 00: 00.0 Desligado | Desligado |
| N / A 42C P0 39W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 desligado | 00004975: 00: 00.0 Desligado | Desligado |
| N / A 38C P0 41W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 desligado | 0000F3E6: 00: 00.0 Desligado | Desligado |
| N / A 38C P0 40W / 150W | 0MiB / 8123MiB | 0% Padrão |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Uma observação adicional sobre NCCL: Caffe2 é compilado com NCCL por padrão, portanto, não há necessidade de reconstruí-lo.

Pisando nisso: uma vez que o acesso ilegal à memória é do operador Add, você pode querer verificar se o acesso peer direto está disponível entre o GPUS que você está usando. A operação de adição atual depende disso e, se não, podemos corrigir o código de fato. Basicamente, para fazer isso, em python, faça:

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

Você poderia colar a saída disso para depuração? (Especialmente, se você estiver usando CUDA_VISIBLE_DEVICES, certifique-se de invocar o python com ele também)

Saída @Yangqing de suas duas linhas de depuração:
[[ True True False False] [ True True False False] [False False True True] [False False True True]]
obrigado por analisar este problema (e ... frameworks caffe / caffe2!)

@jwnsu obrigado! Apenas para confirmar, o operador Add está adicionando tensores em gpu {0,1} e {2,3} certo? (Suponho que ele esteja adicionando coisas dos 4 gpus).

É configuração de 4 gpus, com IDs de GPU especificados como "0,1,2,4" (via CUDA_VISIBLE_DEVICES.) Se os IDs de GPU são configurados como "0,1,2,3" (IDs de GPU mais baixos), funciona bem sem nenhum erro.

@Yangqing
Meu servidor Linux tem 4 GPUs M60,
Esta é a saída do meu espaço de trabalho.GetCudaPeerAccessPattern ():
[[Verdadeiro Falso Falso Falso]
[False True False False]
[False False True False]
[False False False True]]

Eu posso treinar a rede usando 1 gpu bem, mas quando eu treino a rede usando 2 ou 4 GPUS, encontro os mesmos problemas acima, mesmo que eu defina NCCL = True

Obrigado rapazes. Isso confirma minha suposição de que o acesso ilegal à memória vem do op Add que não lida corretamente com as comunicações entre dispositivos quando o acesso de mesmo nível não está habilitado. Irá emitir uma correção.

mesmo problema nas comunicações entre dispositivos ...
esta máquina pode usar 4 GPU [0,1,2,3]:
image
esta máquina pode usar [0,1] e [2,3]:
image

BTW, usei 12 Cpu e 4 titan x para treinar 3D Faster RCNN no framework Pytorch. Por que o Pytorch não tem esse problema ????

@Yangqing Porque não consigo treinar o Detectron em multi-GPU, então quero saber por quanto tempo você consertará o problema de comunicação entre GPU? obrigado.

@Yangqing Eu tive problemas semelhantes aos anteriores. Minha estação de trabalho Linux tem 2 GTX-1080Ti. As informações de erro são as seguintes:
[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 }
e minha saída de workspace.GetCudaPeerAccessPattern () é:
[[Verdadeiro falso]
[Falso verdadeiro]]
Também é um problema de comunicação entre GPU? Se não, alguém pode me ajudar a consertar, obrigado.

Sim, é o mesmo problema. Os gradientes em GPU cruzada não podem ser somados porque as GPUs não podem se comunicar umas com as outras. se você quiser resolver o problema, talvez possa copiar os gradientes da GPU para a CPU e, em seguida, somá-los e calculá-los. E, por fim, copie o gradiente médio da CPU para a GPU. @blateyang

Obrigado pelo teu conselho! @coolbrain Mas não consigo entender por que algumas pessoas conseguem treinar modelos com duas ou mais GPUs com sucesso. Eles não encontraram o mesmo problema de comunicação entre GPU?

O treinamento de 4 GPUs com IDs de GPU mais baixos (0,1,2,3) ou IDs de GPU mais altos (4,5,6,7) funciona aqui sem nenhum erro (8 gpus também podem funcionar, mas ainda não tentei. ) Ele só tem problemas com a mistura de ids específicos, por exemplo, "0,1,2,4" ou "1,3,5,7".

A suspeita de que o problema de comunicação entre GPU cruzado do caffe2 pode se comportar de maneira diferente com a construção de hardware individual (rbgirshick mencionou anteriormente o servidor M40 do Facebook funciona com uma combinação de ids também).

Encontro o mesmo problema. Isso está consertado?

Eu encontrei o mesmo problema em uma estação de trabalho com 4 GPUS GTX 1080TI. Multi-gpu funciona bem em outras plataformas, como caffe e tensorflow.
Esta é a saída do meu espaço de trabalho.GetCudaPeerAccessPattern ():
[[True True False False]
[True True False False]
[Falso Falso Verdadeiro]
[Falso Falso Verdadeiro Verdadeiro]]
A configuração de duas GPU (com {0,1} ou {2,3}) funciona bem. Três ou quatro gpus enfrentarão o problema mencionado. No entanto, meu erro não está na operação Add , lembro que o tipo é Copy

O problema foi corrigido?

@rbgirshick Olá, encontrei o mesmo problema que @lwher. O programa parece travar com quase 50% de chance com NCCL na minha máquina com Ubuntu 14.04 e 4 GPUs. Existe uma solução para evitar tais comportamentos de NCCL? Muito Obrigado!

@Yangqing Olá, encontrei o mesmo problema na operadora Copy .
Quando eu não adiciono a sinalização USE_NCCL True , os erros são os seguintes:

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 }

Se eu adicionar a sinalização USE_NCCL True , os erros se tornam:

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 }

Meu sistema é Ubuntu 14.04, com Cuda 8.0 e Cudnn 5.1. Minha máquina tem 8 GPUs, mas testei o código apenas nas últimas 4, então a comunicação entre as GPUs não deve ser problema. Eu uso NCCL 2.1.15 para CUDA 8.0.

Espero que esse problema seja corrigido em breve. É muito chato.

Esse problema ainda existe, certo?

Ao adicionar 'USE_NCLL True' ao executar o treinamento multi-GPU, eu inicio meu treinamento com sucesso. Embora às vezes possa ocorrer um impasse, você pode tentar modificar alguns parâmetros de treinamento, como a taxa de aprendizado, para resolvê-lo.

O problema ainda existe.

@xieshuqin Eu encontrei o mesmo problema 'status == ncclSuccess. 2 vs 0. ' com você quando usar 'USE_NCCL True'. Como você resolve este problema? Obrigado

@pkuxwguan Meu problema foi corrigido, mas esqueci como o corrigi. Me desculpe por isso. Mas lembro que o problema deve estar relacionado à instalação incorreta do NCCL.

Olá a todos, Eu também sofri com esse problema, então, finalmente, resolvi sozinho. https://github.com/pytorch/pytorch/pull/6896 resolveu esse problema :)

Alguém me diz se posso executar o mask r-cnn com apenas uma GPU?

@daquexian Tentei seu PR, funciona !!! Muito obrigado

@daquexian Este PR não parece funcionar para mim. Estou enfrentando bloqueios ao usar uma única GPU sem NCCL e também ao usar 2 GPUs com USE_NCCL True . Depois de alterar muji.py acordo com seu PR e rodar com 2 GPUs com USE_NCCL True , ainda estou tendo um impasse; o treinamento apenas faz uma pausa em números de iteração aleatória.

Obrigado por tentar :) Você não precisa definir USE_NCCL = True se usar meu
pr. NCCL e "muji" são dois métodos de comunicação gpu diferentes. Meu pr é um
patch para muji, que exigia acesso de peer gpu antes, e não para nccl.
Basta definir USE_NCCL = False e meu pr funcionará.

Na quarta-feira, 2 de maio de 2018, 02:51 Thomas Balestri [email protected]
escrevi:

@daquexian https://github.com/daquexian Este PR parece não funcionar
para mim. Estou enfrentando bloqueios ao usar uma única GPU sem NCCL
e também ao usar 2 GPUs com USE_NCCL True. Depois de mudar muji.py
de acordo com o seu PR e funcionando com 2 GPUs com USE_NCCL Verdadeiro, estou
ainda experimentando um impasse; o treinamento apenas faz uma pausa na iteração aleatória
números.

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/facebookresearch/Detectron/issues/32#issuecomment-385755468 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ALEcn2nGO9e-fIF8S3bTDNkK4370hjOVks5tuK7DgaJpZM4Rsc8n
.

Talvez esteja faltando alguma coisa, mas se eu definir USE_NCCL = False e usar seu muji.py e muji_test.py PR modificado, obtenho o erro 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)

Estou usando o Cuda 9.1, cudnn 7.1 com 4 V100s.

@ Feynman27 Você poderia me dizer qual branch (como Allreduce4 , Allreduce4Group2 , Allreduce2 ou outros) de Allreduce no muji.py atualizado foi inserido? Você pode querer adicionar algumas funções de impressão neste ramo para conhecê-lo. E se você substituir a implementação de Allreduce apenas chamando AllreduceFallback ? Será ótimo se você também puder fornecer seu padrão de acesso GPU como https://github.com/facebookresearch/Detectron/issues/32#issuecomment -361739340. Obrigado!

Allreduce4 está sendo chamado. O padrão de acesso gpu é:

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

Vou tentar ligar para AllreduceFallback.

Chamar AllreduceFallback dá um erro semelhante ao acima:

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 É estranho. De acordo com seu padrão de acesso GPU, AllreduceFallback vez de Allreduce4 será chamado. E quando você chamou AllreduceFallback manualmente, a mensagem de erro não parece vir de AllreduceFallback . Você alterou muji.py na pasta certa? Por exemplo, se o pacote python de caffe2 estiver em /usr/lib/python/site-packages/caffe2 , alterar muji.py na pasta de origem de caffe2 (como ~/caffe2/python ) não funcionará.

@ Feynman27 você reconstruiu o caffe2?

@daquexian O pacote caffe2 é instalado em pytorch/caffe2 , não em /usr/lib/python/site-packages/caffe2 ou qualquer outra coisa. Eu configurei meu $PYTHONPATH para olhar neste diretório. Eu também confirmei isso 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'
>>> 

Simplesmente modifiquei o arquivo muji.py em pytorch/caffe2/python/muji.py .

@yuzcccc Não reconstruí o caffe2, mas por que deveria? Estou apenas modificando um arquivo python.

@ Feynman27 Acho que você deve modificar muji.py em /home/markable-ai/pytorch/build/caffe2/python/muji.py

Sim, esse foi o meu descuido. Boa pegada. Eu estava modificando pytorch/caffe2/python/muji.py e deveria ter modificado pytorch/build/caffe2/python/muji.py .

@ Feynman27 É bom ver que funciona :)
@Yangqing Você poderia revisar meu pr https://github.com/pytorch/pytorch/pull/6896? Pode ajudar muitos usuários do detectron :)

@daquexian Infelizmente, ainda parece que estou enfrentando bloqueios.

@ Feynman27 Hmm .. Qual é o valor de USE_NCCL ? Deve ser False

Sim, USE_NCCL foi definido como falso.

@ Feynman27 Desculpe, não tenho ideia de por que isso causará um impasse. É difícil de reproduzir para mim

Justo. Pelo que eu sei, o impasse que estou enfrentando pode não estar relacionado ao fato de o acesso de mesmo nível da GPU estar habilitado ou não. Seu PR definitivamente me permitiu começar a treinar com USE_NCCL=False . Estou executando em máquinas do Azure, portanto, pode estar relacionado à execução em suas VMs. Comecei a treinar em máquinas locais com 2 TitanXs e o treinamento parece estar progredindo muito bem.

@daquexian Obrigado! Seu PR funcionou para mim!

Parece que este problema pode ser resolvido.

@gadcam obrigado por ajudar a identificar problemas que podem ser resolvidos!

Para este, gostaria de deixá-lo aberto até que haja uma correção incorporada ao Caffe2.

@rbgirshick Infelizmente ninguém revê meu PR : |

@rbgirshick Obrigado! Meu PR https://github.com/pytorch/pytorch/pull/6896 foi mesclado. Parece que este problema pode ser resolvido :)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

kampelmuehler picture kampelmuehler  ·  4Comentários

elfpattern picture elfpattern  ·  3Comentários

pacelu picture pacelu  ·  3Comentários

fangpengcheng95 picture fangpengcheng95  ·  4Comentários

Adhders picture Adhders  ·  3Comentários