Detectron: обучение с использованием нескольких GPU приводит к незаконному доступу к памяти

Созданный на 25 янв. 2018  ·  64Комментарии  ·  Источник: facebookresearch/Detectron

Когда я использую один графический процессор для обучения, проблем нет. Но когда я использую два или четыре графических процессора, проблема вылезает. Вывод журнала:

terminate вызывается после создания экземпляра 'caffe2 :: EnforceNotMet'
what (): [принудительно выполнить сбой в context_gpu.h: 170]. Обнаружена ошибка CUDA: обнаружен недопустимый доступ к памяти. Ошибка оператора:
ввод: "gpu_0 / rpn_cls_logits_fpn2_w_grad" ввод: "gpu_1 / rpn_cls_logits_fpn2_w_grad" вывод: "gpu_0 / rpn_cls_logits_fpn2_w_grad" имя: "" тип: "Добавить" идентификатор_устройства_option}: 1 тип_устройства_option}
* Прервано в 1516866180 (время unix), попробуйте "date -d @ 1516866180", если вы используете дату GNU *
terminate вызывается рекурсивно
terminate вызывается рекурсивно
завершить вызов рекурсивно
ПК: @ 0x7ff67559f428 gsignal
terminate вызывается рекурсивно
terminate вызывается рекурсивно
E0125 07: 43: 00.745853 55683 pybind_state.h: 422] Возникла исключительная ситуация при выполнении функции PythonOp: RuntimeError: [принудительно выполнить сбой в context_gpu.h: 307] error == cudaSuccess. 77 против 0. Ошибка: /mnt/hzhida/project/caffe2/caffe2/core/context_gpu.h:307: обнаружен недопустимый доступ к памяти

В:
/mnt/hzhida/facebook/detectron/lib/ops/generate_proposals.py(101): вперед
* SIGABRT (@ 0x3e80000d84f) получен PID 55375 (TID 0x7ff453fff700) от PID 55375;
завершить вызов рекурсивно
@ 0x7ff675945390 (неизвестно)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a прервать
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff66f37c6b6 (неизвестно)
@ 0x7ff66f37c701 std :: terminate ()
@ 0x7ff66f3a7d38 (неизвестно)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141d клон
@ 0x0 (неизвестно)
Прервано (ядро выгружено)

upstream bug

Самый полезный комментарий

Спасибо, парни. Это подтверждает мое предположение о том, что незаконный доступ к памяти происходит из-за того, что операция Add неправильно обрабатывает обмен данными между устройствами, когда одноранговый доступ не разрешен. Выдаст исправление.

Все 64 Комментарий

У меня такая же ошибка. Разница в том, что когда я использую один или два графических процессора, проблем нет. Но при использовании 4 GPU для обучения Mask RCNN (mask_rcnn_R-101-FPN) или RetinaNet (retinanet_R-101-FPN) возникает та же проблема.

У меня такая же проблема, когда я тренирую сеть tutorial_Res50 с двумя или более графическими процессорами.

Возникла та же проблема при указании идентификаторов графических процессоров (т.е. отличных от самых низких идентификаторов, например, «1,3,5,7» для 4 графических процессоров). Если указаны самые низкие идентификаторы GPU, обучение продолжается.

@jwnsu : мы работаем над исправлением, чтобы, когда CUDA_VISIBLE_DEVICES не использует обучение с наименьшими идентификаторами, все равно работает. Спасибо за сообщение и диагностику.

Привет, @jwnsu , @coolbrain , @tshizys , @lwher : мы не можем воспроизвести эту проблему со своей стороны.

Не могли бы вы предоставить дополнительную информацию, которая могла бы выявить общую закономерность?

В частности:

  • Операционная система: ?
  • Версия компилятора:?
  • Версия CUDA:?
  • Версия cuDNN:?
  • Версия драйвера NVIDIA:?
  • Модели GPU (для всех устройств, если они не все одинаковые):?
  • Что-нибудь еще, что кажется актуальным:?

Вот что мы видим при обучении, например, с идентификаторами 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 |
+-----------------------------------------------------------------------------+

