tensorflow和caffe共存问题

来源:互联网 发布:2017百度春运大数据 编辑:程序博客网 时间:2024/06/02 01:58

前几天想要跑个Hinton大神的CapsNet,是用tensorflow实现,就安装了个tensorflow,结果caffe不能用了难过


将解决办法记录如下:


第一个问题:cudnn版本不兼容问题

因为之前一直用的caffe,cudnn用的是v5,现如今默认安装的tensorflow用的是cudnn v6,年少无知果断下了一个cudnn v7,然后把v7软链接成v6,具体步骤:

1.删除原来的cudnn

sudo rm -rf /usr/local/cuda/include/cudnn.hsudo rm -rf /usr/local/cuda/lib64/libcudnn*
2.将新下载的软件包解压到home文件夹下

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/sudo cp cuda/lib64/lib* /usr/local/cuda/lib64/

3.建立软链接

sudo chmod +r libcudnn.so.7.0.3 sudo chmod +r libcudnn.so.5.1.5  sudo ln -sf libcudnn.so.5.1.5 libcudnn.so.5   sudo ln -sf libcudnn.so.7.0.3 libcudnn.so.7  sudo ln -sf libcudnn.so.7.0.3 libcudnn.so.6 sudo ln -sf libcudnn.so.7 libcudnn.so  sudo ldconfig

bingo!


然而,caffe用的是低版本的cudnn进行的编译,因此这样就牺牲了caffe成就了tensorflow。

解决办法:

1.将~/caffe/include/caffe/util/cudnn.hpp 换成最新版caffe里的相应目录下的cudnn.hpp;

2.将~/caffe/include/caffe/layers/下所有cudnn开头的文件都替换为最新版caffe里相应目录下的同名文件;

3.将~/caffe/src/caffe/layer下所有cudnn开头的文件都替换为最新版caffe里相应目录下的同名文件;


紧接着出现第二个问题:依赖包版本不兼容问题

用之前编译好的caffe训练数据时出现:

1.TypeError: slice indices must be integers or None or have an __index__ method


这是因为安装tensorflow时把numpy更新到最新版了,但我们当时编译lib时用的是低版本的numpy,降级到1.11.0就可以了。


2.AttributeError: 'module' object has no attribute 'text_format'

这是因为安装tensorflow时把protobuf更新到最新版了,但我们当时编译lib时用的是低版本的protobuf,降级到2.6.0就可以了。


这期间还有点小曲折,也一起记录下来,因为我是用requirements.txt来安装需要的python依赖包,所以pip都默认安装成最新的了,因此编译lib时用的是最新版的包,当训练网络时代码会出现版本不兼容问题,比如

ImportError: numpy.core.multiarray failed to import

此时再进行版本升、降级是没有用的,编译好的路径已经是最新版的了,所以需要安装对应版本(requirements.txt里是最低版本)后重新编译lib,至于caffe要不要重新编译,可以尝试一下。


一同折腾,难保以后不会出现类似的问题,因此需要一个一劳永逸的办法:用Virtualenvwrapper解决该问题

$ sudo pip install virtualenvwrapper

把下面几行加入~/.bashrc

export WORKON_HOME=$HOME/virtualenvs    # 放所有虚拟环境的地方source /usr/local/bin/virtualenvwrapper.sh
在终端输入
source ~/.bashrc
常用指令
mkvirtualenv 创建环境 --no-site-packages不把系统中原有的包复制过来,反之 --system-site-packages
workon 切换到环境
deactivate 注销当前环境
lsvirtualenv 列出所有环境
rmvirtualenv 删除环境
cpvirtualenv 复制环境
cdsitepackages cd到当前环境的site-packages目录
lssitepackages 列出当前环境中site-packages内容
setvirtualenvproject 绑定现存的项目和环境
wipeenv 清除环境内所有第三方包

也就是说,以后caffe和tensorflow放在两个python环境中去运行,依赖包互不干扰。
*在虚拟环境下,不能用sudo。

我创建环境不用baseevnv下的包,因此要重新安装一些依赖包,主要是requirements.txt里的,如果makefile中用到了opnecv,则需要在该环境下安装opencv:
pip install opencv-python
其他的缺什么再按就可以了。

AttributeError: 'module' object has no attribute 'text_format'

原创粉丝点击