在实现DINO Detection方法时,我们可能会遇到以上问题。因为在DeformableAttention模块,为了加速,需要自己去编译这个模块。
如果你的环境变量中能够找到cuda路径,使用正确的torch版本和cuda版本的话,这个问题很容易解决。
但是,如果你在一个集群中,可能找不到cuda路径,那么编译起来就困难多了。
# 找cuda环境
nvcc -V
whereis cuda
我在集群中来编译这个模块,编译源文件:https://github.com/IDEA-Research/DINO/tree/main/models/dino/ops
首先想到的是,通过在非集群服务器中,配置与集群服务器相同的python环境和cuda环境;
编译完成之后,把生成的库文件拷贝过去(路径:./envs/python39/lib/python3.9/site-packages):
把生成的info文件也拷贝过去:
这是通过conda list,可以看到已经安装了这个库:
但是,呀,但是,实际使用时:
那么接下来,尝试用easy_install egg文件来安装,因为在另一个服务器已经生成了这个文件(dist文件夹下),拷贝过去,然后安装:
easy_install MultiScaleDeformableAttention-1.0-py3.9-linux-x86_64.egg
安装的时候遇到问题:
经过研究,这是setuptools版本的问题,升级到最新版(67),出现问题:
这个问题查了半天,无法解决,故想还是版本问题,所以就盲试更改版本,发现以下版本解决问题:
pip install setuptools==40
再次运行安装,终于安装成功:
运行发现另一个bug:
这个库在网上没有找到,所以想原来的服务器上应该有,搜索之后找到了,然后放在了./envs/python39/lib/python3.9/site-packages对应的文件夹下,但是测试发现系统并没有去这个目录下找。思考是,在源服务器编译时,这个依赖库的路径写死了,写到了so中,还是无法解决问题。
痛定思痛,决定看看没有root权限,来安装cuda,根据自己torch安装的版本,确定cuda版本,去官网下载run file,然后安装过程中,不选择驱动安装,设置自己的路径,进行安装。可参考:https://blog.csdn.net/u013602059/article/details/121225915
这样cuda是可以安装好的。之后,需要写run.sh文件:
export CUDA_HOME="/xx/./cuda/"
cd ./models/dino/ops
python setup.py install
sbatch run.sh,提交运行,发现能够正确安装,可喜可贺。
并且,最关键的,自己的代码能够跑起来了。
总结:整个过程,虽然前面浪费了很多时间,但是还是了解了很多工具。