Операционная система: Ubuntu 16.04
Версия компилятора: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Версия CUDA: 8.0
Версия cuDNN: v5.1
Версия драйвера NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Версия драйвера: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Имя графического процессора Persistence-M | Bus-Id Disp.A | Неустойчивый Uncorr. ECC |
| Fan Temp Perf Pwr: Использование / Крышка | Использование памяти | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 выключен | 00001543: 00: 00.0 Выкл. | Off |
| НЕТ 42C P0 41W / 150W | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 выключен | 00003134: 00: 00.0 Выкл. | Off |
| НЕТ 42C P0 39 Вт / 150 Вт | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 выключен | 00004975: 00: 00.0 Выкл. | Off |
| НЕТ 38C P0 41W / 150W | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 выключен | 0000F3E6: 00: 00.0 Выкл. | Off |
| НЕТ 38C P0 40 Вт / 150 Вт | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Операционная система: CentOS Linux версии 7.1.1503
Версия компилятора: gcc версии 4.8.2
Версия CUDA: CUDA 8.0
Версия cuDNN: cuDNN 6.0.21
Версия драйвера NVIDIA: 375.26
Модели графических процессоров: 4x GeForce GTX TITAN X (12G)

nvidia-smi:
image

При использовании 4 GPU (0,1,2,3) для обучения Mask RCNN (e2e_mask_rcnn_R-101-FPN), RetinaNet (retinanet_R-101-FPN) или Faster RCNN (e2e_faster_rcnn_R-50-FPN) возникает ошибка context_gpu.h : 307: обнаружен недопустимый доступ к памяти »или« context_gpu.h: 170. Обнаружена ошибка CUDA: обнаружен недопустимый доступ к памяти. Ошибка оператора: ввод: "gpu_0 / retnet_cls_pred_fpn3_b_grad" ввод: "gpu_2 / retnet_cls_pred_fpn3_b_grad" вывод: "gpu_0 / retnet_cls_pred_fpn_grad" тип_устройства: "тип_устройства:" тип_устройства: "тип_устройства3_b : 0} ».

Но используя один GPU или два GPUS (0,1 или 2,3), его можно обучить нормально.
Спасибо.

@jwnsu : при более внимательном рассмотрении вашей ошибки («недействительный порядковый номер устройства»), похоже, вы пытаетесь тренироваться с конфигурацией, настроенной для 8 графических процессоров, но ограничивая процесс, чтобы иметь доступ только к 4 (через CUDA_VISIBLE_DEVICES ). Ошибка «Недопустимый порядковый номер устройства» возникает из-за того, что он пытается создать операции на устройствах, к которым процесс не имеет доступа.

@coolbrain , @tshizys : спасибо за подробности. Что произойдет, если вы используете два графических процессора с идентификаторами {0,2}, {0,3}, {1,2} или {1,3}?

@rbgirshick, вы правы, вчера выбрали неправильный файл конфигурации (с настройкой 8 GPU). Просто попробовал еще раз с правильным файлом конфигурации (4 графических процессора, ошибка от идентификаторов gpu «1,2,4,5», «0,1,2,3» работает нормально), ошибка теперь похожа на то, что видят другие:

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 : один шанс в темноте - переключить реализацию all-reduce на nccl, передав USE_NCCL True в train_net.py , как в:

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

Для этого потребуется, чтобы Caffe2 был собран с помощью nccl ops - я не уверен, будет ли это сделано по умолчанию или потребуется некоторая работа для восстановления Caffe2 с поддержкой nccl.

@rbgirshick , при использовании двух графических процессоров, то есть {0,2}, {0,3}, {1,2}, {1,3}, ошибка все еще существует. Вот подробности с использованием {0,3} и обучения RetinaNet (retinanet_R-101-FPN), например:

