赞
踩
在配置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博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。