Detectron: يؤدي التدريب على وحدات معالجة الرسومات المتعددة إلى وصول غير قانوني إلى الذاكرة

تم إنشاؤها على ٢٥ يناير ٢٠١٨  ·  64تعليقات  ·  مصدر: facebookresearch/Detectron

عندما أستخدم وحدة معالجة رسومات واحدة للتدريب ، لا توجد مشكلة. ولكن عندما أستخدم وحدتي معالجة رسوماتيتين أو أربع وحدات معالجة رسومات ، تظهر المشكلة. إخراج السجل:

تم استدعاء الإنهاء بعد طرح مثيل من "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" الاسم: "" النوع: "إضافة" device_grad ":
* تم الإلغاء عند 1516866180 (وقت unix) جرب "date -d @ 1516866180" إذا كنت تستخدم تاريخ GNU *
إنهاء يسمى بشكل متكرر
إنهاء يسمى بشكل متكرر
إنهاء يسمى بشكل متكرر
الكمبيوتر الشخصي: @ 0x7ff67559f428 gsignal
إنهاء يسمى بشكل متكرر
إنهاء يسمى بشكل متكرر
E0125 07: 43: 00.745853 55683 pybind_state.h: 422] تمت مواجهة استثناء أثناء تشغيل دالة PythonOp: RuntimeError: [فرض فشل في Context_gpu.h: 307] خطأ == cudaSuccess. 77 مقابل 0. خطأ في: /mnt/hzhida/project/caffe2/caffe2/core/context_gpu.h:307: تمت مصادفة وصول غير قانوني إلى الذاكرة

في:
/mnt/hzhida/facebook/detectron/lib/ops/generate_proposals.py(101): forward
* SIGABRT (@ 0x3e80000d84f) تم استلامه بواسطة PID 55375 (TID 0x7ff453fff700) من PID 55375 ؛
إنهاء يسمى بشكل متكرر
@ 0x7ff675945390 (غير معروف)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a إحباط
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler ()
@ 0x7ff66f37c6b6 (غير معروف)
@ 0x7ff66f37c701 الأمراض المنقولة جنسياً :: إنهاء ()
@ 0x7ff66f3a7d38 (غير معروف)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141d استنساخ
@ 0x0 (غير معروف)
تم إحباط (تم تفريغ النواة)

upstream bug

التعليق الأكثر فائدة

شكرا يا شباب. هذا يتحقق من افتراضاتي أن الوصول غير القانوني للذاكرة يأتي من Add op لا يعالج الاتصالات عبر الأجهزة بشكل صحيح عندما لا يتم تمكين وصول النظير. سيصدر إصلاحًا.

ال 64 كومينتر

حصلت على نفس الخطأ. الفرق هو عندما أستخدم GPU واحدًا أو وحدتي GPU ، فلا توجد مشكلة. ولكن باستخدام 4 وحدات معالجة رسومات لتدريب Mask RCNN (mask_rcnn_R-101-FPN) أو RetinaNet (retinanet_R-101-FPN) ، تحدث نفس المشكلة.

لدي نفس المشكلة عندما أقوم بتدريب شبكة tutorial_Res50 باستخدام وحدتي معالجة رسومات أو أكثر.

تمت مواجهة نفس المشكلة عند تحديد معرّفات GPU (أي تختلف عن المعرّفات الأدنى ، مثل "1،3،5،7" لـ 4 وحدات معالجة رسومات). إذا تم تحديد أدنى معرّفات GPU ، فسيتم التدريب بشكل جيد.

jwnsu : نحن نعمل على إصلاح بحيث أنه عندما لا يستخدم CUDA_VISIBLE_DEVICES أقل المعرفات فإن التدريب يعمل. شكرا على الإبلاغ والتشخيص.

مرحبًا jwnsu ، coolbrain ، tshizys ، lwher : لا يمكننا إعادة

هل يمكنك تقديم بعض المعلومات الإضافية التي قد تكشف عن نمط شائع؟

خاصه:

  • نظام التشغيل: ؟
  • إصدار المترجم:؟
  • إصدار كودا:؟
  • إصدار 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 |
+-----------------------------------------------------------------------------+

