Deepin 15.5搭建GPU版caffe环境

一直以来,我都是使用ubuntu 16.04 作为了学习深度学习的系统。可是啊,ubuntu和deepin比起来,在生态,易用性,友好度比起deepin来差太远了。更别说,deepin上有更优秀的科学上网的工具。
以前一直因为GPU驱动,cuda等原因,没有办法在deepin上做相关的训练。今天闲着,又重新试了试。没想到成功了。下面是我的记录。
在某年某月,深度发布的显卡驱动管理器,详见深度显卡驱动管理器V1.0正式发布——最佳显卡驱动解决方案推荐。采用的是大黄蜂的解决方案,和ubuntu不一样,有些可惜,官方说后面会采用和ubuntu一样的显卡解决方案。就是不知道等到何年何月。于是,我拿着官方的工具安装显卡驱动,详见拿官方显卡驱动管理器的安装驱动。
在装好显卡驱动后,还需要安装cuda和cudnn,nvidia官方是没有提供deepin版本的cuda安装包的(deb包),还好的是,deepin的仓库是自带cuda8的。安装cuda只需要执行

sudo apt install nvidia-cuda-dev

当然,这个命令不只装了cuda,还装了其他的东西。不过,这是在deepin上装cuda最快的方法。装cudnn稍微麻烦些,需要去官网下载cudnn的包,把头文件和库文件拷贝到相应的地方,头文件->/usr/include,库文件->/usr/lib。有关cudnn的具体怎么弄,可以参考deepin15.4.1安装caffe的cudnn详细安装步骤部分。
这样子,看上去是已经装好了cuda和cudnn,实际上是用不了的。由于cuda自身的原因,只能使用gcc5之前的版本,所以需要把gcc降级,deepin默认的gcc已经是6.x的版本了。降级的命令很简单

sudo apt install g++-4.8 gcc-4.8
cd /usr/bin
sudo rm gcc g++
sudo ln -s g++-4.8 g++
sudo ln -s gcc-4.8 gcc

降级以后,你就可以尝试的去编译gpu版的caffe。不过,即便你把所有的依赖通过apt装好,依然是会报错的,典型的错误如

[  1%] Built target caffeproto
[ 84%] Built target caffe
[ 86%] Linking CXX executable upgrade_solver_proto_text
../lib/libcaffe.so.1.0.0:对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
../lib/libcaffe.so.1.0.0:对‘cv::imread(std::string const&, int)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘cv::imencode(std::string const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘leveldb::Status::ToString() const’未定义的引用

其实,还有protobuf的问题,我找不到终端的输出了。这些错误的一个主要原因是gcc5之前和之后的库有ABI不兼容问题,是一个巨坑。在网上你能搜到很多相关的博客和解决方法。
我的解决方法很简单粗暴,就是把系统原有的protobuf,gflag,glog,opencv,leveldb统统卸载,然后自己编译一遍。
Deepin 15.5搭建GPU版caffe环境_第1张图片
这些库,我编译后都安装到/usr/local
Deepin 15.5搭建GPU版caffe环境_第2张图片
Deepin 15.5搭建GPU版caffe环境_第3张图片
如此一来,就能编译通过了,然后愉快的使用GPU版的caffe。
Deepin 15.5搭建GPU版caffe环境_第4张图片

总结一下

需要做的事情
1. 装显卡驱动,官方的工具搞定
2. 装cuda,官方的仓库里有
3. 装cudnn,需要自己下载,然后放到相应位置
4. 使用cuda,cudnn时,需要把gcc降级到4.8,同时会引入ABI不兼容问题
5. 编译caffe,下好依赖,protobuf,gflag,glog,opencv,leveldb这些需要自己编译安装,不然有很多未定义的引用。如果出现的未定义的引用,可以考虑是不是需要自己编译,毕竟ABI是不兼容的。
6. 使用GPU,由于是大黄蜂解决方案,默认是不是用独立显卡的。使用时,需要在命令前面加optirun,其他的和在ubutnu使用没有什么不同。
7. 赶紧使用deepin优秀的生态吧

参考

  1. 深度显卡驱动管理器V1.0正式发布——最佳显卡驱动解决方案推荐
  2. 拿官方显卡驱动管理器的安装驱动
  3. deepin15.4.1安装caffe
  4. ubuntu 16.04 下配置intel/caffe

你可能感兴趣的:(环境搭建)