本项目是作者在安装Maskrcnn/Faster-rcnn时使用高版本torch 遇到的THC.h的错误总结
问题:THC相关的包很多都在pytorch更新的过程中被抛弃了,导致很多.cu文件在安装依赖项时出现了不匹配的问题
fatal error: THC/THC.h: No such file or directory
在/maskrcnn_benchmark/csrc/cuda文件夹中的所有以.cu结尾的代码文件中删除了下述头文件:
#include <THC/THC.h>
并且把所有的:
THCudaCheck(cudaGetLastError());
替换成:
AT_CUDA_CHECK(cudaGetLastError());
“THCudaCheck“ is undefined
将所有文件中的:
THCudaCheck
替换成
C10_CUDA_CHECK
"THCCeilDiv" is undefined
将所有文件中的:
THCCeilDiv
替换成:
std::min
例如:
dim3 grid(std::min(THCCeilDiv(output_size, 512L), 4096L));
替换
dim3 grid(std::min(((int)(output_size) + 512 -1) / 512, 4096));
THCudaMalloc、THCudaFree THCState undefined
在更新过程中pytorch不再需要malloc和free,也自然不需要state用于帮助申请空间
在使用THCudaMalloc、THCudaFree THCState的文件中添加头文件:
#include <ATen/cuda/ThrustAllocator.h>
注释掉THCState:
THCState *state = at::globalContext().lazyInitCUDA();
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);
module ‘torch._six‘ has no attribute ‘PY3‘
找到保存文件
maskrcnn_benchmark\utils\imports.py
查看确定导入了PY3
找到site-packages\torch\_six.py文件 ( 是你调用的torch )
将下述代码替换掉之前的代码
import math
import sys
inf = math.inf
nan = math.nan
string_classes = (str, bytes)
PY37 = sys.version_info[0] == 3 and sys.version_info[1] >= 7
至此,我的问题已经解决,如果你的问题还没有解决,可以通过减低torch版本来处理
本文是通过从网上搜索多个博客拼接而成,在此感谢:
identifier “THCudaCheck“ is undefined 的解决方法-CSDN博客
提供的相应工作!