报错信息:

import torch_sparse

返回

OSError: libcusparse.so.10: cannot open shared object file: No such file or directory

背景

根据官方文档安装PYTORCH GEOMETRIC,但是在import torch_sparse这个环节失败了。

翻遍了全网debug依然没能成功解决问题,下面记录一下自己的分析思路。

参考博客,debug网址

水流兄:No module named torch_sparse, 及pytorch-geometric安装

Install error · Issue #43 · rusty1s/pytorch_geometric

Please help me with OSError: libcusparse.so.10: cannot open shared object file: No such file or directory · Issue #1125 · rusty1s/pytorch_geometric

大多都是版本的问题,按照教程和作者的回复,大多都能装好,我也按照教程开始装包:

pip install torch-scatter
pip install torch-sparse  # 这是我出问题的包,其他三个依赖包都能成功import
pip install torch-cluster
pip install torch-spline-conv
pip install torch-geometric

然后开始排查问题。

首先换版本(torch 1.4 1.5 1.7)以及对应的cu101版本全部试遍,换了一台服务器等,均不奏效(排除了版本问题,因为同样的安装方式,其他三个包都能import)

然后再anaconda下的base环境,新建环境均尝试,也都报错。查看一下报错信息:

Python 3.6.12 |Anaconda, Inc.| (default, Sep  8 2020, 23:10:56)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch_sparse
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/home/lzk/anaconda3/envs/kg2text/lib/python3.6/site-packages/torch_sparse/__init__.py", line 12, in <module>library, [osp.dirname(__file__)]).origin)File "/home/lzk/anaconda3/envs/kg2text/lib/python3.6/site-packages/torch/_ops.py", line 105, in load_libraryctypes.CDLL(path)File "/home/lzk/anaconda3/envs/kg2text/lib/python3.6/ctypes/__init__.py", line 350, in __init__self._handle = _dlopen(self._name, mode)
OSError: /usr/local/cuda/lib64/libcusparse.so.10: version `libcusparse.so.10' not found (required by /home/lzk/anaconda3/envs/kg2text/lib/python3.6/site-packages/torch_sparse/_spspmm.so)

证明是libcusparse.so.10出了问题:

顺着路径去找,发现这个东西确实存在:

各种路径都加了,都是按照作者的指示来的:

$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
$ echo $LD_LIBRARY_PATH
>>> /usr/local/cuda/lib64:...$ export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:$DYLD_LIBRARY_PATH
$ echo $DYLD_LIBRARY_PATH
>>> /usr/local/cuda/lib:...

有没有可能是软链的问题?没有可能,因为能上的软链都上了,soso.10so.10.0等等

然后去我的python的包环境下找答案,顺着:

/home/lzk/anaconda3/envs/kg2text/lib/python3.6/site-packages/torch_sparse/__init__.py 

去看源码,发现这是一个torch加载library的命令:

既然说找不到libcusparse.so.10,那就先试试直接加载这个so文件有没有问题(直接复制torch_sparse/__init__.py 里面尝试)

此时定位问题出在_spspmm.so间接加载libcusparse.so.10失败。并且这是一个在$LD_LIBRARY_PATH配置了都无法解决的问题。然后我开始尝试参考博客:

关于程序运行时加载动态库失败的解决方法_sylalak123的博客-CSDN博客_主框架动态库加载出错​blog.csdn.net

加入/etc/ld.so.conf文件,但是依然找不到。于是开始做2手准备:

  • 把PyTorch Geometric换成dgl(亚马逊开发的另一个图神经网络框架,虽然也有些问题,例如在dp模式下会报错,参考我上一次写bug日记)
  • 发票圈求救

经过新权大佬指点,得知了一种可以强制让so文件加rpath的工具patchelf 。于是下载该工具(github地址):

(小插曲:可能会提示有些依赖还没装好,例如我的autoconf ,诶真的我这么命硬全靠有sudo权限,不然早就凉凉了)

sudo apt-get install autoconf automake libtool

然后把下载好的zip拖到服务器解压,进入文件夹:

. bootstrap.sh
./configure
make
sudo make install

(关于linux链接动态库的资料有很多,这里主要记录解决问题的步骤)先看看这个万恶之源_spspmm.so的加载路径:

readelf -d .../lib/python3.6/site-packages/torch_sparse/_spspmm.so | grep PATH

得到:

0x000000000000000f (RPATH)   Library rpath: [/home/travis/miniconda3/envs/test/lib]

或者直接readelf -d _spspmm.so看更细致的信息:

Dynamic section at offset 0x53b08 contains 38 entries:Tag        Type                         Name/Value0x0000000000000001 (NEEDED)             Shared library: [libc10.so]0x0000000000000001 (NEEDED)             Shared library: [libtorch.so]0x0000000000000001 (NEEDED)             Shared library: [libtorch_cpu.so]0x0000000000000001 (NEEDED)             Shared library: [libtorch_python.so]0x0000000000000001 (NEEDED)             Shared library: [libcudart.so.10.1]0x0000000000000001 (NEEDED)             Shared library: [libc10_cuda.so]0x0000000000000001 (NEEDED)             Shared library: [libtorch_cuda.so]0x0000000000000001 (NEEDED)             Shared library: [libcusparse.so.10]0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]0x000000000000000f (RPATH)              Library rpath: [/home/travis/miniconda3/envs/test/lib]0x000000000000000c (INIT)               0x1e0000x000000000000000d (FINI)               0x422dc0x0000000000000019 (INIT_ARRAY)         0x546180x000000000000001b (INIT_ARRAYSZ)       40 (bytes)0x000000000000001a (FINI_ARRAY)         0x546400x000000000000001c (FINI_ARRAYSZ)       8 (bytes)0x000000006ffffef5 (GNU_HASH)           0x2980x0000000000000005 (STRTAB)             0x84000x0000000000000006 (SYMTAB)             0x1cf80x000000000000000a (STRSZ)              60275 (bytes)0x000000000000000b (SYMENT)             24 (bytes)0x0000000000000003 (PLTGOT)             0x550000x0000000000000002 (PLTRELSZ)           17424 (bytes)0x0000000000000014 (PLTREL)             RELA0x0000000000000017 (JMPREL)             0x18e600x0000000000000007 (RELA)               0x179900x0000000000000008 (RELASZ)             5328 (bytes)0x0000000000000009 (RELAENT)            24 (bytes)0x000000006ffffffe (VERNEED)            0x178100x000000006fffffff (VERNEEDNUM)         70x000000006ffffff0 (VERSYM)             0x16f740x000000006ffffff9 (RELACOUNT)          260x0000000000000000 (NULL)               0x0

再ldd _spspmm.so

./_spspmm.so: /usr/local/cuda/lib64/libcusparse.so.10: version `libcusparse.so.10' not found (required by ./_spspmm.so)
linux-vdso.so.1 =>  (0x00007ffdb0732000)
libc10.so => not found
libtorch.so => not found
libtorch_cpu.so => not found
libtorch_python.so => not found
libcudart.so.10.1 => not found
libc10_cuda.so => not found
libtorch_cuda.so => not found
libcusparse.so.10 => /usr/local/cuda/lib64/libcusparse.so.10 (0x00007fcba70c1000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fcba6d3f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcba6a36000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fcba6820000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcba6603000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcba6239000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcbaab29000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fcba6031000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcba5e2d000)

