jbwang1997 / OBBDetection

OBBDetection is an oriented object detection library, which is based on MMdetection.
Apache License 2.0
522 stars 112 forks source link

RoIAlignRotated能在多gpu上执行吗 #74

Closed qfwysw closed 2 years ago

qfwysw commented 2 years ago

感谢您提供优质的代码! 您好, 我在我的项目中用到了您关于RoIAlignRotated部分的代码, 在单gpu模式下它十分有效, 运行也很快(此时我裁剪的是feature, 所以我将feature和roi都放到了gpu上). 但是当我使用多gpu加载模型时, 产生了以下报错: line 32, in forward features, rois, spatial_scale, out_h, out_w, sample_num, aligned) RuntimeError: CUDA error: an illegal memory access was encountered 我尝试将RoIAlignRotated其他变量都放在同一个gpu上, 但是结果依然是错误的. 请问您有什么方法吗? 期待您的回复!

jbwang1997 commented 2 years ago

这一段代码是从detectron2上改过来的,可以在多GPU上运行,这个错误应该不会是多GPU加在模型的原因,可能输出的参数不合乎规范,可以尝试单步调试。

或者错误在其他地方,但由于gpu的异步运行所以报错地方出现错误,可以通过'CUDA_LAUNCH_BLOCKING=1'进行调试。

qfwysw commented 2 years ago

感谢您的建议! 但是我尝试将'CUDA_LAUNCH_BLOCKING=1'加入代码, 整个代码卡在加载中 我尝试单步执行代码, 我有两张卡, 很奇怪的是cuda0执行通过后, cuda1上会报错, 如果cuda1执行通过, 那么cuda0会报错 这使我十分困惑, 报错依然是我提问的这个, 请问您有什么见解吗? 期待您慷慨的解惑!

qfwysw commented 2 years ago

十分抱歉打扰您 我一项一项的注释我的网络, 当我仅仅注释掉roi_align时, 网络在多gpu训练了起来, 看来的确是roi_align出现了问题 我是单独抽出了该roi模块直接import调用, 在您的代码中是否有一些特殊的前置处理得以在多gpu上运行呢? 期待您的解答

qfwysw commented 2 years ago

$TU9ICB81E$666A~FNEN%OX 我在您的代码中看到了nn.modulelist, 我也加上了, 但是还是报错

jbwang1997 commented 2 years ago

有可能是数据的错误,比如输入的roi序号超出batch size的数量

qfwysw commented 2 years ago

十分感谢您! 我已经解决了问题, 确实是roi的序号超出了batchsize的数量, 我用了多层字典, 结果传进去后并没有平均分配而是全部拷贝了, 所以出现上面的错误 再次表达我的感谢!