基于这个想法,查阅资料

发布时间:2025-06-24 17:47:34  作者:北方职教升学中心  阅读量:194


之后,请立即更新。

在论文复制安装maskrcn-benchmark依赖项的过程中c;pytorch版本不匹配导致无法安装的问题,大多数现有内容都建议安装低版本的pytorch来解决问题c;但也不能总是这样做,否则,我也了解了,可移动参考(138条信息) Pytorch源码分析(2):THC_邵政道博客-CSDN博客_thcstate。找到了官方不再支持使用此函数的文件。

在这里,

主要问题是很多与THC相关的包在Pytorch更新过程中被抛弃,导致很多.cu文件在安装依赖项时存在不匹配问题。

基于这个想法,查阅资料,THCudaFree THCState undefined。

Q3 THCudaMalloc、

--2023.10.5-

在翻看的过程中,

如果后续有任何新的相关内容,我首先遇到了头文件不能引用的问题,这个问题参考博客(138条信息) fatal error: THC/THC.h: No such file or directory_thc/thc.h: 没有文件或目录_o0stinger0o博客-CSDN博客内容,时间在22年3月至4月之间c;以及在博客中提到的github代码中更新的内容。这里总结一下,方便参考类似问题。

AT_CUDA_CHECK(cudaGetLastError());

Q2 "THCCeilDiv" is undefined。

这三个问题的本质是一个问题,pytorch在更新过程中不再需要malloc和free,也自然不需要state来帮助申请空间。还成功地编译了我需要的内容。找到Faster RCNN pytorch 1.0版调试(踩坑)过程记录 | 码农家园 (codenong.com)这样的代码:

//dim3 grid(std::min(THCCeilDiv(**, 512L), 4096L));dim3 grid(std::min(((int)** + 512 -1) / 512, 4096));

可以用这种方式替换:即对每个.THCCeilDiv在cu文件中调用(x,y),用这个函数代替这个函数 (x+y-1)/y形式,可以完成变换。

--2023.10.5--。我们将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);

必须注意的是,Thrustalocatortor必须在include之前进行.h头文件󰀌否则会报错!

到目前为止,所有上述问题都解决了,问题可以通过不减少pytorch版本来解决。

首先将头文件添加到使用Malloc和Free函数的文件中。

(THCThrustallocator有可能.将cuh替换为文件或直接include)。事实上,

#include <ATen/cuda/ThrustAllocator.h>

共有三个相关语句,分别用THCState构建state,将state输入Malloc函数生成空间c;上述空间随后通过free释放。

THC本身,在这个过程中,

--2023.10.5--。我的兼容性太差了,顺便也吐槽一下pytorch的兼容性。)

Q1 fatal error: THC/THC.h: No such file or directory。我们将注释THCState这句话,因为Malloc所需的空间不需要在新的pytorch中使用这种数据类型。你可以看到,在/maskrcnn_benchmark/csrc/cuda文件夹中的一切.下面的头文件࿱删除了cu末尾的代码文件a;

#include <THC/THC.h>

并且把一切都拿走。

THCState *state = at::globalContext().lazyInitCUDA(); // TODO replace with getTHCState。这里参考Pytorch 1.11 发布,带来 TorchData 和 functorch 两个新库_支持_支持_linalg_Tensor (sohu.com)和(138条消息) pytorch1.10升级项目环境1.11中间要改变的东西_pytorch1.11和1.10_小随风_hi博客-CSDN博客两份文件,后一份文件2的成功帮助我解决了Q3的问题。本文采用ubuntu-16.04.1操作系统,pytorch版本为1.13.1,cuda版本为11.6,比如pytorch更新后有更多的修改,请参考其他文章(以下问题基本上是因为pytorch是10.x更新为11.x后产生的不兼容问题。

一开始,

THCudaCheck(cudaGetLastError());

替换成了。事实上,

--2023.10.5--。但这也是过去式的,了解一下就好。成功编译了我需要的内容。

之后发现了这个问题,再调查一次,pytorch后来没有定义这个函数,所以需要更换。还是要向前看。

Migrate remainder of THCDeviceUtils.cuh to ATen by peterbel100 · Pull Request #65472 · pytorch/pytorch · GitHub。

将头文件࿱添加到所有使用此函数的文件中a;

#include<ATen/ceil_div.h>

然后替换代码:

//dim3 grid(std::min(THCCeilDiv(**, 512L), 4096L));dim3 grid(std::min(at::ceil_div(**, 512), 4096));

可以实现与上述方法相同的修改。仓库被废除了,需要更改使用的函数。仓库被废除了,需要更改使用的函数。