然后利用patchelf修改路径:

patchelf 的功能以及使用 patchelf 修改 rpath 以解决动态库问题​blog.csdn.net

patchelf --set-rpath /usr/local/cuda/lib64/  _spspmm.so

然后检查一下是否修改成功了:

再看看,发现还是不行:

(kg2text) lzk@admin:~/anaconda3/envs/kg2text/lib/python3.6/site-packages/torch_sparse$ ldd _spspmm.so
./_spspmm.so: /usr/local/cuda/lib64/libcusparse.so.10: version `libcusparse.so.10' not found (required by ./_spspmm.so)linux-vdso.so.1 =>  (0x00007ffc105f7000)libc10.so => not foundlibtorch.so => not foundlibtorch_cpu.so => not foundlibtorch_python.so => not foundlibcudart.so.10.1 => not foundlibc10_cuda.so => not foundlibtorch_cuda.so => not foundlibcusparse.so.10 => /usr/local/cuda/lib64/libcusparse.so.10 (0x00007f9169e8f000)libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9169b0d000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9169804000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f91695ee000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f91693d1000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9169007000)/lib64/ld-linux-x86-64.so.2 (0x00007f916d8f7000)librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9168dff000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9168bfb000)

然后出现了更严重的问题,就是改完之后,连torch都不能正常import了:

不得已只能卸载torch_sparse,明哲保身。

2 安装失败_写bug日记2:PYTORCH GEOMETRIC安装失败的问题(未解决)相关推荐

  1. PyG(PyTorch Geometric)安装教程(附Cora数据集)

    PyG(PyTorch Geometric)安装教程(附Cora数据集) PyG是多特蒙德工业大学(Technische University Dortmund)的Matthias Fey博士基于Py ...

  2. linux安装步骤_图解 Debian 10(Buster)安装步骤 | Linux 中国

    在这篇文章中,我们将演示如何在你的笔记本电脑和台式电脑上安装 Debian 10 "Buster" 工作站.-- Pradeep Kumar Debian 项目发布了它的最新稳定版 ...

  3. git安装 苹果笔记本_个人博客第5篇——安装node.js和Hexo

    废话不多说,开始! 1. 安装nodejs 下载地址:node.js官网 如上图,直接点击下载,完成后双击安装,安装直接默认 next 就好,很简单,需要改的也就是安装位置改一下,我是在D盘新建了一个 ...

  4. mysql 数据库安装命令_教你MySQL数据库的编译安装以及命令详解(5.7版本)

    一.安装MySQL所需的环境依赖包 [root@localhost opt]# yum -y install gcc gcc-c++ make ncurses ncurses-devel bison ...

  5. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)

    很多人来问我pandas的安装(python数据分析里面的必修课) 步骤如下: 安装python的时候,把路径加到系统里,这样,随时可以用pip 路径添加方法: 查找路径: 路径1: 2.例如: 即: ...

  6. jssdk信息验证失败_阿里云环境中TLS/SSL握手失败的场景分析

    TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性更多.本文来总结下各种握手失败的场景. 一次TLS/SSL握手的过程 本文不详细介绍T ...

  7. mysql安装无效安装源_(0.2.4)Mysql安装——yum源安装

    转自:https://www.cnblogs.com/jimboi/p/6405560.html 1.下载好对应版本的yum源文件 2.安装用来配置mysql的yum源的rpm包 可以用: yum r ...

  8. PyTorch Geometric安装

    一.首先创建一个pytorch环境 方法参照我的这篇文章https://blog.csdn.net/weixin_51736742/article/details/118388965 二.创建一个新的 ...

  9. ansible安装部署_运维日记|使用ansible批量部署crontab定时删归档任务

    在某个下午,测试同事突然找过来说,之前测试服务器搭的几套oracle数据库忘记部署删除归档脚本了,要让小编都给部署一下. ​ 数了数,有接近十套呢,一部部登陆上去,部署一个删归档脚本,然后再到cron ...

最新文章

  1. C#中struct和class的使用区别是什么?
  2. 在SecureCRT中,hbase shell不能回退的问题
  3. 调整搜索二叉树中两个错误的节点
  4. 打包filemanager-webpack-plugin的报错和解决
  5. python输出出现频率最高的字母_用Python实现搜索某一网页中出现频率最高的前N个英文单词 输入: 网址,N值 输出:按出现频率由高到低排...
  6. mysql类型说明_MYSQL 数据类型说明
  7. 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
  8. oracle面向对象的数据类型,Oracle面向对象编程OOP
  9. table表格表头不懂,内容y轴滚动
  10. MySql-Proxy之多路结果集归并
  11. 华为Mate 40系列外观偷跑:后置八卦图六摄亮了!
  12. javaweb实训第五天下午——SpringMVC基础
  13. 图像处理神经网络python_深度学习使用Python进行卷积神经网络的图像分类教程
  14. 单张滑动tab 组件
  15. Web设计规范----控件、组件
  16. 从github安装python项目
  17. 极通首次为中小企业量身定制EWEBS极速版
  18. 【UWB 定位】室内定位 三边定位算法
  19. 服务端Word转Pdf,实现中文文档转换
  20. python客户端开发自行车租赁系统_Python数据可视化——共享单车数据分析

热门文章

  1. Python求转置矩阵最简便的方法
  2. php是否支持64位,phpstudy默认不支持64位php的解决方法
  3. navicate将远程数据库导入到本地数据库
  4. 关于SPARK_WORKER_MEMORY和SPARK_MEM
  5. vuejs对象更新渲染_vue 数组和对象渲染问题
  6. css table设置边框_table布局的一些总结
  7. mysql快速导入导出数据库_mysql快速导出与导入
  8. JAVA语言怎么搞_Java语言
  9. ajax js图片上传到php,Ajax上传并预览图片(附代码)
  10. numpy.random 模块- 随机数