pytorch版本不匹配导致的THC.h: No such file or directory 、THCCudaMalloc not defined等问题解决方案

这篇具有很好参考价值的文章主要介绍了pytorch版本不匹配导致的THC.h: No such file or directory 、THCCudaMalloc not defined等问题解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在论文复现安装maskrcnn-benchmark依赖项的过程中,遇见了pytorch版本不匹配导致的无法安装的问题,现存的大多数内容都建议安装低版本的pytorch以解决问题,但也不能总是这么干,不然自己这兼容性也太差了,顺便也吐槽一下pytorch的兼容性问题。在此总结一下,方便遇到相似问题进行参考。

主要遇到的问题在于与THC相关的包很多都在pytorch更新的过程中被抛弃了,导致很多.cu文件在安装依赖项时出现了不匹配的问题。

本文中使用ubuntu-16.04.1操作系统,pytorch版本为1.13.1,cuda版本为11.6,如pytorch更新后有更多的修改,请参阅其他文章。(以下问题基本是由于pytorch由10.x更新为11.x后产生的不兼容问题。)

Q1 fatal error: THC/THC.h: No such file or directory

开始时首先遇到了头文件无法引用的问题,这个问题参考了博客(138条消息) fatal error: THC/THC.h: No such file or directory_thc/thc.h: 没有那个文件或目录_o0stinger0o的博客-CSDN博客的内容,时间在22年3月-4月之间,以及博客中提到的github代码中更新的内容。

可以看到,在/maskrcnn_benchmark/csrc/cuda文件夹中的所有以.cu结尾的代码文件中删除了下述头文件:

#include <THC/THC.h>

并且把所有的

THCudaCheck(cudaGetLastError());

替换成了

AT_CUDA_CHECK(cudaGetLastError());

Q2 "THCCeilDiv" is undefined

之后又找到出现了这个问题,再调查一番,发现pytorch后来没有对这个函数的定义了,因此需要进行更换。

基于这样的想法,查阅资料找到Faster RCNN pytorch 1.0版调试(踩坑)过程记录 | 码农家园 (codenong.com)中这样的一段代码:


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

可以用这样的方式进行替换:即对每个.cu文件中调用THCCeilDiv(x,y)的地方,都把这个函数换成 (x+y-1)/y的形式,即可完成变换。

--2023.10.5--

在翻看的过程中找到了官方对此函数不再支持使用的文档。

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

在所有使用此函数的文件中加入头文件:

#include<ATen/ceil_div.h>

随后进行代码替换:


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

即可实现与上面方法相同的修改。

--2023.10.5--

Q3 THCudaMalloc、THCudaFree THCState undefined

这三个问题本质是一个问题,就是在更新过程中pytorch不再需要malloc和free,也自然不需要state用于帮助申请空间。这里参考了PyTorch 1.11 发布,带来 TorchData 和 functorch 两个新库_支持_linalg_Tensor (sohu.com)和(138条消息) 项目环境由pytorch1.10升级1.11中间要改的东西_pytorch1.11和1.10_小随风_hi的博客-CSDN博客两个文档,其中后一个文档的2成功帮助我解决了Q3这个问题。其实就是库废掉了,需要换一下使用的函数。

首先在用到Malloc和Free函数的文件中加入头文件

(有可能需要将THCThrustAllocator.cuh替换为该文件或直接include)


#include <ATen/cuda/ThrustAllocator.h>

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

此处我们注释掉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);

注意一定要在最前面include一下ThrustAllocator.h头文件,否则会报错!

至此,上述问题全部解决,没有降低pytorch版本即可解决问题。我需要的内容也成功编译。

对于THC本身,在这个过程中我也了解了一下,可移步参考(138条消息) PyTorch源码浅析(2):THC_邵政道的博客-CSDN博客_thcstate。不过这个也是过去式了,了解下就好了。还是要向前看的。

