记一次docker编译DCNv2吐血的踩坑记录

序言

最近在做镜像瘦身,之前的同事把docker打的太大了,20个G。。。所以需要重新打一个纯净版image,然后把之前的模型重新部署到新image中,但是有一个模型用到了DCNv2(这玩意编译太烦了,建议少用),不得已,需要在docker中进行编译后才能使用,在服务器外面编译的时候非常顺利,一步到位。但是在docker中好像一切并不是特别顺利,坑一个接着一个,来来去去搞了好几天,所以特别记录下来。

编译DCNv2

按照正常流程,将DCNv2下载下来后,cd进入DCNv2目录,运行:

python setup.py build develop

正常编译的话,就可以直接得到编译的结果的。但是…
在这里插入图片描述
好吧,问题不大,按照网上的解决方案,将/home/user/miniconda/lib/python3.8/site-packages/torch/utils/cpp_extension.py里的[‘ninja’,’-v’]改成[‘ninja’,’–version’]即可。
在这里插入图片描述
但是…会提示找不到这些文件:dcn_v2_im2col_cuda.o、dcn_v2_cuda.o、dcn_v2_psroi_pooling_cuda.o,如果你修改后–version后把build删除重新编译,连cpu的.o也没有编译出来,如下两图
在这里插入图片描述在这里插入图片描述
这个问题给我整破防了,网上看到很多类似的提问,但是没有一个靠谱的回答,这也是我找到原因后,立马想写一篇文章记录一下的原因。到底是哪里出了问题呢?回退到第一次编译,就是没修改–version前,第一次运行python setup.py build develop的时候,输出了很多信息,沿着信息往上找,当时只看到了[‘ninja’,’-v’]这个报错,就没再往上翻,没想到,上面还有error!!玛德法克惹!!
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这里编译没通过啊…/bin/sh: 1: /usr/local/cuda/bin/nvcc: not found

不可能找不到nvcc啊,docker里面不自带嘛?

然后去找了一下,挖槽,还真没有!下错镜像了。。。白搞了
在这里插入图片描述
正常情况下是这样的
在这里插入图片描述

我最开始拉的镜像是anibali/pytorch1.5.0-cuda10.2-ubuntu18.04,这个版本应该是属于runtime,nvcc作为cuda的编译器,在这个镜像中是不提供的。

所以从一开始就错了,白搞了。不过总算知道问题的所在了。

重新pull镜像,应该pull devel版本的,所以我重新pull了这个:

docker pull pytorch/pytorch:1.5-cuda10.1-cudnn7-devel

可以看到pull下来后比之前的大了很多,所以这里建议如果不是必须要用DCNv2模型的,还是少用。免得部署时一堆问题。
在这里插入图片描述

run进去看看,有没有nvcc,看到了曙光有木有!!
在这里插入图片描述
然后继续cd到DCNv2编译,运行python setup.py build develop:
在这里插入图片描述
我枯了,太顺利了吧!!不到一分钟的编译时间,我整了两天!!!终于成功了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值