RuntimeError: Error compiling objects for extension报错及fatal error: THC/THC.h: No such file or direct


在配置FCOS以及yolov5的项目环境时常常遇到这个问题:RuntimeError: Error compiling objects for extension,尝试在网上直接搜这个问题,很多都是说pytorch和CUDA版本不对应以及其他问题,但是始终没有得到解决,最后尝试细看那一堆错误发现有一句:fatal error: THC/THC.h: No such file or direct,想到之前配另一个代码的环境就是这个问题,当时也是改了很久,然后这次又来,实在害怕再来一次,记录一下。但是错误找的时间有些久,没有及时整理,可能不全,大致就是这样。

关于原因

pytorch在最新的版(1.11)本中将THC/THC.h文件删除了

解决办法

据说降低版本也可以解决这个问题,但是我虽菜要强,所以我决定改代码。如下:

头文件改动如下,具体的不太清楚,可以看参考链接

// #include <THC/THC.h>
// #include <THC/THCDeviceUtils.cuh>
#include <ATen/ATen.h>
#include <ATen/cuda/CUDAContext.h>
#include <ATen/cuda/ThrustAllocator.h>
#include "ATen/cuda/DeviceUtils.cuh"
#include "ATen/ceil_div.h"

将所有待编译的源文件中作如下修改:

‘AT_CHECK’全部替换为‘TORCH_CHECK’

注释掉THCState这句话,因为在新的pytorch中不需要使用该数据类型来生成Malloc所需空间
THCState *state = at::globalContext().lazyInitCUDA(); // TODO replace with getTHCState

将THCudaMalloc按照下文的形式修改(旧函数第二个参数作为新函数的唯一参数

//mask_dev = (unsigned long long*) THCudaMalloc(state, boxes_num * col_blocks * sizeof(unsigned long long));

mask_dev = (unsigned long long*)c10::cuda::CUDACachingAllocator::raw_alloc(boxes_num * col_blocks * sizeof(unsigned long long));

THCudaFree:

 
// THCudaFree(state, mask_dev);
c10::cuda::CUDACachingAllocator::raw_delete(mask_dev);

THCeilDiv:THCeilDiv函数和THC/THCDeviceUtils.cuh头文件被弃用,用at::ceil_div和ATen/ceil_div.h头文件

错误

FCOS还有一个错误:

fatal error: cpu/vision.h: No such file or directory

继续改

遇到#include "cpu/vision.h"报错,只要把前面的"cpu/"删去即可,变成#include "vision.h"

(源于FCOS安装完全踩雷指北 - 知乎评论区)

参考

pytorch版本不匹配导致的THC.h: No such file or directory 、THCCudaMalloc not defined等问题解决方案_駋駋的博客-CSDN博客

项目环境由pytorch1.10升级1.11中间要改的东西_thcceildiv_小随风_hi的博客-CSDN博客

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值