Detectron: マルチGPUトレーニングは不正なメモリアクセスをスローします

作成日 2018年01月25日  ·  64コメント  ·  ソース: facebookresearch/Detectron

1つのGPUを使用してトレーニングする場合、問題はありません。 しかし、2つまたは4つのGPUを使用すると、問題が発生します。 ログ出力:

'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" name: "" type: "Add" device_option {device_type:1 cuda_gpu_id
* 1516866180(UNIX時間)で中止されました。GNU日付を使用している場合は、「date -d @ 1516866180」を試してください。*
再帰的に呼び出されて終了します
再帰的に呼び出されて終了します
再帰的に呼び出されて終了します
PC:@ 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):転送
* PID55375からPID55375(TID 0x7ff453fff700)が受信したSIGABRT(@ 0x3e80000d84f)。
再帰的に呼び出されて終了します
@ 0x7ff675945390(不明)
@ 0x7ff67559f428 gsignal
@ 0x7ff6755a102a中止
@ 0x7ff66f37e84d __gnu_cxx :: __ verbose_terminate_handler()
@ 0x7ff66f37c6b6(不明)
@ 0x7ff66f37c701 std :: terminate()
@ 0x7ff66f3a7d38(不明)
@ 0x7ff67593b6ba start_thread
@ 0x7ff67567141dクローン
@ 0x0(不明)
中止(コアダンプ)

upstream bug

最も参考になるコメント

みんなありがとう。 これは、ピアアクセスが有効になっていない場合に、デバイス間の通信を適切に処理しないAdd操作から不正なメモリアクセスが発生しているという私の仮定を検証します。 修正を発行します。

全てのコメント64件

同じエラーが発生しました。 違いは、1つのGPUまたは2つのGPUを使用する場合、問題はありません。 ただし、4つのGPUを使用してMask RCNN(mask_rcnn_R-101-FPN)またはRetinaNet(retinanet_R-101-FPN)をトレーニングすると、同じ問題が発生します。

2つ以上のGPUを使用してtutorial_Res50ネットワークをトレーニングするときにも同じ問題が発生します。

GPU IDを指定するときに同じ問題が発生しました(つまり、4つのGPUの場合は「1,3,5,7」などの最小のIDとは異なります)。 最小のGPUIDが指定されている場合、トレーニングは正常に続行されます。

@jwnsuCUDA_VISIBLE_DEVICESが最小のIDを使用しない場合でも、トレーニングが機能するように修正に取り組んでいます。 報告と診断をありがとう。

こんにちは@ jwnsu@ coolbrain@ tshizys@ lwher :この問題を私たちの側で再現することはできません。

共通のパターンを明らかにする可能性のあるいくつかの情報をそれぞれ提供できますか?

特に:

  • オペレーティング・システム: ?
  • コンパイラバージョン:?
  • CUDAバージョン:?
  • cuDNNバージョン:?
  • NVIDIAドライバーバージョン:?
  • GPUモデル(すべてが同じでない場合はすべてのデバイス用):?
  • 関連すると思われる他の何か:?

たとえば、GPU ID 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 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU名の永続性-M | Bus-Id Disp.A | 揮発性のUncorr。 ECC |
| ファン温度パフォーマンス電源:使用法/キャップ| メモリ-使用法| GPU-Util Compute M. |
| =============================== + |
| 0 TeslaM60オフ| 00001543:00:00.0オフ| オフ|
| 該当なし42CP0 41W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1テスラM60オフ| 00003134:00:00.0オフ| オフ|
| 該当なし42CP0 39W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2テスラM60オフ| 00004975:00:00.0オフ| オフ|
| 該当なし38CP0 41W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3テスラM60オフ| 0000F3E6:00:00.0オフ| オフ|
| 該当なし38CP0 40W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +

オペレーティングシステム:CentOSLinuxリリース7.1.1503
コンパイラバージョン:gccバージョン4.8.2
CUDAバージョン:CUDA 8.0
cuDNNバージョン:cuDNN 6.0.21
NVIDIAドライバーバージョン:375.26
GPUモデル: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_" :0}」が発生します。

ただし、1つのGPUまたは2つのGPU(0、1、または2、3)を使用すると、通常どおりトレーニングできます。
ありがとう。

