解决DCNv2不能使用高版本pytorch编译的问题

可变形卷积网络GitHub - CharlesShang/DCNv2: Deformable Convolutional Networks v2 with Pytorch代码已经出来好几年了,虽然声称"Now the master branch is for pytorch 1.x",实际上由于pytorch自1.11版开始发生了很大变化,原来基于C实现的THC封装实现的调用cuda、cudnn和cublas的API(只能用NVIDIA的GPU)被基于C++实现的ATen和c10里的API代替(ATen通过vulkan实现支持NVIDIA以外的GPU, ATen代码在https://github.com/pytorch/pytorch/tree/main/aten/src/ATen),THC下的文件基本被删掉了,所以编译DCNv2时会遇到很多错误。

首先肯定是 error: THC/THC.h: No such file or directory 这样的错误,因为上面图中可以看到THC目录下已经没有这个文件了。

其次,DCNv2代码里调用的THC相关的API都必须使用ATen或c10的API替代,例如THCState_getCurrentStream()、THCCeilDiv()、THCudaCheck()、THCudaMalloc()、THCudaFree(),分别使用at::cuda::getCurrentCUDAStream()、at::ceil_div()、AT_CUDA_CHECK()、c10::cuda::CUDACachingAllocator::raw_alloc()、c10::cuda::CUDACachingAllocator::raw_delete(),否则编译时调用这些API的地方肯定是undefined错误。使用到THCState相关的地方都注释掉。

第三,THC里实现的cublas相关封装API需要使用ATen的cublas相关API替代,THCudaBlas_SgemmBatched()需要使用cublasCreate_v2() + cublasSgemmBatched() + cublasDestroy_v2(),而看起来似乎是和THCudaBlas_SgemmBatched()()0对应的at::cuda::blas::gemmBatched()不能用(不明白ATen这里为何是这样)!

THCudaBlas_Sgemm()和HCudaBlas_Sgemv()则分别使用at::cuda::blas::gemm()和at::cuda::blas::gemv()替代即可。

这个DCNv2_latest GitHub - lucasjinreal/DCNv2_latest: DCNv2 supports decent pytorch such as torch 1.5+ (now 1.8+)虽然修改代码实现了可以使用pytorch 1.11编译,但是把DCNv2里使用cublas实现的部分全部改用ATen的Tensor运算API改写了,相当于意译吧,是否正确和性能怎样没有去验证过,有兴趣的可以试试,我这个改写是尽量和DCNv2的原始实现保持一致,保持了使用cublas运算。

我的代码提交在GitHub - CharlesShang/DCNv2: Deformable Convolutional Networks v2 with Pytorch

顺便记录一下遇到的其他问题:

1.出现警告could not find ninja,安装ninja: sudo apt-get install ninja

2.出现错误:No such file or directory: ':/usr/local/cuda:/usr/local/cuda/bin/nvcc'

这个原因是ninja编译过程中需要,实验了一下,只有当你同时安装了多个cuda版本时出现,但是修改ninja的build配置文件没用!需要强制设置CUDA_HOME环境变量指定使用哪个版本的cuda:

export CUDA_HOME=/usr/local/cuda-11.4

在我的环境里,实验了一下,如果写成

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.4

也不行会照样报上面的找不到nvcc的错误!应该是ninja的代码实现有毛病。

相关推荐
海浪仙人掌4 小时前
应收账款分析如何操作?应收账款分析有哪些注意事项?
数据库·人工智能
东方佑4 小时前
元可塑性循环单元(Meta-RU)与 GRU 的对比研究与混合设计
人工智能·深度学习·gru
Elastic 中国社区官方博客4 小时前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
LlmCraft|大模型工程实践4 小时前
08 预训练语言模型:BERT 与 GPT
人工智能·深度学习·nlp
feasibility.4 小时前
ABot-World-0:当一块 RTX 5090 能编织无限世界——交互式世界模型的高德解法
人工智能·aigc·视频·地图·具身智能·英伟达·世界模型
leoZ2314 小时前
第 6 篇:SchemaForm 渲染器核心实现
前端·javascript·vue.js·人工智能·神经网络·机器学习·自然语言处理
故七月4 小时前
优胜劣汰·动态赋能——锦邻创享OPC社区的考核管理与退出机制
大数据·人工智能
枫叶林FYL4 小时前
【群体智能集群控制工程实践】第10章 无人舰队核心功能实现
大数据·人工智能·算法
昵称画5 小时前
POC验证怎么设计用例?不走过程的实操要点
大数据·数据库·人工智能·低代码·excel
2601_967212725 小时前
新一代电源轨道系统技术甄别维度与行业技术路线分析
大数据·网络·人工智能