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

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

本文中使用ubuntu-16.04.1操作系统,pytorch版本为1.13.1,cuda版本为11.6,如pytorch更新后有更多的修改,请参阅其他文章。

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代码中更新的内容。可以看到,代码中删除了头文件:

#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的形式,即可完成变换。

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。不过这个也是过去式了,了解下就好了。还是要向前看的。

若后续还有什么新的相关内容再更新一下子吧。

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

  1. [Debug] Pytorch 版本问题 THC/THC.h: No such file or directory

    Pytorch 版本问题 THC/THC.h: No such file or directory 该问题发生于安装c语言扩展时. 这个问题我经常遇见,也是因为我之前不关心pytorch版本造成的坏习 ...

  2. PointTransformer编译pointops_cuda报错fatal error: THC/THC.h: No such file or directory

    错误信息 Ubuntu 20.04 CUDA 11.6 PyTorch 1.13.0 尝试运行PointTransformer代码, 编译pointops_cuda的时候报错: > py set ...

  3. 关于THC/THC.h: No such file or directory解决办法

    最近在跑FCOS代码时,在最后一步总是出现 fatal error: THC/THC.h: No such file or directory 百度,谷歌全找了一遍,最后发现时pytorch在最新的版 ...

  4. colab中遇到“THC/THC.h: No such file or directory”的解决办法

    若在运行colab是遇到如下问题 fatal error: THC/THC.h: No such file or directory 问题原因:pytorch在高版本(1.11以后)将THC/THC. ...

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

    笔者在配置训练环境,编译cu文件时出现了这个错误 fatal error: THC/THC.h: No such file or directory 查询解决方案后其他答主给出的解决办法是pytorc ...

  6. nms_rotated编译出错fatal error: THC/THC.h: No such file or directory

    问题描述: 使用 python setup.py develop #or "pip install -v -e ." 编译nms_rotated时出错: fatal error: ...

  7. 【问题解决】Android JDK版本不匹配导致崩溃踩坑记录

    [问题解决]Android JDK版本不匹配导致崩溃踩坑记录 部分机型反馈崩溃问题 谷歌回复与解决方案 Android打包脱糖操作 对比与排查 总结 前几天同事遇到一个非常诡异的报错,紧急处理后,趁着 ...

  8. 在Jetson Xavier NX上安装torchvision编译报错:fatal error: libavcodec/avcodec.h: No such file or directory

    文章目录: 1 问题原因说明 2 解决方法 1 问题原因说明 1.尝试安装torchvision 在Jetson NX设备上安装torch的版本是1.6.0版本,对应安装torchvision版本应该 ...

  9. linux 内核编译 错误 fatal error: linux/compiler-gcc6.h: No such file or directory

    在交叉编译i.MX6UL的Kernel代码时出现这个错误 CHK include/config/kernel.release  Using .. as source for kernel  GEN . ...

最新文章

  1. 【译】CSS动画 vs JS动画
  2. C语言与C++ 中bool关键字的矛盾解决
  3. 剑指offer:调整数组顺序使奇数位于偶数前面
  4. bidirectional pathtracing算法学习
  5. 压铸行业龙头广东鸿图携手用友U9实现数智化升级
  6. 华为p40pro怎么用鸿蒙,数码知识:华为p40pro是鸿蒙系统吗系统版本
  7. 使用LIstView和自定义Adapter完成列表信息显示
  8. TCP协议中的三次握手和四次挥手(图解)【转】
  9. DHCP Snooping,Dynamic ARP Inspection实现
  10. paip.Adblock屏蔽规则保存位置以及修理恢复
  11. JS 实现打印二维码图片
  12. 阿里云域名解析详细步骤讲解
  13. 破解 WiFi,获取 WiFi 密码
  14. 【P28】Enjoy The jFET 超简分立耳放
  15. Oracle Database 12c Security - 13. An Applied Approach to Multitenancy and Cloud Security
  16. ZOJ:Z1085 珠心算测验(加强版)
  17. 示波器实现全自动测试
  18. Arthas实践使用
  19. fastdfs java客户端 下载_FastDFS java客户端文件上传demo
  20. minecraft 服务器修改器,【1.6.2】Minecraft內置修改器TMI(包含整合包)

热门文章

  1. 超级计算机英语演讲稿,英语演讲稿范文
  2. caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-下篇--caffe学习(7)
  3. Druid+Oracle连接超时关闭问题
  4. Jenkins的安装、部署、启动(完整教程)
  5. 话说,姚贝娜去世为何会引起轰动
  6. 高级PHP程序员应该掌握哪些技术?
  7. 2020年高教社杯全国大学生数学建模竞赛C题 第三问详细解答+代码
  8. linux管理员默认名,administrator怎么改名字?administrator默认密码是多少
  9. 深入理解C语言指针类型
  10. 什么是微服务测试终于有人讲明白了