@jwnsu :エラーをより詳しく見ると(「無効なデバイス序数」)、8 GPUに設定された構成でトレーニングしようとしているようですが、プロセスは4CUDA_VISIBLE_DEVICES経由)

@ coolbrain@ tshizys :詳細をありがとう。 ID {0,2}、{0,3}、{1,2}、または{1,3}を使用する2つのGPUを使用するとどうなりますか?

@rbgirshickあなたは正しいです、昨日試すために間違った設定ファイル(8 GPU設定)を選びました。 正しい構成ファイルで再試行したところ(4 GPU、gpu id "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 :暗闇の中でのワンショットは、次のようにUSE_NCCL Truetrain_net.pyに渡すことにより、all-reduce実装をncclに切り替えることです。

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でビルドされている必要があります-これがデフォルトで行われるかどうかはわかりませんが、ncclサポートを使用してCaffe2を再構築するための作業が必要になります。

@ rbgirshick 、2つのGPU、つまり{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:不正なメモリアクセスが検出されました
*障害スタックトレースを確認します。
再帰的に呼び出されて終了します
再帰的に呼び出されて終了します
GNU dateを使用している場合は、1517112548(unix time)で中止されました。「date-d @ 1517112548」を試してください。
'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_0 / __ m22_shared"名前: ""タイプ: " "arg {name:" kernel "i:3} arg {name:" exhaustive_search "i:0} arg {name:" pad "i:1} arg {name:" order "s:" NCHW "} arg {name : "ストライド" i:2} device_option {device_type:1 cuda_gpu_id:0}エンジン: "CUDNN" is_gradient_op:true
@ 0x7f2bdf712772 google :: LogMessage :: Fail()
PC:@ 0x0(不明)
PID4791からPID4791(TID 0x7f2a6effd700)が受信したSIGABRT(@ 0x3e8000012b7)。
@ 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エラーが発生しました:不正なメモリアクセスが発生しました」だけです。

また、nccl-1.3.5を使用してcaffe2を再構築します(https://caffe2.ai/docs/getting-started.html?platform=centos&configuration=cloud#null__troubleshootingに続く):

image

次のように、USE_NCCL Trueをtrain_net.pyに渡すことにより、all-reduce実装をncclに切り替えます。

python2 tools / train_net.py --multi-gpu-testing \
--cfg configs / 12_2017_baselines / retinanet_R-101-FPN_1x_4gpus.yaml \
OUTPUT_DIR results_retinanet_R-101-FPN_1x_4gpus_model USE_NCCL True

エラーは、4つのGPU {0,1,2,3}または2つのGPU {0,2}、{0,3}、{1,2}、{1,3}のいずれかを使用した場合の両方で^-^消えました。
@rbgirshick 、どうもありがとう。

こんにちは、nccl opを開いてtutorial_networkをトレーニングすると、上記のエラーが消えました。 ただし、プログラムはデータのロード後にハングし、常に100%のCPUを占有します。

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

プログラムがハングする......

私の環境:
オペレーティングシステム: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 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU名の永続性-M | Bus-Id Disp.A | 揮発性のUncorr。 ECC |
| ファン温度パフォーマンス電源:使用法/キャップ| メモリ-使用法| GPU-Util Compute M. |
| =============================== + |
| 0 TeslaM60オフ| 00001543:00:00.0オフ| オフ|
| 該当なし42CP0 41W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1テスラM60オフ| 00003134:00:00.0オフ| オフ|
| 該当なし42CP0 39W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2テスラM60オフ| 00004975:00:00.0オフ| オフ|
| 該当なし38CP0 41W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3テスラM60オフ| 0000F3E6:00:00.0オフ| オフ|
| 該当なし38CP0 40W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +

@lwher :それは残念です。 デフォルトでNCCLを使用しない理由は、デッドロックが発生しやすいためです。これは、あなたが見ていると思います。

NCCLでcaffe2を再構築した後、次のスクリプトを使用してプログラムを再実行します。
python tools / train_net.py \
--multi-gpu-testing \
--cfg configs / getting_started / tutorial_4gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR ./output USE_NCCL True

このエラーをスローします:

キーのNCCLContextの作成:0:0、1、2、3、
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
警告:

常にインストールされているlibnvidia-ml.soを使用して実行する必要があります
NVIDIAディスプレイドライバー。 デフォルトでは、/ usr / libおよび/ usr / lib64にインストールされます。
GDKパッケージのlibnvidia-ml.soは、次の目的でのみ接続されるスタブライブラリです。
ビルドの目的(たとえば、アプリケーションをビルドするマシンにはない
ディスプレイドライバをインストールする)。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'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" name: "" type: "NCCLAllreduce" device_option {device_type:1 cuda_gpu_id:0}
* 1517210588(UNIX時間)で中止されました。GNU日付を使用している場合は、「date -d @ 1517210588」を試してください。
PC:@ 0x7ff1e0383428 gsignal
PID31302からPID31302(TID 0x7fefb5ffb700)が受信したSIGABRT(@ 0x3e800007a46)。
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にインストールされます。
GDKパッケージのlibnvidia-ml.soは、次の目的でのみ接続されるスタブライブラリです。
ビルドの目的(たとえば、アプリケーションをビルドするマシンにはない
ディスプレイドライバをインストールする)。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
再帰的に呼び出されて終了します
@ 0x7ff1e0729390(不明)
I0129 07:23:08.188051 31592 context_gpu.cu:321] GPU 0:2466 MB
I0129 07:23:08.188074 31592 context_gpu.cu:321] GPU 1:2387 MB
I0129 07:23:08.188091 31592 context_gpu.cu:321] GPU 2:2311 MB
I0129 07:23:08.188099 31592 context_gpu.cu:321] GPU 3:2382 MB
I0129 07:23:08.188107 31592 context_gpu.cu:325]合計:9548 MB
@ 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 |
| ------------------------------- + ----------------- ----- + ---------------------- +
| GPU名の永続性-M | Bus-Id Disp.A | 揮発性のUncorr。 ECC |
| ファン温度パフォーマンス電源:使用法/キャップ| メモリ-使用法| GPU-Util Compute M. |
| =============================== + |
| 0 TeslaM60オフ| 00001543:00:00.0オフ| オフ|
| 該当なし42CP0 41W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 1テスラM60オフ| 00003134:00:00.0オフ| オフ|
| 該当なし42CP0 39W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 2テスラM60オフ| 00004975:00:00.0オフ| オフ|
| 該当なし38CP0 41W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +
| 3テスラM60オフ| 0000F3E6:00:00.0オフ| オフ|
| 該当なし38CP0 40W / 150W | 0MiB / 8123MiB | 0%デフォルト|
+ ------------------------------- + ----------------- ----- + ---------------------- +

