“tf_grouping_so.so or tf_XXX_so.so not found” 的解决方案

我们在配置深度学习论文的tensorflow代码项目时,经常会遇到上述问题,即tf_XXX_so.so文件找不到。

我查看了国内国外的相关网站,大部分人都认为是版本问题,但是我调整版本后,还是解决不了。经过我的一系列实践,最终还是解决了该问题。这里把解决问题的一些步骤列出来,方便查阅。以下代码均基于linux实现。

1. 查看对应的sh文件。

我并不懂这个so文件的相关技术细节,只是知道这个文件是一系列混合编译文件的一个链接接口,由sh脚本生成。不能生成so文件,说明是和脚本文件有关系。我们打开对应的脚本,来查看细节,以tf_grouping_compile.sh为例:

TF_INC和TF_LIB是两个对应Tensorflow的路径。

首先需要确定的是nvcc的路径配置是否正确。该项目默认使用的是cuda-10.0,如果与你的cuda路径不一致,需要按你的路径进行修改,比如cuda-10.1或10.2。

2. 链接ltensorflow_framework

在保证之前的cuda路径配置正确的前提下,我在运行.sh文件后,发现这个ltensorflow_framework文件找不到。比较幸运的是,我在网上找到了解决方法。

该方法时基于Anconda虚拟环境的。我们需要确认libtensorflow_framework.so.2这个文件的位置,一般是在:

~/anaconda3/envs/SampleNet(这是虚拟环境的名称)/lib/python3.7/site-packages/tensorflow

这个时候,我们需要建立该文件的一个链接:

在  /usr/lib/x86_64-linux-gnu路径下,建立libtensorflow_framework.so文件,实现链接。或者按照如下代码建立so文件。

cd /usr/local/lib/python3.7/site-packages/tensorflow/

# If you renamed the file, rename it back
mv libtensorflow_framework.so libtensorflow_framework.so.2

# Create a symlink so both .so and .so.2 point to the same file
ln -s libtensorflow_framework.so.2 libtensorflow_framework.so

配置完成后,运行.sh文件,so.so文件能够正常生成。

还有一个方法值得一试,参看:https://blog.csdn.net/qq_41895003/article/details/105898395

3. 写在最后(20210811更新)

之前一直没有搞定的老版本深度学习项目终于调通了。主要是修改了cuda的版本(现在的版本为10.1,原来版本为11.2)以及安装了准确的tensorflow版本。关于cuda的安装,请参看我的另一篇博客:https://blog.csdn.net/aliexken/article/details/119218688

关于Tensorflow的版本问题,我经过尝试发现必须要按照项目要求的版本,哪怕就是差一点点也可能造成编译不过。主要是关于cuda混合编译的部分代码,如果不能准确的解析,一定会造成异常。一般老版本的Tensorflow安装不太方便,建议使用pip命令查找对应的准确版本。

还有一点需要注意,那就是gcc大概率下要降级,新版本的gcc可能也会产生问题。

おすすめ

転載: blog.csdn.net/aliexken/article/details/115343375
おすすめ