当前位置:   article > 正文

RuntimeError: Error compiling objects for extension报错及fatal error: THC/THC.h: No such file or direct_raise runtimeerror(message) from e runtimeerror: e

raise runtimeerror(message) from e runtimeerror: error compiling objects for


在配置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博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/81907?site
推荐阅读
相关标签
  

闽ICP备14008679号