windows10+VS2017+CUDA10.1编译指南mmdet

经历磨难终于在windows上编译好了mmdetect
给出我的环境信息供参考:
Windows10
Visual Studio 2017,15.9.23 _MSC_VER=14.16
CUDA 10.0
nvcc 10.0 (显卡驱动好像显示10.1 不一样好像无伤大雅
python 3.6
pytorch 版本要在[1.1,1.4]之间,1.5会出问题:AT_CHECK未声明:

前期一直都在visual studio 和cuda版本匹配上花时间。
尽量老老实实用2017,VS 2019到后面及时修改了cuda 10.0配置文件也会出一些问题。

执行的时候尽量在cmd执行,pycharm输出的编码可能不支持,出来的都是utf-8解gbk编码的乱码。
安装好Visual Studio后在cmd执行

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=14.xx (x 修改为对应_MSC_VER)

在这里可以查看对应MSC_VER: https://dev.to/yumetodo/list-of-mscver-and-mscfullver-8nd

其它跟着感觉装就好,似乎没有在其它包上出大问题。
参考dockerfile

FROM pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-devel

RUN apt-get update && apt-get install -y \
    git \
    wget \
    curl \
    cmake \
    unzip \
    build-essential \
    libsm6 \
    libxext6 \
    libfontconfig1 \
    libxrender1 \
    libswscale-dev \
    libtbb2 \
    libtbb-dev \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libjasper-dev \
    libavformat-dev \
    libpq-dev \
    libturbojpeg \
    software-properties-common \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN pip install --no-cache-dir \
    numpy \
    pandas \
    PyYAML \
    cycler \
    dill \
    h5py \
    imgaug \
    matplotlib \
    opencv-contrib-python \
    Pillow \
    scikit-image \
    scikit-learn \
    scipy \
    setuptools \
    six \
    tqdm \
    ipython \
    ipdb \
    albumentations \
    click \
    jpeg4py \
    addict \
    colorama \
    torchvision \
    iterative-stratification

解决报错: Error checking compiler version for cl
解决方法:导入cl.exe所在位置到系统环境变量path

对mmdetect项目文件进行修改:

在mmdet/ops/nms/setup.py

替换

# default_compiler_so = self.compiler_so # to make it successfully compile disable compiler_so edited by zzl 
=>
default_compiler_so = ""

在mmdet/ops/sigmoid_focal_loss/src/sigmoid_focal_loss_cuda.cu

在#include 区域下添加

int Ceil_div(int a, int b) { return (a + b - 1); }

替换

/*targets.contiguous().data<long>(), edited by zzl*/
=>
static_cast<long*>(targets.contiguous().data_ptr()),

/*dim3 grid(std::min(THCCeilDiv(d_logits_size, 512L), 4096L)); edited by zzl*/
=>
dim3 grid(std::min(Ceil_div((int)d_logits_size, 512), 4096));

/*dim3 grid(std::min(THCCeilDiv(losses_size, 512L), 4096L)); edited by zzl*/
=>
dim3 grid(std::min(Ceil_div((int)losses_size, 512), 4096));

完成修改后,分别在

mmdet/ops/roi_align/
mmdet/ops/roi_pool/
mmdet/ops/dcn/
mmdet/ops/nms/
mmdet/ops/sigmoid_focal_loss/ 下 执行

python setup.py build_ext --inplace

正在创建库 build\temp.win-amd64-3.6\Release\src\sigmoid_focal_loss_cuda.cp36-win_amd64.lib 和对象 build\temp.win-amd64-3.6\Release\src\sigmoid_focal_loss_cuda.cp36-win_amd64.exp
正在生成代码
c:\users\jhwen\venus\py\kaggle-imaterialist-with-model\mmdetection\mmdet\ops\sigmoid_focal_loss\src\sigmoid_focal_loss.cpp(36) : warning C4715: “SigmoidFocalLoss_backward”: 不是所有的控件路径都返回值
c:\users\jhwen\venus\py\kaggle-imaterialist-with-model\mmdetection\mmdet\ops\sigmoid_focal_loss\src\sigmoid_focal_loss.cpp(25) : warning C4715: “SigmoidFocalLoss_forward”: 不是所有的控件路径都返回值
已完成代码的生成
copying build\lib.win-amd64-3.6\sigmoid_focal_loss_cuda.cp36-win_amd64.pyd ->

最后在mmdetection目录下执行

python setup.py develop

如果顺利执行,那么恭喜你完成了编译工作,接下来就可以测试一下了。

posted @ 2020-05-31 01:03  </Venus>  阅读(2956)  评论(1编辑  收藏  举报