遇到了CUDA 的计算架构不支持的情况
首先这个项目所要求的是安装一个非常老的版本的torch 是0.4.1这个非常老旧的torch 是一个甚至小于1.0 版本的上古架构
在安装的时候废了不小时间
最终终于在官网查到了安装这个版本的torch的方法
先前版本的torch下载路径:https://pytorch.org/get-started/previous-versions/
可以看到所支持的版本支持三种CUDA版本

然后我就尝试了,第一个版本进行安装
conda install pytorch=0.4.1 cuda90 -c pytorch
过程中出现了明明已经显示安装成功了,但是还是显示没有安装的结果


很明显是因为conda 包管理的原因让其无法在 pip中显示并且无法调用
所以尝试使用pip 进行安装 这里利用上了我之前写过的博客使用加速的情况下手动下载torch的whl文件然后手动安装文件,最终安装成功

验证结果:

至于为什么我清楚0.4.1的torch 对应0.2.1 的torchvision是因为查到大量网页得到的
运行编译文件
发现出现了第一个比较抽象的报错:

可以发现是说 nvcc fatal :不支持的计算结构 compute_30 去查找是哪里定义了这个参数,

定位到了具体位置后发现,这个地方是写CUDA_ARCH那么就去查找 CUDA_ARCH是什么意思 猜测应该是架构的意思
然后,发现了这个网页:
https://developer.nvidia.com/cuda-gpus

左边的意思就是当前芯片的计算性能,这一看给我激动坏了,我的显卡竟然是排名第二的性能,和这么多blackwell架构的芯片的程度不相上下?
在问了AI之后发现,这个compute_30,sm_30 都只带的是当前显卡的计算性能 ,仔细一对比还真是。30系的8.6的性能,而我有12.0
然后就大胆的写下了

然后就输出了大量log:
running build_ext
skipping 'model/utils/bbox.c' Cython extension (up-to-date)
skipping 'pycocotools/_mask.c' Cython extension (up-to-date)
Compiling nms kernels by nvcc...
Including CUDA code.
/home/esheep_coder/PSN-GD-main/lib/model/nms
['/home/esheep_coder/PSN-GD-main/lib/model/nms/src/nms_cuda_kernel.cu.o']
generating /tmp/tmp8f4aey6q/_nms.c
setting the current directory to '/tmp/tmp8f4aey6q'
running build_ext
building '_nms' extension
creating home
creating home/esheep_coder
creating home/esheep_coder/PSN-GD-main
creating home/esheep_coder/PSN-GD-main/lib
creating home/esheep_coder/PSN-GD-main/lib/model
creating home/esheep_coder/PSN-GD-main/lib/model/nms
creating home/esheep_coder/PSN-GD-main/lib/model/nms/src
gcc -pthread -B /home/esheep_coder/miniconda3/envs/psn/compiler_compat -Wl,--sysroot=/ -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -std=c99 -fPIC -DWITH_CUDA -I/home/esheep_coder/miniconda3/envs/psn/lib/python3.6/site-packages/torch/utils/ffi/../../lib/include -I/home/esheep_coder/miniconda3/envs/psn/lib/python3.6/site-packages/torch/utils/ffi/../../lib/include/TH -I/home/esheep_coder/miniconda3/envs/psn/lib/python3.6/site-packages/torch/utils/ffi/../../lib/include/THC -I/usr/local/cuda/include -I/home/esheep_coder/miniconda3/envs/psn/include/python3.6m -c _nms.c -o ./_nms.o -std=c99
In file included from /home/esheep_coder/miniconda3/envs/psn/lib/python3.6/site-packages/torch/utils/ffi/../../lib/include/THC/THCGeneral.h:15,from /home/esheep_coder/miniconda3/envs/psn/lib/python3.6/site-packages/torch/utils/ffi/../../lib/include/THC/THC.h:4,from _nms.c:570:
/usr/local/cuda/include/cusparse.h:434:1: warning: ‘csric02Info_t’ is deprecated: The type
可算没有错误了,既然cuda编译完毕了那么现在开始实现训练过程编译
编译过程错误详解
- 问题1详解
  
错误分析:这个错误是因为 Pillow (PIL) 库缺少 libtiff 依赖。问题在于 Pillow 需要 libtiff 的动态链接库,但在当前环境中找不到。
解决办法:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install libtiff5-dev libtiff5# 或者如果上面的不行,尝试:
sudo apt-get install libtiff-dev
- 问题2详解
Traceback (most recent call last):File "main.py", line 24, in <module>from model.utils.net_utils import weights_normal_init, clip_gradient, samplerFile "/home/esheep_coder/PSN-GD-main/lib/model/utils/net_utils.py", line 10, in <module>from model.roi_crop.functions.roi_crop import RoICropFunctionFile "/home/esheep_coder/PSN-GD-main/lib/model/roi_crop/functions/roi_crop.py", line 4, in <module>from .._ext import roi_cropFile "/home/esheep_coder/PSN-GD-main/lib/model/roi_crop/_ext/roi_crop/__init__.py", line 3, in <module>from ._roi_crop import lib as _lib, ffi as _ffi
ImportError: /home/esheep_coder/PSN-GD-main/lib/model/roi_crop/_ext/roi_crop/_roi_crop.so: undefined symbol: __cudaRegisterFatBinaryEnd
问题原因:这个错误又回到了 CUDA 版本不匹配 的问题。__cudaRegisterFatBinaryEnd 符号缺失表明编译环境和运行环境的 CUDA 版本不一致。
根本原因
之前编译的 .so 文件是用不同版本的 CUDA 编译的,与当前 PyTorch 使用的 CUDA 版本不兼容。
所以要删除之前编译的结果
使用如下办法可以进行删除原先的文件 这个指令可以直接查找.so 文件然后在本地进行编译
解决办法:
find . -name "*.so" -delete
使用这个后所有的后缀的文件都删除了,然后可以重新编译
编译后还是遇到了相同的报错:
(psn) esheep_coder@esheep:~/PSN-GD-main$ sh scripts/train-1-2-fc.sh 
Traceback (most recent call last):File "main.py", line 24, in <module>from model.utils.net_utils import weights_normal_init, clip_gradient, samplerFile "/home/esheep_coder/PSN-GD-main/lib/model/utils/net_utils.py", line 10, in <module>from model.roi_crop.functions.roi_crop import RoICropFunctionFile "/home/esheep_coder/PSN-GD-main/lib/model/roi_crop/functions/roi_crop.py", line 4, in <module>from .._ext import roi_cropFile "/home/esheep_coder/PSN-GD-main/lib/model/roi_crop/_ext/roi_crop/__init__.py", line 3, in <module>from ._roi_crop import lib as _lib, ffi as _ffi
ImportError: /home/esheep_coder/PSN-GD-main/lib/model/roi_crop/_ext/roi_crop/_roi_crop.so: undefined symbol: __cudaRegisterFatBinaryEnd
只有一种可能就是当前的cuda版本和torch做默认使用cuda版本不一致
那么我们使用下面的代码进行验证当前的torch的cuda版本 和当前计算机中所安装的cuda版本
(psn) esheep_coder@esheep:~$ python -c "import torch; print('PyTorch version:', torch.__version__); print('CUDA version:', torch.version.cuda)"
PyTorch version: 0.4.1
CUDA version: 9.0.176
(psn) esheep_coder@esheep:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:23:50_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0
那么现在就只剩一条路了,就是重新安装cuda 9.0 版本卸载12.8版本
这么搞就时间复杂喽,要动的东西太多了