نظام التشغيل: أوبونتو 16.04
إصدار المترجم: مجلس التعاون الخليجي (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
إصدار CUDA: 8.0
إصدار cuDNN: v5.1
إصدار برنامج تشغيل NVIDIA: 384.111

نفيديا- SMI:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 إصدار برنامج التشغيل: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| استمرار اسم وحدة معالجة الرسومات- M | موزع معرّف الناقل أ | متقلب Uncorr. ECC |
| أداء درجة حرارة المروحة : الاستخدام / الغطاء | استخدام الذاكرة | GPU-Util Compute M. |
| ================================ + |
| 0 تسلا M60 أوف | 00001543: 00: 00.0 إيقاف | متوقف |
| غير متاح 42C P0 41W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 تسلا M60 أوف | 00003134: 00: 00.0 إيقاف | متوقف |
| غير متاح 42C P0 39W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 تسلا M60 أوف | 00004975: 00: 00.0 إيقاف | متوقف |
| غير متاح 38C P0 41W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 تسلا M60 أوف | 0000F3E6: 00: 00.0 إيقاف | متوقف |
| غير متاح 38C P0 40W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +

نظام التشغيل: CentOS Linux الإصدار 7.1.1503
إصدار المترجم: gcc version 4.8.2
إصدار CUDA: CUDA 8.0
إصدار cuDNN: cuDNN 6.0.21
إصدار برنامج تشغيل NVIDIA: 375.26
نماذج وحدة معالجة الرسومات: 4x GeForce GTX TITAN X (12G)

نفيديا- SMI:
image

عند استخدام 4 وحدات معالجة رسومات (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_fpn3_" نوع_جهاز : 0} "يحدث.

ولكن باستخدام GPU واحد أو اثنين من GPUS (0،1 أو 2،3) ، يمكن تدريبه بشكل طبيعي.
شكرا.

jwnsu : بالنظر إلى CUDA_VISIBLE_DEVICES ). خطأ "ترتيبي الجهاز غير الصالح" هو أنه يحاول إنشاء عمليات على الأجهزة التي لا تستطيع العملية الوصول إليها.

coolbrain ، tshizys : شكرًا على التفاصيل. ماذا يحدث إذا كنت تستخدم وحدتي GPU باستخدام معرفات {0،2} أو {0،3} أو {1،2} أو {1،3}؟

rbgirshick أنت محق ، لتجربته أمس. فقط حاول مرة أخرى باستخدام ملف التكوين الصحيح (4 وحدات معالجة رسومات ، خطأ من معرفات وحدة معالجة الرسومات "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 : طلقة واحدة في الظلام هي تبديل التنفيذ الشامل إلى 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
تم استدعاء الإنهاء بعد طرح مثيل من "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" الإخراج: "gpu_s / type" "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: 2} device_option {device_type: 1 cuda_gpu_id: 0} المحرك: "CUDNN" is_gradient_op: صحيح
@ 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 :: حذف ()
@ 0x7f2c1b1af946 (غير معروف)
@ 0x7f2be27f42d9 std :: _ Sp_counted_base <> :: _ M_release ()
@ 0x7f2c1b1af973 الأمراض المنقولة جنسياً :: إنهاء ()
@ 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

وقم بتبديل التنفيذ الشامل إلى nccl عن طريق تمرير USE_NCCL True إلى train_net.py ، كما في:

أدوات python2 / train_net.py - اختبار متعدد وحدة معالجة الرسومات
--cfg configs / 12_2017_baselines / retinanet_R-101-FPN_1x_4gpus.yaml \
OUTPUT_DIR results_retinanet_R-101-FPN_1x_4gpus_model USE_NCCL صحيح

اختفى الخطأ ^ - ^ لكلا من استخدام أربعة GPUs {0،1،2،3} أو أي من وحدتي GPU {0،2} ، {0،3} ، {1،2} ، {1،3}.
rbgirshick ، شكرا جزيلا.

مرحبًا ، أفتح nccl op لتدريب الشبكة التعليمية واختفى الخطأ أعلاه. ومع ذلك ، يتوقف البرنامج بعد تحميل البيانات ويحتل وحدة المعالجة المركزية بنسبة 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 ميغابايت

توقف البرنامج ......

بيئتي:
نظام التشغيل: أوبونتو 16.04
إصدار المترجم: مجلس التعاون الخليجي (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
إصدار CUDA: 8.0
إصدار cuDNN: v5.1
إصدار برنامج تشغيل NVIDIA: 384.111

نفيديا- SMI:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 إصدار برنامج التشغيل: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| استمرار اسم وحدة معالجة الرسومات- M | موزع معرّف الناقل أ | متقلب Uncorr. ECC |
| أداء درجة حرارة المروحة : الاستخدام / الغطاء | استخدام الذاكرة | GPU-Util Compute M. |
| ================================ + |
| 0 تسلا M60 أوف | 00001543: 00: 00.0 إيقاف | متوقف |
| غير متاح 42C P0 41W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 تسلا M60 أوف | 00003134: 00: 00.0 إيقاف | متوقف |
| غير متاح 42C P0 39W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 تسلا M60 أوف | 00004975: 00: 00.0 إيقاف | متوقف |
| غير متاح 38C P0 41W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 تسلا M60 أوف | 0000F3E6: 00: 00.0 إيقاف | متوقف |
| غير متاح 38C P0 40W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +

lwher : هذا مؤسف. السبب في أننا لا نستخدم NCCL افتراضيًا هو أنه عرضة للتسبب في الجمود ، وهو ما أعتقد أنك تراه.

بعد إعادة بناء caffe2 مع NCCL ، أعد تشغيل البرنامج بهذا البرنامج النصي :
أدوات الثعبان / train_net.py \
- اختبار متعدد وحدة معالجة الرسومات \
--cfg configs / get_started / tutorial_4gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR. / إخراج USE_NCCL صحيح

يرمي هذا الخطأ :

إنشاء NCCLContext للمفتاح: 0: 0،1،2،3،
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
تحذير:

يجب عليك دائمًا تشغيل libnvidia-ml. بحيث يتم تثبيته مع ملف
برنامج تشغيل شاشة NVIDIA. يتم تثبيته افتراضيًا في / usr / lib و / usr / lib64.
libnvidia-ml.so في حزمة GDK هي مكتبة نصية مرفقة فقط من أجل
أغراض البناء (على سبيل المثال ، لا يمتلك الجهاز الذي تنشئه تطبيقك
لتثبيت برنامج تشغيل العرض).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
تم استدعاء الإنهاء بعد طرح مثيل من "caffe2 :: EnforceNotMet"
what (): [فرض الفشل في cuda_nccl_gpu.cc:40] status == ncclSuccess. 2 مقابل 0. خطأ في: /mnt/hzhida/project/caffe2/caffe2/contrib/nccl/cuda_nccl_gpu.cc40: خطأ في النظام من المشغل:
المدخلات: "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_2 / rpn_cls_logits_fpn2_w_grad" الانتاج : "gpu_3 / rpn_cls_logits_fpn2_w_grad" الاسم: "" النوع: "NCCLAllreduce" device_option {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. بحيث يتم تثبيته مع ملف
برنامج تشغيل شاشة 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 الأمراض المنقولة جنسياً :: إنهاء ()
@ 0x7ff1da18bd38 (غير معروف)
@ 0x7ff1e071f6ba start_thread
@ 0x7ff1e045541d استنساخ
@ 0x0 (غير معروف)
تم إحباط (تم تفريغ النواة)

بيئة التشغيل :
نظام التشغيل: أوبونتو 16.04
إصدار المترجم: مجلس التعاون الخليجي (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0
إصدار CUDA: 8.0
إصدار cuDNN: v5.1
إصدار برنامج تشغيل NVIDIA: 384.111

نفيديا- SMI:
+ ------------------------------------------------- ---------------------------- +
| NVIDIA-SMI 384.111 إصدار برنامج التشغيل: 384.111 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| استمرار اسم وحدة معالجة الرسومات- M | موزع معرّف الناقل أ | متقلب Uncorr. ECC |
| أداء درجة حرارة المروحة : الاستخدام / الغطاء | استخدام الذاكرة | GPU-Util Compute M. |
| ================================ + |
| 0 تسلا M60 أوف | 00001543: 00: 00.0 إيقاف | متوقف |
| غير متاح 42C P0 41W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1 تسلا M60 أوف | 00003134: 00: 00.0 إيقاف | متوقف |
| غير متاح 42C P0 39W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2 تسلا M60 أوف | 00004975: 00: 00.0 إيقاف | متوقف |
| غير متاح 38C P0 41W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3 تسلا M60 أوف | 0000F3E6: 00: 00.0 إيقاف | متوقف |
| غير متاح 38C P0 40W / 150W | 0 ميغا بايت / 8123 ميغا بايت | 0٪ افتراضي |
+ ------------------------------- + ----------------- ----- + ---------------------- +

ملاحظة إضافية واحدة حول NCCL: Caffe2 يبني مع NCCL افتراضيًا لذلك ليست هناك حاجة لإعادة بنائه.

القفز على هذا: نظرًا لأن الوصول غير القانوني للذاكرة يكون من عامل التشغيل Add ، فقد ترغب في التحقق مما إذا كان الوصول المباشر للأقران متاحًا بين gpus الذي تستخدمه. تعتمد الوظيفة الإضافية الحالية على ذلك ، وإذا لم يكن الأمر كذلك ، فقد نرغب في إصلاح الكود بالفعل. في الأساس ، للقيام بذلك ، في 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 شكرا! فقط للتأكيد ، إذن يضيف عامل التشغيل إضافة موترات عبر وحدة معالجة الرسومات {0،1} و {2،3} ، أليس كذلك؟ (أفترض أنه يضيف أشياء معًا من 4 وحدات تخزين عامة).

إنه تكوين 4 gpus ، مع معرفات GPU المحددة كـ "0،1،2،4" (عبر CUDA_VISIBLE_DEVICES.) إذا تم تكوين معرّفات GPU كـ "0،1،2،3" (أدنى معرّفات GPU) ، فإنها تعمل بشكل جيد بدون أي خطأ.

تضمين التغريدة
يحتوي خادم Linux الخاص بي على 4 وحدات معالجة رسومات M60 ،
هذه هي مساحة العمل الخاصة بي. إخراج GetCudaPeerAccessPattern ():
[[صح خطأ خطأ]
[خطأ صح خطأ خطأ]
[خطأ خطأ صح خطأ]
[خطأ خطأ خطأ صحيح]]

يمكنني تدريب الشبكة باستخدام 1 gpu جيدًا ، ولكن عندما أتدرب على الشبكة باستخدام 2 أو 4 GPUS ، أواجه المشكلات نفسها أعلاه ، حتى أنني قمت بتعيين NCCL = True

شكرا يا شباب. هذا يتحقق من افتراضاتي أن الوصول غير القانوني للذاكرة يأتي من Add op لا يعالج الاتصالات عبر الأجهزة بشكل صحيح عندما لا يتم تمكين وصول النظير. سيصدر إصلاحًا.

نفس المشكلة في الاتصالات عبر الأجهزة ...
يمكن لهذا الجهاز استخدام 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 }
ومساحة العمل الخاصة بي. إخراج GetCudaPeerAccessPattern () هو:
[[خطأ صحيح]
[خطأ صحيح]]
سواء كانت مشكلة اتصالات عبر وحدة معالجة الرسومات أيضًا؟ إذا لم يكن الأمر كذلك ، يمكن لأي شخص مساعدتي في إصلاحها ، شكرًا.

نعم , إنها نفس المشكلة. لا يمكن الجمع بين التدرجات اللونية في وحدة معالجة الرسومات المتقاطعة لأن وحدات معالجة الرسومات لا يمكنها التواصل مع بعضها البعض. إذا كنت ترغب في حل المشكلة ، فربما يمكنك نسخ التدرجات اللونية من وحدة معالجة الرسومات إلى وحدة المعالجة المركزية ، ثم تلخيصها معًا ومتوسطها. وأخيرًا ، انسخ متوسط ​​التدرج من وحدة المعالجة المركزية إلى وحدة معالجة الرسومات. تضمين التغريدة

شكرا لنصيحتك! coolbrain لكن لا يمكنني أن أفهم لماذا يستطيع بعض الأشخاص تدريب النموذج بنجاح باستخدام وحدتي معالجة

يعمل تدريب 4 وحدات معالجة رسومات إما بأدنى معرّفات GPU (0،1،2،3) أو أعلى معرّفات GPU (4،5،6،7) هنا دون أي خطأ (قد تعمل 8 gpus أيضًا ، لكن لم تجربها بعد. ) لديها مشكلة فقط مع مزيج من معرفات معينة ، على سبيل المثال "0،1،2،4" أو "1،3،5،7".

قد تتصرف مشكلة الاتصال عبر GPU المشتبه بها في caffe2 بشكل مختلف مع بنية الأجهزة الفردية (ذكر rbgirshick سابقًا أن خادم Facebook M40 يعمل مع مزيج من المعرفات أيضًا).

تعال عبر نفس المشكلة. هل هذا ثابت؟

لقد واجهت نفس المشكلة على محطة عمل مع 4 GTX 1080TI GPUS. يعمل Multi-gpu بشكل جيد على نظام أساسي آخر ، مثل caffe و Tensorflow.
هذه هي مساحة العمل الخاصة بي. إخراج GetCudaPeerAccessPattern ():
[[صح صحيح خطأ]
[صح صحيح خطأ]
[خطأ خطأ صحيح]
[خطأ خطأ صحيح]]
يعمل التكوين الثنائي gpu (مع {0،1} أو {2،3}) بشكل جيد. ثلاثة أو أربعة gpus سيواجهون المشكلة المذكورة أعلاه. ومع ذلك ، خطأي ليس في العملية Add ، أتذكر أن النوع هو Copy

هل تم حل المشكلة؟

rbgirshick مرحبًا ، قابلت نفس المشكلة مثلlwher. يبدو أن البرنامج يتعطل مع فرصة تقارب 50٪ مع NCCL على جهازي مع Ubuntu 14.04 و 4 GPU. هل هناك حل لتجنب مثل هذه السلوكيات من 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 وحدات معالجة رسومات (GPU) ، لكنني اختبرت الكود فقط في آخر 4 وحدات ، لذا يجب ألا يكون الاتصال بين وحدات معالجة الرسومات مشكلة. أستخدم NCCL 2.1.15 لـ CUDA 8.0.

آمل أن يتم إصلاح هذه المشكلة قريبًا. إنه أمر مزعج للغاية.

هذه المشكلة لا تزال موجودة ، أليس كذلك؟

من خلال إضافة "USE_NCLL True" عند تشغيل التدريب على وحدات معالجة رسومات متعددة ، نجحت في بدء تدريبي. على الرغم من أن الجمود قد يحدث في بعض الأحيان ، يمكنك محاولة تعديل بعض معلمات التدريب مثل معدل التعلم لحلها.

المشكلة لا تزال قائمة.

xieshuqin لقد قابلت نفس حالة المشكلة == ncclSuccess. 2 مقابل 0. " معك عند استخدام "USE_NCCL True". كيف تحل هذه المشكلة؟ شكرا

pkuxwguan تم إصلاح مشكلتي ولكني نسيت كيف

مرحبًا بالجميع ، لقد عانيت أيضًا من هذه المشكلة ، لذلك قمت أخيرًا بإصلاحها بنفسي. https://github.com/pytorch/pytorch/pull/6896 حل هذه المشكلة :)

أي شخص يقول لي ما إذا كان بإمكاني تشغيل قناع r-cnn مع وحدة معالجة رسومات واحدة فقط؟

daquexian لقد جربت العلاقات العامة الخاصة بك ، إنها تعمل !!! شكرا جزيلا

daquexian لا يبدو أن هذا العلاقات العامة يعمل بالنسبة لي. أواجه حالات توقف تام أثناء استخدام وحدة معالجة رسومات واحدة بدون NCCL وأيضًا أثناء استخدام وحدتي معالجة رسومات مع USE_NCCL True . بعد تغيير muji.py وفقًا للعلاقات العامة الخاصة بك وتشغيل وحدتي GPU USE_NCCL True ، ما زلت أعاني من مأزق ؛ يتوقف التدريب مؤقتًا عند أرقام التكرار العشوائية.

شكرًا لمحاولتك :) لست بحاجة إلى تعيين USE_NCCL = صحيح إذا كنت تستخدم ملف
العلاقات العامة. NCCL و "موجي" هما طريقتان مختلفتان للاتصال بوحدة معالجة الرسومات. العلاقات العامة الخاصة بي هي
Patch for muji ، والذي تطلب وصول الأقران gpu من قبل ، وليس لـ nccl.
فقط قم بتعيين USE_NCCL = False وستعمل العلاقات العامة الخاصة بي.

يوم الأربعاء ، 2 مايو 2018 ، الساعة 2:51 صباحًا ، Thomas Balestri [email protected]
كتب:

daquexian https://github.com/daquexian لا يبدو أن هذا PR يعمل
لي. أواجه حالات توقف تام أثناء استخدام وحدة معالجة رسومات واحدة بدون NCCL
وأيضًا أثناء استخدام 2 GPU مع USE_NCCL True. بعد تغيير muji.py
وفقًا للعلاقات العامة الخاصة بك وتشغيل وحدتي معالجة رسومات مع USE_NCCL صحيح ، أنا
لا تزال تعاني من مأزق. يتوقف التدريب مؤقتًا عند التكرار العشوائي
أعداد.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/facebookresearch/Detectron/issues/32#issuecomment-385755468 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ALEcn2nGO9e-fIF8S3bTDNkK4370hjOVks5tuK7DgaJpZM4Rsc8n
.

ربما أفتقد شيئًا ما ، ولكن إذا قمت بتعيين USE_NCCL = False ، واستخدمت muji.py و muji_test.py PR المعدل ، فسأحصل على الخطأ الأصلي:

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 V100s.

@ Feynman27 هل يمكن أن تخبرني أي فرع (مثل Allreduce4 ، Allreduce4Group2 ، Allreduce2 أو غيرها) من Allreduce في muji.py المحدّث تم إدخاله؟ قد ترغب في إضافة بعض وظائف الطباعة في هذا الفرع لمعرفة ذلك. وماذا لو استبدلت تطبيق Allreduce بمجرد استدعاء AllreduceFallback ؟ سيكون رائعًا إذا كان بإمكانك أيضًا توفير نمط الوصول إلى وحدة معالجة الرسومات الخاصة بك مثل https://github.com/facebookresearch/Detectron/issues/32#issuecomment -361739340. شكرا!

يتم استدعاء Allreduce4 . نمط الوصول إلى 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]]

سأحاول الاتصال بـ 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/python ).