F0128 12: 09: 08.461153 4938 context_gpu.cu:387] Ошибка: /home/yszhu/local/caffe2/caffe2/core/context_gpu.cu:387: обнаружен недопустимый доступ к памяти
* Проверить трассировку стека сбоев:
завершить вызов рекурсивно
завершить вызов рекурсивно
Прервано в 1517112548 (время unix), попробуйте "date -d @ 1517112548", если вы используете дату GNU
terminate вызывается после создания экземпляра 'caffe2 :: EnforceNotMet'
what (): [принудительно выполнить сбой в context_gpu.h: 170]. Обнаружена ошибка CUDA: обнаружен недопустимый доступ к памяти. Ошибка оператора:
ввод: «gpu_0 / fpn_6_relu» ввод: «gpu_0 / fpn_7_w» ввод: «gpu_0 / __ m23_shared» вывод: «gpu_0 / fpn_7_w_grad» вывод: «gpu_0 / fpn_7_b_grad_grad» тип вывода: «gpu_0 / fpn_7_b_grad_vradient» тип вывода: «gpu_7_b_grad_vradient» вывод: "arg {name:" kernel "i: 3} arg {name:" excustive_search "i: 0} arg {name:" pad "i: 1} arg {name:" order "s:" NCHW "} arg {name : "stride" i: 2} device_option {device_type: 1 cuda_gpu_id: 0} engine: "CUDNN" is_gradient_op: true
@ 0x7f2bdf712772 google :: LogMessage :: Fail ()
ПК: @ 0x0 (неизвестно)
SIGABRT (@ 0x3e8000012b7), полученный PID 4791 (TID 0x7f2a6effd700) от PID 4791;
@ 0x7f2bdf7126ce google :: LogMessage :: SendToLog ()
@ 0x7f2c2670e130 (неизвестно)
@ 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 (неизвестно)
@ 0x7f2be27f42d9 std :: _ Sp_counted_base <> :: _ M_release ()
@ 0x7f2c1b1af973 std :: terminate ()
@ 0x7f2c1b2062c5 (неизвестно)
@ 0x7f2bdfd377d1 caffe2 :: Tensor <> :: ResizeLike <> ()
@ 0x7f2c26706df5 start_thread
@ 0x7f2bdfd6e3e2 _ZN6caffe210CuDNNState7executeIRZNS_19CudnnConvGradientOp13DoRunWithTypeIffffffffEEbvEUlPS0_E1_EEvP11CUstream_stOT_
@ 0x7f2c25d2b1ad __clone
@ 0x7f2bdfd707e1 caffe2 :: CudnnConvGradientOp :: DoRunWithType <> ()
@ 0x0 (неизвестно)

image

Формы ошибки не всегда одинаковы, это просто «Обнаружена ошибка CUDA: обнаружен недопустимый доступ к памяти».

