Maskrcnn/Faster-rcnn安装过程中使用高版本torch

本项目是作者在安装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版本来处理


本文是通过从网上搜索多个博客拼接而成,在此感谢:

Maskrcnn/Faster-rcnn依赖项安装过程中THC.h: No such file or directory/THCeilDiv Undefined/分配内存空间等问题的解决方案-CSDN博客

identifier “THCudaCheck“ is undefined 的解决方法-CSDN博客

[问题解决]module ‘torch._six‘ has no attribute ‘PY3‘_attributeerror: module 'torch._six' has no attribu-CSDN博客

提供的相应工作!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值