ModuleNotFoundError: No module named ‘Multiscaledeformableattention‘

news/2024/11/24 13:28:56/

 在实现DINO Detection方法时,我们可能会遇到以上问题。因为在DeformableAttention模块,为了加速,需要自己去编译这个模块。

如果你的环境变量中能够找到cuda路径,使用正确的torch版本和cuda版本的话,这个问题很容易解决。(ps:一般情况下,cuda会安装在/usr/local文件夹下,但是很多情况下,虽然cuda可以使用,但是你可能就是无法找到cuda路径)

但是,如果你在一个集群中,可能找不到cuda路径,那么编译起来就困难多了。

# 找cuda环境
nvcc -Vwhereis 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:

 这个库在网上没有找到,所以想到原来我们用来编译的服务器上应该有,搜索之后找到了,然后将它放在了与egg文件相同的目录下,即./envs/python39/lib/python3.9/site-packages对应的文件夹下,但是测试发现系统并没有直接去这个目录下找这个库文件,还是提示找不到。思考是,在源服务器编译时,这个依赖库的路径写死了,写到了so中,还是无法解决问题。

-------------------------------------------------------------------

痛定思痛,决定看看没有root权限,来安装cuda,根据自己torch安装的版本,确定cuda版本,去官网下载run file,然后安装过程中,不选择驱动安装,设置自己的路径(包括cuda-toolkit路径和lib路径),进行安装。可参考:https://blog.csdn.net/u013602059/article/details/121225915

这样cuda是可以安装好的。之后,需要写run.sh文件:

export CUDA_HOME="/xx/./cuda/"
export TORCH_CUDA_ARCH_LIST="8.0"
cd ./models/dino/ops
python setup.py install

这里需要注意:TORCH_CUDA_ARCH_LIST的值与算力有关,TITAN服务器,可以设置8.0,如果时Tesla V100,应该是7.0,否则即使能够编译成功,会报如下错误:

 并且,训练过程完全无效。。。

这里提供算力查询网址:https://developer.nvidia.com/cuda-gpus#compute

 

 

按照自己的服务器GPU硬件条件 去设置就行。

再然后,sbatch run.sh,提交运行,发现能够正确安装,可喜可贺。

并且,最关键的是,自己的代码能够跑起来了。

总结:整个过程,虽然前面浪费了很多时间,但是还是了解了很多工具。 遇到问题一步一步解决。


http://www.ppmy.cn/news/68499.html

相关文章

C++的string类使用介绍

string类 1.为什么要学习string类?1.1.C语言中的字符串1.2. 日常中 2. 标准库中的string类2.2 string类(对于单字节的字符)的常用接口说明①string常见的构造函数②string类对象的容量操作③string类对象的访问以及遍历操作④string类对象的修改操作⑤string类非成员…

《测试开发》测试启蒙

文章目录 测试是什么调试和测试的区别 什么是需求需求的定义需求的特征测试人员眼里的需求是什么如何深入了解需求 测试用例什么是测试用例为什么有测试用例 bug如何描述一个bug如何定义bug的级别bug的生命周期 软件测试的生命周期 👑作者主页:Java冰激凌…

作业 编程读写-一个文件test.txt ,每隔1秒向文件中写入年月日时分秒行 数据。5.12

题目要求:编程读写-一个文件test.txt ,每隔1秒向文件中写入行数据,类似这样: 1, 2007-7-30 15:16:42 2, 2007-7-30 15:16:43 该程序应该无限循环,直到按Ctr1-C中 断程序。 再次启动程序写文件时可以追加到原文件之后,并且序号能够…

Socket请求和Http请求区别和场景

我们在开发过程中遇到http请求和socket请求。大部分前后交互都是通过http请求的方式,那socket请求怎么使用,什么情况下使用呢? 基本概念 http请求:基于http协议的soap协议,常见的http数据请求方式有get和post&#xf…

报表开发组件FastReport Mono v2023.1 - 支持与My Reports Cloud集成

FastReport Mono v2023.1现已推出! 最新版中更新了与 My Reports Cloud 的部分集成、来自 JasperReports 的模板转换器等功能,同时修复了10余处问题,点击下方免费试用哦~ FastReport Mono v2023.1现已推出! 今天将为大家带来FastReport Mono v2023.1更新…

Fastjson 的使用总结

一.JSON 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON建构于两种结构: “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它…

【FMC136】AD9467之4通道 250MSPS 采样率16位AD 采集子卡模块得设计原理图中文资料

板卡概述 FMC136 是一款4 通道250MHz 采样率16 位AD 采集FMC子卡,符合VITA57 规范,可以作为一个理想的IO 模块耦合至FPGA前端,4 通道AD 通过高带宽的FMC 连接器(HPC)连接至FPGA 从 而大大降低了系统信号延迟。该板卡支…

使用 @Autowired 依赖注入时警告不建议使用字段注入

文章目录 字段注入缺点无法注入 final 字段与 Spring 容器耦合度高 构造器注入(Spring 官方推荐)Setter 方法注入 在 Spring 中注入依赖时有字段注入、构造器注入、Setter 方法注入三种注入方式。 字段注入缺点 无法注入 final 字段 在 Spring 2.5 中引…