Я также перестраиваю caffe2 с помощью nccl-1.3.5 (следуя https://caffe2.ai/docs/getting-started.html?platform=centos&configuration=cloud#null__troubleshooting):

image

и переключите реализацию all-reduce на nccl, передав USE_NCCL True в train_net.py, как в:

Инструменты python2 / train_net.py --multi-gpu-testing \
--cfg configs / 12_2017_baselines / retinanet_R-101-FPN_1x_4gpus.yaml \
OUTPUT_DIR results_retinanet_R-101-FPN_1x_4gpus_model USE_NCCL True

Ошибка исчезла ^ - ^ при использовании четырех графических процессоров {0,1,2,3} или любого из двух графических процессоров {0,2}, {0,3}, {1,2}, {1,3}.
@rbgirshick , большое спасибо.

Привет, я открываю команду nccl для обучения tutorial_network, и указанная выше ошибка исчезла. Однако программа зависает после загрузки данных и все время занимает 100% ЦП.

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

программа зависает ......

моя среда:
Операционная система: Ubuntu 16.04
Версия компилятора: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Версия CUDA: 8.0
Версия cuDNN: v5.1
Версия драйвера NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Версия драйвера: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Имя графического процессора Persistence-M | Bus-Id Disp.A | Неустойчивый Uncorr. ECC |
| Fan Temp Perf Pwr: Использование / Крышка | Использование памяти | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 выключен | 00001543: 00: 00.0 Выкл. | Off |
| НЕТ 42C P0 41W / 150W | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 выключен | 00003134: 00: 00.0 Выкл. | Off |
| НЕТ 42C P0 39 Вт / 150 Вт | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 выключен | 00004975: 00: 00.0 Выкл. | Off |
| НЕТ 38C P0 41W / 150W | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 выключен | 0000F3E6: 00: 00.0 Выкл. | Off |
| НЕТ 38C P0 40 Вт / 150 Вт | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +

@lwher : это прискорбно. Причина, по которой мы не используем NCCL по умолчанию, заключается в том, что он склонен вызывать взаимоблокировки, что, я думаю, вы наблюдаете.

После восстановления caffe2 с помощью NCCL , я перезапускаю программу с этим скриптом :
инструменты 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 Истина

Выдает эту ошибку :

Создание NCCLContext для ключа: 0: 0,1,2,3,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ПРЕДУПРЕЖДЕНИЕ:

Вы всегда должны работать с libnvidia-ml.so, установленным с вашим
Драйвер дисплея NVIDIA. По умолчанию он установлен в / usr / lib и / usr / lib64.
libnvidia-ml.so в пакете GDK - это библиотека-заглушка, которая прилагается только для
цели сборки (например, машина, на которой вы создаете свое приложение, не имеет
для установки драйвера дисплея).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
terminate вызывается после создания экземпляра 'caffe2 :: EnforceNotMet'
what (): [принудительно выполнить сбой в cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 против 0. Ошибка в: /mnt/hzhida/project/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: системная ошибка Ошибка от оператора:
входной сигнал: выход "gpu_2 / rpn_cls_logits_fpn2_w_grad": "gpu_0 / rpn_cls_logits_fpn2_w_grad" вход: "gpu_1 / rpn_cls_logits_fpn2_w_grad" вход: "gpu_2 / rpn_cls_logits_fpn2_w_grad" вход: "gpu_3 / rpn_cls_logits_fpn2_w_grad" выход: "gpu_0 / rpn_cls_logits_fpn2_w_grad" выход: "gpu_1 / rpn_cls_logits_fpn2_w_grad" Выход : "gpu_3 / rpn_cls_logits_fpn2_w_grad" имя: "" тип: "NCCLAllreduce" параметр_устройства {device_type: 1 cuda_gpu_id: 0}
* Прервано в 1517210588 (время unix), попробуйте "date -d @ 1517210588", если вы используете дату GNU
ПК: @ 0x7ff1e0383428 gsignal
SIGABRT (@ 0x3e800007a46), полученный PID 31302 (TID 0x7fefb5ffb700) от PID 31302;
I0129 07: 23: 08.187249 31591 cuda_nccl_gpu.cc:110] Создание NCCLContext для ключа: 0: 0,1,2,3,

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ПРЕДУПРЕЖДЕНИЕ:

Вы всегда должны работать с libnvidia-ml.so, установленным с вашим
Драйвер дисплея NVIDIA. По умолчанию он установлен в / usr / lib и / usr / lib64.
libnvidia-ml.so в пакете GDK - это библиотека-заглушка, которая прикрепляется только для
цели сборки (например, машина, на которой вы создаете свое приложение, не имеет
для установки драйвера дисплея).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
завершить вызов рекурсивно
@ 0x7ff1e0729390 (неизвестно)
I0129 07: 23: 08.188051 31592 context_gpu.cu:321] GPU 0: 2466 МБ
I0129 07: 23: 08.188074 31592 context_gpu.cu:321] GPU 1: 2387 МБ
I0129 07: 23: 08.188091 31592 context_gpu.cu:321] GPU 2: 2311 МБ
I0129 07: 23: 08.188099 31592 context_gpu.cu:321] GPU 3: 2382 МБ
I0129 07: 23: 08.188107 31592 context_gpu.cu:325] Всего: 9548 МБ
@ 0x7ff1e0383428 gsignal
@ 0x7ff1e038502a прервать
@ 0x7ff1da16284d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff1da1606b6 (неизвестно)
@ 0x7ff1da160701 std :: terminate ()
@ 0x7ff1da18bd38 (неизвестно)
@ 0x7ff1e071f6ba start_thread
@ 0x7ff1e045541d клон
@ 0x0 (неизвестно)
Прервано (ядро выгружено)

Среда бега :
Операционная система: Ubuntu 16.04
Версия компилятора: gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
Версия CUDA: 8.0
Версия cuDNN: v5.1
Версия драйвера NVIDIA: 384.111

nvidia-smi:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 Версия драйвера: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| Имя графического процессора Persistence-M | Bus-Id Disp.A | Неустойчивый Uncorr. ECC |
| Fan Temp Perf Pwr: Использование / Крышка | Использование памяти | GPU-Util Compute M. |
| =============================== + |
| 0 Tesla M60 выключен | 00001543: 00: 00.0 Выкл. | Off |
| НЕТ 42C P0 41W / 150W | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 Tesla M60 выключен | 00003134: 00: 00.0 Выкл. | Off |
| НЕТ 42C P0 39 Вт / 150 Вт | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 Tesla M60 выключен | 00004975: 00: 00.0 Выкл. | Off |
| НЕТ 38C P0 41W / 150W | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 Tesla M60 выключен | 0000F3E6: 00: 00.0 Выкл. | Off |
| НЕТ 38C P0 40 Вт / 150 Вт | 0MiB / 8123MiB | 0% По умолчанию |
+ ------------------------------- + ----------------- ----- + ---------------------- +