若后续还有什么新的相关内容再更新一下子吧。文章来源地址https://www.toymoban.com/news/detail-417395.html

到了这里,关于pytorch版本不匹配导致的THC.h: No such file or directory 、THCCudaMalloc not defined等问题解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决“VS 报No such file or directory“问题

        今天在使用VS2015的calcOne工程,将工程由Debug版本改为Release版本,编译时弹出\\\"无法打开包括文件: “addFunc.h”: No such file or directory\\\"错误,如图(1)所示: 图(1) Release版本报\\\"No such file or directory\\\"错误     但是,将工程由Release版本改回到Debug版本,却编译成功。从而判断是

    2023年04月11日
    浏览(79)
  • Linux中提示No such file or directory解决方法

    说明: 在linux下,./xxx.sh执行shell脚本时会提示No such file or directory。但shell明明存在,为什么就是会提示这个呢? 这种其实是因为编码方式不对,如你在win下编辑sh,然后直接复制到linux下面 实现: 有2种方法可以解决这个。 1)在Windows下转换: 利用一些编辑器如UltraEdit或Edit

    2024年02月14日
    浏览(37)
  • NXP MCUXPresso - .h: No such file or directory

    在尝试迁移 openpnp - Smoothieware project 从gcc命令行 + MRI调试方式 到NXP MCUXpresso工程. 快摸进门了. 按照C++工程编译的. 头文件路径都加好了, 都是用的工作区的相对路径. 文件也都在指定的位置. 但是编译时, 找不到头文件, 报错如下: 这种报错分2种情况: 文件在不在? 告诉编译器头文

    2024年02月05日
    浏览(35)
  • cat 查看文件时报错No such file or directory

    在平台上生成一个文件,用ls 查看发现文件已经存在了,并且是可执行文件;为什么还是打不开呢? --------- 后面发现是使用的集群不一样,在大集群可以做上述的查看操作,但实际存储文件的是小集群,大集群可能是没有执行小集群文件的相关权限,这时候需要查看文件内

    2024年02月12日
    浏览(34)
  • Gitee Clone:No such file or directory问题解决

    使用TortoiseGit ssh克隆gitee仓库报以下错: 第一步,检查SSH公钥是否配置成功,配置方法参考官方SSH 公钥设置教程 第二步,使用Git Bash(使用Windows PowerShell或者CMD会出现乱码)测试SSH配置成功 成功会有以下提示: 第三步,更换SSH Client 使用TortoiseGit克隆时,如果到这一步还克隆失

    2024年02月03日
    浏览(38)
  • openssl/bn.h: No such file or directory

    ubuntu centos

    2024年02月14日
    浏览(33)
  • 已解决Python “No such file or directory“问题报错

    本文摘要:本文已解决Python “No such file or directory“ 的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云

    2024年02月03日
    浏览(51)
  • FileNotFoundError: [Errno 2] No such file or directory:XXXX

    今天在运行readme的时候出现了一个错误“”:  File \\\"/mnt/d/Pycharm_workspace/pretrain/SMILES-BERT/fairseq/data/indexed_dataset.py\\\", line 64, in read_index     with open(index_file_path(path), \\\'rb\\\') as f: FileNotFoundError: [Errno 2] No such file or directory: \\\'/datasets/outputs/train.idx\\\' 然后我去看文件是否存在,是存在的,这

    2024年02月01日
    浏览(39)
  • docker执行报错:no such file or directory: unknown

    在linux下编译的golang程序放到docker的busybox镜像里无法执行,显示报错信息: exec: No such file or directory 在Docker化的今天, 我们经常需要静态编译一个Go程序,以便方便放在Docker容器中。 即使你没有引用其它的第三方包,只是在程序中使用了标准库 net ,你也会发现你编译后的程

    2024年02月07日
    浏览(40)
  • 【docker】docker启动报错no such file or directory

    根据自己构建的镜像启动docker容器日志打印出现,如下: 修改厚再次构建镜像即可

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包