由于在学习神经网络,为了尝试各种深度学习框架,电脑上目前安装了caffe, caffe2, paddlepaddle, tensorflow三款主流框架,但是安装过程中真是痛不欲生。
且不说单单安装一个caffe框架时花了我两天时间,各种cuda, cudnn不适应,还有Python接口有问题,由于我一直都习惯用Python3,还把它配置成了在Python3 环境下运行,可是paddlepaddle只支持Python2.7,没办法又把Python2所需支持的依赖库安装好,但是最闹心的是这三家框架各自版本对cuda,cudnn, protobuf都有不同的版本需求。有些还是无法产生交集,没办法最后只有妥协。
1、我发现在运行很多caffe,tensorflow 或者 paddle 程序报错时,添加sudo权限再执行就可以了。
比如我在安装caffe时,编译caffe通过,make runtest通过。但在使用MNIST数据集对caffe进行测试时,出现如下问题:
cannot create cublas handle.cublas won't be available
网上查找后,有的说是显卡驱动版本过高问题,在没有更改驱动的情况下,将命令
./examples/mnist/train_lenet.sh
换成
sudo ./examples/mnist/train_lenet.sh
我这就可以运行了。
*******************************************更新*******************************************************************
最近发现一个解决办法,终于把每次执行caffe或者tensorflow的Python程序时要加sudo的问题解决了,方法来自于stackoverflow论坛(https://stackoverflow.com/questions/45515142/tensorflow-gpu-is-not-working-with-blas-gemm-launch-failed)
执行以下命令就可以了
sudo rm -rf ~/.nv/
其实就是删除NVIDIA的缓存,文章中说很大可能是NVIDIA驱动版本升级或者切换安装时没有清理干净或者老版本的文件有损坏,缓存里还有老版本的文件不兼容。所以删除了就好了,解决了我的问题。命令行下运行没啥影响,终于可以方便地在IDE下执行了。开心~
2、安装pycaffe遇到 no module named 'caffe'问题
安装好caffe后,运行
import caffe
有问题 no module named 'caffe',往往是找不到caffe下的Python路径,可以试试在命令行里或者Python IDE(sublime text 或 pycharm)中
import sys
print(sys.path)
看看里面是否有caffe下的Python路径
为此,我们在~/.bashrc或者/etc/profile里添加
export PYTHONPATH=path to caffe root/python:$PYTHONPATH (path to caffe root为你的caffe路径)
然后保存,激活生效
source ~/.bashrc
# source /etc/profile
这样可以保证命令行里没有问题。
对于Python IDE,如果直接在terminal启动,就会自动继承来自系统后台的环境变量,此时导入caffe也可以成功。
如果不通过终端启动需要在import caffe之前加入路径
import sys
sys.path.append('/home/zzf/caffe/python')
import caffe
就没问题了
对于pycharm,还可以
- 进入pycharm-community-2017.2/bin
- 打开pycharm.sh
- 跟终端一样在最后加入一行
export PYTHONPATH=path to caffe root/python:$PYTHONPATH (path to caffe root为你的caffe路径)
这样就无需在import前用sys手动添加Python路径了
3、安装caffe2时,安装过程挺简单的,也没有什么可以让你选择的地方,默认Python2.7,但是安装好后运行
from caffe2.python import core
时,一直报错,
from caffe2.proto import caffe2_pb2
ImportError: cannot import name caffe2_pb2
TypeError: __init__() got an unexpected keyword argument 'file'
查了网上说是protobuf版本问题,于是卸了重装新一点的版本就好了,
但是犯了paddle的忌讳
➜ build git:(master) sudo -H pip install protobuf
Collecting protobuf
Using cached https://files.pythonhosted.org/packages/9d/61/54c3a9cfde6ffe0ca6a1786ddb8874263f4ca32e7693ad383bd8cf935015/protobuf-3.5.2.post1-cp27-cp27mu-manylinux1_x86_64.whl
Requirement already satisfied: setuptools in /usr/lib/python2.7/dist-packages (from protobuf) (20.7.0)
Requirement already satisfied: six>=1.9 in /usr/lib/python2.7/dist-packages (from protobuf) (1.10.0)
paddlepaddle-gpu 0.11.0 has requirement protobuf==3.1, but you'll have protobuf 3.5.2.post1 which is incompatible.
Installing collected packages: protobuf
Successfully installed protobuf-3.5.2.post1
没办法,先将就着这么用,以后要用paddle时如果报错,再把protobuf版本改回为3.1版本就好了。
4、目前电脑安装的tensorflow版本是1.4,它要求cudnn必须为6.0版,而刚安装的最新的caffe2,或者叫pytorch(因为caffe2与pytorch合并了,官网下载时可以感受到),明显觉得cudnn6.0有点低,我运行了一个relu的Python测试,提示Engine CUDNN is not available for operator Relu,也就是cudnn无法为GPU提供加速。
5、使用tensorflow的过程中还碰到一问题,在使用tensorflow的trace功能时报错:
tensorflow/stream_executor/dso_loader.cc:129] Couldn’t open CUDA library libcupti.so.8.0. LD_LIBRARY_PATH:
原因:
Note: to get GPU tracing you will need to ensure that libcupti.so is on you LD_LIBRARY_PATH. It is usually found in /usr/local/cuda/extras/lib64.
无法打开usr/local/cuda/lib64/libcupti.so.8.0 ,笔者猜测可能是新旧版本默认寻找libcuti.so.8.0的路径变了,或者存放相应文件的目录做了改变,通过查看cuda安装的文件夹可以看到该文件所在的目录并没有需要的目标文件。
解决办法:
在环境变量中添加libcupti.so.8.0的路径,比如可以使用如下语句解决该问题:
sudo gedit /etc/enviroment
添加以下内容:
LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64" (对应安装的位置)
重启,再次运行就可以了。