Еще одно замечание о NCCL: Caffe2 по умолчанию строится с NCCL

Прыгая на это: поскольку незаконный доступ к памяти осуществляется оператором Add, вы можете проверить, доступен ли прямой одноранговый доступ между используемыми вами графическими процессорами. Current Add op полагается на это, и если нет, мы действительно можем захотеть исправить код. В принципе, для этого в python выполните:

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

Не могли бы вы вставить вывод для отладки? (Особенно, если вы используете CUDA_VISIBLE_DEVICES, убедитесь, что вы также вызываете python с этим)

@Yangqing вывод из ваших двух строк отладки:
[[ True True False False] [ True True False False] [False False True True] [False False True True]]
спасибо за изучение этой проблемы (и ... фреймворков caffe / caffe2!)

@jwnsu спасибо! Просто для подтверждения, значит, оператор Add добавляет тензоры между графическими процессорами {0,1} и {2,3}, верно? (Я предполагаю, что это добавление вещей из 4 gpus).

Это конфигурация 4 gpus с идентификаторами графического процессора, указанными как «0,1,2,4» (через CUDA_VISIBLE_DEVICES). Если идентификаторы графического процессора настроены как «0,1,2,3» (самые низкие идентификаторы графического процессора), он отлично работает без каких-либо ошибка.

@Yangqing
Мой Linux-сервер имеет 4 графических процессора M60,
Это моя рабочая область. Вывод GetCudaPeerAccessPattern ():
[[Верно Неверно Неверно]
[Неверно Верно Неверно]
[Ложь Ложь Истина Ложь]
[Ложь Ложь Ложь]]

Я могу обучать сеть с использованием 1 ГПУ, но когда я тренирую сеть с использованием 2 или 4 GPUS, я сталкиваюсь с теми же проблемами, что и выше, даже если я установил NCCL = True

Спасибо, парни. Это подтверждает мое предположение о том, что незаконный доступ к памяти происходит из-за того, что операция Add неправильно обрабатывает обмен данными между устройствами, когда одноранговый доступ не разрешен. Выдаст исправление.

та же проблема при обмене данными между устройствами ...
эта машина может использовать 4 GPU [0,1,2,3]:
image
эта машина может использовать [0,1] и [2,3]:
image

Кстати, я использовал 12 Cpu и 4 titan x для обучения 3D Faster RCNN в среде pytorch. Почему у Pytorch нет этой проблемы ????

@Yangqing Поскольку я не могу обучить Detectron работе с несколькими графическими процессорами, поэтому я хочу знать, как долго вы будете устранять проблему связи между графическими процессорами? Благодарю.

@Yangqing Я столкнулся с аналогичными проблемами, как указано выше. Моя рабочая станция Linux имеет 2 GTX-1080Ti. Информация об ошибках следующая:
[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 }
и мой вывод workspace.GetCudaPeerAccessPattern ():
[[Верно Неверно]
[False true]]
Является ли это проблемой связи между GPU? Если нет, то кто-нибудь может помочь мне это исправить, спасибо.

Да это та же проблема. Градиенты в кросс-графическом процессоре не могут складываться вместе, потому что графические процессоры не могут взаимодействовать друг с другом. если вы хотите решить проблему, возможно, вы могли бы скопировать градиенты с графического процессора на процессор, а затем суммировать их вместе и усреднить их. И, наконец, скопируйте средний градиент от CPU к GPU. @blateyang

Спасибо за ваш совет! @coolbrain Но я не могу понять, почему некоторые люди могут успешно обучать модели с двумя или более графическими процессорами. Разве они не встречались с той же проблемой связи между GPU?

Обучение 4 графических процессоров с минимальными идентификаторами графических процессоров (0,1,2,3) или самыми высокими идентификаторами графических процессоров (4,5,6,7) здесь работает без каких-либо ошибок (8 графических процессоров тоже могут работать, но еще не пробовали. ) Проблема возникает только при сочетании определенных идентификаторов, например «0,1,2,4» или «1,3,5,7».