@ Feynman27 هل

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 ، لكن لماذا عليّ ذلك؟ أنا فقط أقوم بتعديل ملف بيثون.

@ 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 هل يمكنك مراجعة العلاقات العامة الخاصة بي https://github.com/pytorch/pytorch/pull/6896؟ قد يساعد العديد من مستخدمي المستكشفين :)

daquexian لسوء الحظ ، ما زلت أعاني من الجمود.

@ Feynman27 همم .. ما قيمة USE_NCCL ؟ يجب أن يكون False

نعم ، تم تعيين USE_NCCL على false.

@ Feynman27 آسف ليس لدي أي فكرة لماذا سيؤدي إلى طريق مسدود. من الصعب التكاثر بالنسبة لي

عادلة بما فيه الكفاية. لكل ما أعرفه ، فإن الجمود الذي أواجهه قد لا يكون مرتبطًا بما إذا كان قد تم تمكين وصول نظير GPU أم لا. بالتأكيد سمح لي PR الخاص بك ببدء التدريب USE_NCCL=False . أنا أعمل على أجهزة Azure ، لذا قد يكون مرتبطًا بالتشغيل على أجهزة VM الخاصة بهم. لقد بدأت التدريب على الأجهزة المحلية باستخدام 2 TitanXs ويبدو أن التدريب يتقدم بشكل جيد.

daquexian شكرا! العلاقات العامة الخاصة بك عملت بالنسبة لي!

يبدو أنه يمكن إغلاق هذه المشكلة.

gadcam شكرًا للمساعدة في تحديد المشكلات التي يمكن إغلاقها!

بالنسبة لهذا ، أود تركه مفتوحًا حتى يتم دمج الإصلاح في Caffe2.

rbgirshick للأسف لا أحد يراجع علاقاتي العامة : |

rbgirshick شكرا! تم دمج العلاقات العامة الخاصة بي https://github.com/pytorch/pytorch/pull/6896. يبدو أنه يمكن إغلاق هذه المشكلة :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

kleingeo picture kleingeo  ·  3تعليقات

gaopeng-eugene picture gaopeng-eugene  ·  4تعليقات

partnercloudsupport picture partnercloudsupport  ·  3تعليقات

coldgemini picture coldgemini  ·  3تعليقات

rbgirshick picture rbgirshick  ·  3تعليقات