导入Pointnet2_ops_lib后GPU加载触发Segmentation Fault求助
导入Pointnet2_ops_lib后GPU加载张量触发Segmentation Fault的问题
问题情况
使用Pointnet2模型的加速扩展库pointnet2_ops_lib,导入该库后,任何将模型或张量加载到GPU的操作都会触发Segmentation fault(core dumped)错误。
测试代码
import os import torch from pointnet_ops import pointnet2_utils os.environ["CUDA_VISIBLE_DEVICES"] ="0" a = torch.tensor([1,2]) a = a.cuda() print(a.device)
该库通过C++/CUDA扩展实现加速,安装方式为执行python setup.py install。
运行错误
segmentation fault(core dumped)
cuda-gdb调试信息
Starting program: /home/xxx/anaconda3/envs/py37/bin/python test.py [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [Detaching after fork from child process 23757] [New Thread 0x7fff8a725700 (LWP 23796)] [New Thread 0x7fff89f24700 (LWP 23797)] [New Thread 0x7fff85723700 (LWP 23798)] [New Thread 0x7fff82f22700 (LWP 23799)] [New Thread 0x7fff80721700 (LWP 23800)] [New Thread 0x7fff7df20700 (LWP 23801)] [New Thread 0x7fff7b71f700 (LWP 23802)] [New Thread 0x7fff78f1e700 (LWP 23803)] [New Thread 0x7fff7671d700 (LWP 23804)] [New Thread 0x7fff73f1c700 (LWP 23805)] [New Thread 0x7fff7171b700 (LWP 23806)] [New Thread 0x7fff6ef1a700 (LWP 23807)] [New Thread 0x7fff6c719700 (LWP 23808)] [New Thread 0x7fff69f18700 (LWP 23809)] [New Thread 0x7fff67717700 (LWP 23810)] [New Thread 0x7fff64f16700 (LWP 23811)] [New Thread 0x7fff62715700 (LWP 23812)] [New Thread 0x7fff5ff14700 (LWP 23813)] [New Thread 0x7fff5d713700 (LWP 23814)] [New Thread 0x7fff5af12700 (LWP 23815)] [New Thread 0x7fff58711700 (LWP 23816)] [New Thread 0x7fff55f10700 (LWP 23817)] [New Thread 0x7fff5370f700 (LWP 23818)] [New Thread 0x7fff50f0e700 (LWP 23819)] [New Thread 0x7fff4e70d700 (LWP 23820)] [New Thread 0x7fff4bf0c700 (LWP 23821)] [New Thread 0x7fff4970b700 (LWP 23822)] [New Thread 0x7fff46f0a700 (LWP 23823)] [New Thread 0x7fff44709700 (LWP 23824)] [New Thread 0x7fff41f08700 (LWP 23825)] [New Thread 0x7fff3f707700 (LWP 23826)] [New Thread 0x7fff3cf06700 (LWP 23827)] [New Thread 0x7fff3a705700 (LWP 23828)] [New Thread 0x7fff37f04700 (LWP 23829)] [New Thread 0x7fff35703700 (LWP 23830)] [New Thread 0x7fff32f02700 (LWP 23831)] [New Thread 0x7fff30701700 (LWP 23832)] [New Thread 0x7fff2df00700 (LWP 23833)] [New Thread 0x7fff2d6ff700 (LWP 23834)] [Detaching after fork from child process 23836] [New Thread 0x7fff1da72700 (LWP 23840)] [New Thread 0x7fff1d271700 (LWP 23841)] [New Thread 0x7fff1ca70700 (LWP 23842)] Thread 1 "python" received signal SIGSEGV, Segmentation fault. 0x00007fff8d85b220 in ?? () from /home/xxx/anaconda3/envs/py37/lib/python3.7/site-packages/torch/lib/libcudart-a7b20f20.so.11.0
环境配置
cuda:11.1 torch:1.12.1+cu113(也曾尝试cu111版本,故障依旧)
解决建议
- 严格匹配CUDA与PyTorch版本:将PyTorch切换为与系统CUDA11.1完全匹配的版本(如
torch1.12.1+cu111),然后重新从源码编译pointnet2_ops_lib,编译前确保环境变量CUDA_PATH指向系统CUDA11.1路径,避免版本不兼容导致的CUDA上下文错误。 - 调整环境变量设置顺序:将
os.environ["CUDA_VISIBLE_DEVICES"] ="0"放在所有导入语句之前,避免CUDA上下文初始化冲突,修改后的测试代码如下:
import os os.environ["CUDA_VISIBLE_DEVICES"] ="0" import torch from pointnet_ops import pointnet2_utils a = torch.tensor([1,2]) a = a.cuda() print(a.device)
- 适配GPU架构编译:修改pointnet2_ops_lib的
setup.py,添加与你的GPU型号匹配的CUDA架构编译参数。例如Ampere架构(RTX30/40系列)需添加-gencode=arch=compute_80,code=sm_80,避免因架构不兼容导致的内存访问错误。 - 降级PyTorch版本:尝试使用兼容性更稳定的旧版本PyTorch,如
torch1.9.0+cu111,该版本对老CUDA扩展的支持更好。 - 检查NVIDIA驱动版本:确保驱动版本不低于CUDA11.1要求的最低版本(455.23.05),驱动版本不足会导致CUDA上下文初始化失败,触发段错误。
内容的提问来源于stack exchange,提问作者name555difficult
相关产品推荐
相关产品推荐