Подозреваемая проблема связи caffe2 между графическими процессорами может по-разному вести себя в зависимости от сборки оборудования (rbgirshick, упомянутый ранее, сервер Facebook M40 также работает с разными идентификаторами).

Столкнулся с той же проблемой. Это исправлено?

Я встретил ту же проблему на рабочей станции с 4 GTX 1080TI GPUS. Multi-gpu хорошо работает на других платформах, таких как caffe и tensorflow.
Это моя рабочая область. Вывод GetCudaPeerAccessPattern ():
[[Верно Верно Неверно]
[Верно Верно Неверно]
[Ложь Ложь Верно]
[Ложь Ложь Верно]]
Конфигурация с двумя графическими процессорами (с {0,1} или {2,3}) работает хорошо. Три или четыре графических процессора столкнутся с вышеупомянутой проблемой. Однако моя ошибка не Add операцией Copy

Проблема решена?

@rbgirshick Привет, я столкнулся с той же проблемой, что и @lwher. Кажется, что программа застревает с вероятностью почти 50% с NCCL на моей машине с Ubuntu 14.04 и 4 графическими процессорами. Есть ли способ избежать такого поведения NCCL? Большое спасибо!

@Yangqing Привет, я встретил ту же проблему в операторе Copy .
Когда я не добавляю флаг USE_NCCL True , возникают следующие ошибки:

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 }

Если я добавлю флаг USE_NCCL True , тогда ошибки станут:

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 }

Моя система - Ubuntu 14.04 с Cuda 8.0 и Cudnn 5.1. Моя машина имеет 8 графических процессоров, но я тестировал код только на последних 4, поэтому связь между графическими процессорами не должна быть проблемой. Я использую NCCL 2.1.15 для CUDA 8.0.

Надеюсь, эта проблема скоро будет исправлена. Это очень раздражает.

Эта проблема все еще существует, правда?

Добавив «USE_NCLL True» при запуске обучения с несколькими GPU, я успешно приступил к обучению. Хотя иногда может произойти тупик, вы можете попробовать изменить некоторые параметры обучения, такие как скорость обучения, чтобы решить эту проблему.

Проблема все еще существует.

@xieshuqin Я встретил ту же проблему 'status == ncclSuccess. 2 против 0. ' с вами при использовании USE_NCCL True. Как вы решаете эту проблему? Спасибо

@pkuxwguan Моя проблема была исправлена, но я забыл, как ее исправить. Извини за это. Но я помню, что проблема должна быть связана с неправильной установкой NCCL.

Привет всем, у меня тоже была эта проблема, поэтому я наконец исправил ее сам. https://github.com/pytorch/pytorch/pull/6896 решил эту проблему :)

кто-нибудь говорит мне, могу ли я запустить маску r-cnn только с одним графическим процессором?

@daquexian Попробовал твой пиар, работает !!! Огромное спасибо

@daquexian Этот пиар, похоже, не работает для меня. Я испытываю взаимоблокировки при использовании одного графического процессора без NCCL, а также при использовании двух графических процессоров с USE_NCCL True . После изменения muji.py соответствии с вашим PR и работы с двумя графическими процессорами с USE_NCCL True я все еще захожу в тупик; обучение просто приостанавливается на случайных числах итераций.

Спасибо за попытку :) Вам не нужно устанавливать USE_NCCL = True, если вы используете мой
пр. NCCL и muji - это два разных метода связи с GPU. Мой пиар
патч для muji, который раньше требовал однорангового доступа gpu, а не для nccl.
Просто установите USE_NCCL = False, и мой пр будет работать.

2 мая 2018 г., среда, 2:51 Thomas Balestri [email protected]
написал:

@daquexian https://github.com/daquexian Этот PR не работает
для меня. У меня возникают тупиковые ситуации при использовании одного графического процессора без NCCL
а также при использовании двух графических процессоров с USE_NCCL True. После изменения muji.py
согласно вашему PR и работаю с 2 GPU с USE_NCCL True, я
все еще в тупике; обучение просто приостанавливается на случайной итерации
числа.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/facebookresearch/Detectron/issues/32#issuecomment-385755468 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ALEcn2nGO9e-fIF8S3bTDNkK4370hjOVks5tuK7DgaJpZM4Rsc8n
.