NCCLに関するもう1つの注意:Caffe2はデフォルトでNCCLされるため、再構築する必要はありません。

これに飛びつきます:不正なメモリアクセスはAddオペレーターからのものであるため、使用しているGPU間で直接ピアアクセスが利用可能かどうかを確認することをお勧めします。 現在のAddopはそれに依存しており、そうでない場合は、実際にコードを修正したい場合があります。 基本的に、これを行うには、Pythonで次のようにします。

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

その出力をデバッグ用に貼り付けてもらえますか? (特に、CUDA_VISIBLE_DEVICESを使用している場合は、それを使用してpythonを呼び出すようにしてください)

2つのデバッグ行からの@Yangqing出力:
[[ True True False False] [ True True False False] [False False True True] [False False True True]]
この問題を調査してくれてありがとう(そして... caffe / caffe2フレームワーク!)

@jwnsuありがとう! 確認のために、Add演算子はgpu {0,1}と{2,3}にテンソルを追加していますよね? (私はそれが4GPUからのものを一緒に追加していると思います)。

これは4gpus構成であり、GPU IDは「0,1,2,4」(CUDA_VISIBLE_DEVICES経由)として指定されています。GPUIDが「0,1,2,3」(最小のGPU ID)として構成されている場合は、何もしなくても正常に機能します。エラー。

@Yangqing
私のLinuxサーバーには4つのM60GPUがあります。
これは私のワークスペースです。GetCudaPeerAccessPattern()出力:
[[True False False False]
[False True False False]
[False False True False]
[False False False True]]

1 gpuを使用してネットを適切にトレーニングできますが、2つまたは4つのGPUを使用してネットをトレーニングすると、NCCL = Trueに設定しても、上記と同じ問題が発生します。

