pytorch版本不匹配导致的THC.h: No such file or directory 、THCCudaMalloc not defined等问题解决方案
在进行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等问题解决方案相关推荐
- [Debug] Pytorch 版本问题 THC/THC.h: No such file or directory
Pytorch 版本问题 THC/THC.h: No such file or directory 该问题发生于安装c语言扩展时. 这个问题我经常遇见,也是因为我之前不关心pytorch版本造成的坏习 ...
- 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 ...
- 关于THC/THC.h: No such file or directory解决办法
最近在跑FCOS代码时,在最后一步总是出现 fatal error: THC/THC.h: No such file or directory 百度,谷歌全找了一遍,最后发现时pytorch在最新的版 ...
- 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. ...
- fatal error: THC/THC.h: No such file or directory
笔者在配置训练环境,编译cu文件时出现了这个错误 fatal error: THC/THC.h: No such file or directory 查询解决方案后其他答主给出的解决办法是pytorc ...
- 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: ...
- 【问题解决】Android JDK版本不匹配导致崩溃踩坑记录
[问题解决]Android JDK版本不匹配导致崩溃踩坑记录 部分机型反馈崩溃问题 谷歌回复与解决方案 Android打包脱糖操作 对比与排查 总结 前几天同事遇到一个非常诡异的报错,紧急处理后,趁着 ...
- 在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版本应该 ...
- 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 . ...
最新文章
- 【译】CSS动画 vs JS动画
- C语言与C++ 中bool关键字的矛盾解决
- 剑指offer:调整数组顺序使奇数位于偶数前面
- bidirectional pathtracing算法学习
- 压铸行业龙头广东鸿图携手用友U9实现数智化升级
- 华为p40pro怎么用鸿蒙,数码知识:华为p40pro是鸿蒙系统吗系统版本
- 使用LIstView和自定义Adapter完成列表信息显示
- TCP协议中的三次握手和四次挥手(图解)【转】
- DHCP Snooping,Dynamic ARP Inspection实现
- paip.Adblock屏蔽规则保存位置以及修理恢复
- JS 实现打印二维码图片
- 阿里云域名解析详细步骤讲解
- 破解 WiFi,获取 WiFi 密码
- 【P28】Enjoy The jFET 超简分立耳放
- Oracle Database 12c Security - 13. An Applied Approach to Multitenancy and Cloud Security
- ZOJ:Z1085 珠心算测验(加强版)
- 示波器实现全自动测试
- Arthas实践使用
- fastdfs java客户端 下载_FastDFS java客户端文件上传demo
- minecraft 服务器修改器,【1.6.2】Minecraft內置修改器TMI(包含整合包)
热门文章
- 超级计算机英语演讲稿,英语演讲稿范文
- caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-下篇--caffe学习(7)
- Druid+Oracle连接超时关闭问题
- Jenkins的安装、部署、启动(完整教程)
- 话说,姚贝娜去世为何会引起轰动
- 高级PHP程序员应该掌握哪些技术?
- 2020年高教社杯全国大学生数学建模竞赛C题 第三问详细解答+代码
- linux管理员默认名,administrator怎么改名字?administrator默认密码是多少
- 深入理解C语言指针类型
- 什么是微服务测试终于有人讲明白了