Возможно, мне чего-то не хватает, но если я установлю USE_NCCL = False и использую ваши модифицированные PR muji.py и muji_test.py, я получу исходную ошибку:

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)

Я использую Cuda 9.1, cudnn 7.1 с 4 V100.

@ Feynman27 Не могли бы вы сказать мне, какая ветвь (например, Allreduce4 , Allreduce4Group2 , Allreduce2 или другие) из Allreduce в обновленном muji.py введена? Вы можете добавить в эту ветку некоторые функции печати, чтобы знать об этом. А что, если вы замените реализацию Allreduce простым вызовом AllreduceFallback ? Было бы здорово, если бы вы также могли предоставить свой шаблон доступа к графическому процессору, например https://github.com/facebookresearch/Detectron/issues/32#issuecomment -361739340. Спасибо!

Allreduce4 . Шаблон доступа к графическому процессору:

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

Попробую позвонить AllreduceFallback.

Вызов AllreduceFallback дает ошибку, аналогичную описанной выше:

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 Странно. В соответствии с вашим шаблоном доступа к графическому процессору будет вызываться AllreduceFallback вместо Allreduce4 . И когда вы вызываете AllreduceFallback вручную, сообщение об ошибке не приходит от AllreduceFallback . Вы изменили muji.py в правой папке? Например, если пакет python caffe2 находится в /usr/lib/python/site-packages/caffe2 , то изменение muji.py в исходной папке caffe2 (например, ~/caffe2/python ) не сработает.

@ Feynman27 ты восстановил кафе2?

@daquexian Пакет caffe2 устанавливается в pytorch/caffe2 , а не в /usr/lib/python/site-packages/caffe2 или что-то еще. Я установил $PYTHONPATH для просмотра в этом каталоге. Я также подтвердил это:

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

Я просто изменил файл muji.py под pytorch/caffe2/python/muji.py .

@yuzcccc Я не перестраивал caffe2, но зачем мне это нужно? Я изменяю только файл python.

@ Feynman27 Я думаю, вам следует изменить muji.py под /home/markable-ai/pytorch/build/caffe2/python/muji.py

Ага, это была моя оплошность. Хороший улов. Я изменял pytorch/caffe2/python/muji.py и должен был изменить pytorch/build/caffe2/python/muji.py .

@ Feynman27 Рад видеть, что это работает :)
@Yangqing Не могли бы вы просмотреть мою PR https://github.com/pytorch/pytorch/pull/6896? Это может помочь многим пользователям детектора :)

@daquexian К сожалению, у меня все еще возникают тупиковые ситуации.

@ Feynman27 Хм .. Какое значение имеет USE_NCCL ? Это должно быть False

Да, для USE_NCCL было установлено значение false.

@ Feynman27 Извините, я понятия не имею, почему это приведет к тупику. Мне сложно воспроизвести

Справедливо. Насколько мне известно, тупиковая ситуация, с которой я столкнулся, может не иметь отношения к тому, включен ли одноранговый доступ к GPU. Ваш пиар определенно позволил мне начать тренировку с USE_NCCL=False . Я работаю на машинах Azure, поэтому это может быть связано с работой на их виртуальных машинах. Я начал тренироваться на локальных машинах с двумя TitanX, и тренировка, кажется, идет хорошо.

@daquexian Спасибо! Ваш пиар на меня сработал!

Похоже, этот вопрос можно закрыть.

@gadcam благодарит за помощь в выявлении проблем, которые можно закрыть!

Для этого я бы хотел оставить его открытым до тех пор, пока исправление не будет добавлено в Caffe2.

@rbgirshick К сожалению, никто не проверяет мой PR : |

@rbgirshick Спасибо! Мой PR https://github.com/pytorch/pytorch/pull/6896 был объединен. Похоже, этот вопрос можно закрыть :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

olgaliak picture olgaliak  ·  4Комментарии

gaopeng-eugene picture gaopeng-eugene  ·  4Комментарии

kampelmuehler picture kampelmuehler  ·  4Комментарии

elfpattern picture elfpattern  ·  3Комментарии

Hwang-dae-won picture Hwang-dae-won  ·  3Комментарии