みんなありがとう。 これは、ピアアクセスが有効になっていない場合に、デバイス間の通信を適切に処理しないAdd操作から不正なメモリアクセスが発生しているという私の仮定を検証します。 修正を発行します。

クロスデバイス通信でも同じ問題が発生します。
このマシンは4GPU [0,1,2,3]を使用できます。
image
このマシンは[0,1]と[2,3]を使用できます。
image

ところで、私は12Cpuと4titan xを使用して、pytorchフレームワークで3D FasterRCNNをトレーニングしました。 Pytorchにこの問題がないのはなぜですか????

@YangqingマルチGPUでDetectronをトレーニングできないため、クロスGPU通信の問題をどのくらいの期間修正しますか? ありがとう。

@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()の出力は次のとおりです。
[[真/偽]
[真偽]]
クロスGPU通信の問題でもありますか? そうでなければ、誰でも私がそれを修正するのを手伝ってくれるでしょう、ありがとう。

はい、同じ問題です。 GPUは相互に通信できないため、クロスGPUの勾配を合計することはできません。 問題を解決したい場合は、GPUからCPUに勾配をコピーし、それらを合計して平均することができます。 そして最後に、CPUからGPUに平均勾配をコピーします。 @blateyang

助言ありがとう! @coolbrainしかし、2つ以上のGPUでモデルを正常にトレーニングできる人がいる理由がわかりません。 彼らは同じCross-GPU通信の問題に遭遇していませんか?

最小のGPUID(0,1,2,3)または最大のGPU ID(4,5,6,7)を持つ4つのGPUのトレーニングは、エラーなしでここで機能します(8 gpusも機能する可能性がありますが、まだ試していません。 )「0,1,2,4」や「1,3,5,7」など、特定のIDの組み合わせでのみ問題が発生します。

caffe2のクロスGPU通信の問題は、個々のハードウェアビルドによって異なる動作をする可能性があります(前述のrbgirshickは、Facebook M40サーバーがIDの組み合わせでも機能します)。

同じ問題に遭遇します。 これは修正されていますか?

4つのGTX1080TIGPUを搭載したワークステーションで同じ問題が発生しました。 マルチGPUは、カフェやテンソルフローなどの他のプラットフォームでうまく機能します。
これは私のワークスペースです。GetCudaPeerAccessPattern()出力:
[[True True False False]
[真真偽偽]
[False False True True]
[False False True True]]
2つのGPU構成({0,1}または{2,3}を使用)は適切に機能します。 3つまたは4つのGPUは、前述の問題に直面します。 ただし、エラーはAdd操作ではなく、タイプがCopyであることを覚えています。

問題は修正されていますか?

@rbgirshickこんにちは、

@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 }

私のシステムはUbuntu14.04で、Cuda8.0とCudnn5.1を搭載しています。 私のマシンには8つのGPUがありますが、最後の4つでのみコードをテストしたので、GPU間の通信は問題ありません。 CUDA8.0にはNCCL2.1.15を使用しています。

この問題がすぐに修正されることを願っています。 それはかなり迷惑です。

この問題はまだ存在しますよね?

マルチGPUトレーニングを実行するときに「USE_NCLLTrue」を追加することで、トレーニングを正常に開始できます。 デッドロックが発生することもありますが、それを解決するために、学習率などのいくつかのトレーニングパラメータを変更してみることができます。

問題はまだ存在します。

@xieshuqin同じ問題が発生しました 'status == ncclSuccess。 2対0。」 'USE_NCCL True'を使用する場合、この問題をどのように解決しますか?ありがとうございます

@pkuxwguan私の問題は修正されましたが、どうやって修正したのか忘れてしまいました。 申し訳ありません。 しかし、私は問題がNCCLの間違ったインストールに関連しているはずであることを覚えています。

みなさん、こんにちは。私もこの問題に悩まされていたので、ようやく自分で修正しました。 https://github.com/pytorch/pytorch/pull/6896はこの問題を解決しました:)

GPUを1つだけ使用してマスクr-cnnを実行できるかどうか誰かに教えてもらえますか?

@daquexian私はあなたのPRを試しました、それは

@daquexianこのPRは私にはうまくいかないようです。 NCCLなしで単一のGPUを使用しているとき、およびUSE_NCCL True 2つのGPUを使用しているときに、デッドロックが発生しています。 PRに応じてmuji.py変更し、 USE_NCCL Trueで2つのGPUを実行した後、まだデッドロックが発生しています。 トレーニングはランダムな反復回数で一時停止します。

