windows下调试 detectron2或者mmdetection 的c++ 扩展模块,如nms,ROIAlign,dcn等

    技术2023-11-23  96

    1,环境说明:

    1)window10, pycharm, vs2017

    2)被调试框架:pytorch, detectron2,mmdetection等(不限于)

     

    2,步骤 1)首先要detectron2,mmdetection下编译通过,生成c++扩展的pyd,

    例如:要生成roi_pool_cuda.cp36-win_amd64.pyd,nms_cuda.cp36-win_amd64.pyd,

    _C.cp36-win_amd64.pyd等

    2)编译cpu版本(debug调试最好用cpu)

    把setup.py中的关于cuda的编译全部注释掉即可编译cpu版本。如:

        #if (torch.cuda.is_available() and CUDA_HOME is not None) or os.getenv("FORCE_CUDA", "0") == "1":     #    extension = CUDAExtension     #    sources += source_cuda     #define_macros += [("WITH_CUDA", None)]     #    extra_compile_args["nvcc"] = [     #        "-DCUDA_HAS_FP16=1",     #        "-D__CUDA_NO_HALF_OPERATORS__",     #        "-D__CUDA_NO_HALF_CONVERSIONS__",     #        "-D__CUDA_NO_HALF2_OPERATORS__",     #    ]

        # It's better if pytorch can do this by default ..     #    CC = os.environ.get("CC", None)     #    if CC is not None:     #       extra_compile_args["nvcc"].append("-ccbin={}".format(CC))

        sources = [os.path.join(extensions_dir, s) for s in sources]

    3)编译debug版本

    windows版本会调用默认的vs编译器编译c++扩展。本文设为vs2017

    编译debug版就要添加vs2017编译器的编译选项

    修改setup.py以生成调试文件。必须将'/Zi' '/Od'添加到 extra_compile_args和'/DEBUG'到extra_link_args。

    示例:

    extra_compile_args = ['/Zi', '/Od']

     ext_modules = [         extension(             "xx._C",             sources,             include_dirs=include_dirs,             define_macros=define_macros,             extra_compile_args=extra_compile_args,             extra_link_args=['/DEBUG'],         )     ]

    编译完成后生成*.pdb文件,如:_C.cp36-win_amd64.pdb

    注意:

    如果c++扩展模块是cpu,debug版,则框架(detectron2,mmdetection)也必须是cpu版本的,不能使用gpu版本

    4)vs2017下 附加到进程进行调试

    在pycharm下加断点于c++扩展模型函数上

    打开vs2017->调试->选项->符号对话框中把3)中生成的*.pdb文件添加进去

    vs2017->调试->附加到进程,选择python.exe进程

    vs2017 打开c++扩展的cpp文件,并在要调试行上添加断点

    pycharm上调试进入c++扩展模型函数,则断点就会进入到vs中,就可以进行调试了。

     

    3,后记

    祝你好运!!!

    参考:

    https://www.geek-share.com/detail/2711891029.html

    https://www.cnpython.com/qa/82660

     

     

     

     

    Processed: 0.010, SQL: 9