試していただきありがとうございます:)私のを使用する場合はUSE_NCCL = Trueを設定する必要はありません
pr。 NCCLと「無印良品」は2つの異なるGPU通信方法です。 私の広報は
ncclではなく、以前にgpuピアアクセスを必要とした無印良品のパッチ。
USE_NCCL = Falseを設定するだけで、私のprは機能します。

水、2018年5月2日には、2:51トーマスバレストリ[email protected]
書きました:

@daquexianhttps ://github.com/daquexianこのPRは機能していないようです
私のために。 NCCLなしで単一のGPUを使用しているときにデッドロックが発生します
また、USE_NCCLTrueで2つのGPUを使用している場合。 muji.pyを変更した後
あなたのPRによると、USE_NCCL Trueを使用して2つのGPUで実行している、私は
まだデッドロックが発生しています。 トレーニングはランダムな反復で一時停止します
数字。


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、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)

私は4つのV100でCuda9.1、cudnn7.1を使用しています。

@ Feynman27更新されたmuji.pyのAllreduceのどのブランチ( Allreduce4Allreduce4Group2Allreduce2など)が入力されているか教えてください。 これらのブランチにいくつかの印刷関数を追加して、それを知ることができます。 そして、 AllreduceFallback呼び出すだけで、 Allreduceの実装を置き換えるとどうなるでしょうか。 https://github.com/facebookresearch/Detectron/issues/32#issuecomment-361739340のようなgpuアクセスパターンも提供できると便利です。 ありがとう!

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それは奇妙です。 GPUアクセスパターンに従って、 AllreduceFallback代わりにAllreduce4 AllreduceFallbackが呼び出されます。 また、 AllreduceFallback手動で呼び出した場合、エラーメッセージはAllreduceFallbackからのものではないようです。 右のフォルダのmuji.pyを変更しましたか? たとえば、caffe2のpythonパッケージが/usr/lib/python/site-packages/caffe2にある場合、caffe2のソースフォルダー( ~/caffe2/python )のmuji.pyを変更しても機能しません。

@ Feynman27 caffe2を再構築しましたか?

@daquexian caffe2パッケージは、 /usr/lib/python/site-packages/caffe2などではなく、 pytorch/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'
>>> 

pytorch/caffe2/python/muji.py下のmuji.pyファイルを変更しただけです。

@yuzcccc caffe2を再構築しませんでしたが、なぜ再構築する必要があるのでしょうか。 Pythonファイルのみを変更しています。

@ Feynman27 muji.py下の/home/markable-ai/pytorch/build/caffe2/python/muji.py muji.pyを変更する必要があると思います

うん、それは私の見落としだった。 良いキャッチ。 pytorch/caffe2/python/muji.pyを変更していたので、 pytorch/build/caffe2/python/muji.pyを変更する必要がありました。

@ Feynman27それが機能するのを見てうれしいです:)
@Yangqing私の

@daquexian残念ながら、私はまだデッドロックを経験しているようです。

@ Feynman27うーん.. USE_NCCLの値は何ですか? Falseである必要があります

はい、 USE_NCCLはfalseに設定されました。

@ Feynman27申し訳ありませんが、なぜデッドロックが発生するのか

けっこうだ。 私が知っている限りでは、私が経験しているデッドロックは、GPUピアアクセスが有効になっているかどうかとは無関係である可能性があります。 あなたのPRにより、私はUSE_NCCL=Falseトレーニングを開始することができました。 私はAzureマシンで実行しているので、VMでの実行に関連している可能性があります。 2台のTitanXを搭載したローカルマシンでトレーニングを開始しましたが、トレーニングは順調に進んでいるようです。

@daquexianありがとう! あなたのPRは私のために働いた!

この問題は解決できるようです。

@gadcamは、解決できる問題の特定にごございます。

これについては、Caffe2にマージされた修正があるまで開いたままにしておきたいと思います。

@rbgirshick残念ながら、誰も私のPRをレビューし

@rbgirshickありがとう! 私のPRhttps://github.com/pytorch/pytorch/pull/6896がマージされました。 この問題は解決できるようです:)

このページは役に立ちましたか?
0 / 5 - 0 評価