由于之前已经在Ubuntu 14.04 x64上面安装cuda7.0+caffe, 并且已经配置好,caffe也已经跑通。

但是最近需要使用Torch,而Torch对cuda的要求是8.0,因此决定对cuda的版本进行升级,以满足Torch平台的需求。

而最新版的caffe也已经支持cuda8.0。

话不多说,开始安装cuda8.0。

1. 电脑配置

显卡:GeForce GTX TITAN X
系统:Ubuntu 14.04(x_64)
CUDA:cuda_8.0.61_375.26_linux.run
cuDNN:cudnn-8.0-linux-x64-v5.1.tgz

2. CUDA 8.0安装

1. GeForce GTX TITAN X显卡必须用CUDA 8.0版本。CUDA从此处下载。切记,千万不要下载 deb 包,否则后方无数坑在等着你。

sudo sh cuda_8..61_375.26_linux.run

2. 再安装相对应版本的cudnn程序加速包。

GTX1080显卡必须用cuDNN-8.0-V5.1版本,不然用 caffe 跑模型,用 CPU或GPU显卡跑精度正常,一旦开启cuDNN模式,精度(acc)立刻下降到 0.1 左右,loss 非常大。cuDNN在此处下载。下载需注册。最好注册一个账号,选择对应的版本,不要用网上其他教程给的现成的包,出问题的概率非常大。

注:此时安装过程中提示是否要安装NVIDIA驱动时选择no。其他选择yes或默认即可。

Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?
(y)es/(n)o/(q)uit: n
Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]:
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y
Enter CUDA Samples Location
[ default is /home/startag]: Installing the CUDA Toolkit in /usr/local/cuda-8.0 …

  完成后可以看到以下提示信息:

Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-8.0
Samples: Installed in /home/startag, but missing recommended libraries

3. 安装过程中问题解决

3.1 显卡驱动冲突

如果在安装过程中安装了cuda8.0的显卡驱动,这时候在重启过程中,会与原先安装的Nvidia显卡驱动冲突,开机时会一直有一个图标闪动。

这时候ctrl + Alt +F1~7 均没有反应,这是因为两个版本的显卡驱动不符,冲突导致。

解决方案为:

重启(reboot)-> Esc 键 -> Ubuntu Recovery 模式

在等待一段时间之后,会进入一个选择界面,选择 root 模式,进入命令行模式之后,使用下面命令卸载Nvidia显卡驱动:

sudo apt-get purge nvidia-*

把nvidia全卸了,再reboot就能进去了。
如果在使用上面命令过程中出现apt-get不能使用的情况,那么需要使用fix 模式来对broken package进行修复,待修复完成之后再进入root 模式下卸载Nvidia显卡驱动。

解决方案见:Ubuntu GNOME 16.04,安装NVIDIA驱动后无法开机,怎么解决?

重启之后即可正常运行 cuda 程序。

Cuda 8.0 以及 Sample 安装检查:

在安装完成之后,需要检查cuda程序是否安装成功:

进入/usr/local/cuda/samples, 执行下列命令来build samples

sudo make all -j8

全部编译完成后, 进入 ./bin/x86_64/linux/release, 运行deviceQuery

./deviceQuery  

如果出现下面信息,

CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned
-> unknown error
Result = FAIL

则需要使用chmod 777 -R deviceQuery 方法来给deviceQuery文件sudo 权限,解决方案见:CUDA deviceQuery returned 30 error After upgrade to nvidia 334.21-1

出现下面信息,则说明cuda 以及 cuda sample安装成功:

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected  CUDA Capable device(s)

Device : "GeForce GTX TITAN X"
CUDA Driver Version / Runtime Version 8.0 / 8.0
CUDA Capability Major/Minor version number: 5.2
Total amount of global memory: MBytes ( bytes)
() Multiprocessors, () CUDA Cores/MP: CUDA Cores
GPU Max Clock rate: MHz (1.08 GHz)
Memory Clock rate: Mhz
Memory Bus Width: -bit
L2 Cache Size: bytes
Maximum Texture Dimension Size (x,y,z) 1D=(), 2D=(, ), 3D=(, , )
Maximum Layered 1D Texture Size, (num) layers 1D=(), layers
Maximum Layered 2D Texture Size, (num) layers 2D=(, ), layers
Total amount of constant memory: bytes
Total amount of shared memory per block: bytes
Total number of registers available per block:
Warp size:
Maximum number of threads per multiprocessor:
Maximum number of threads per block:
Max dimension size of a thread block (x,y,z): (, , )
Max dimension size of a grid size (x,y,z): (, , )
Maximum memory pitch: bytes
Texture alignment: bytes
Concurrent copy and kernel execution: Yes with copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: / /
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = , Device0 = GeForce GTX TITAN X
Result = PASS

也可以使用下面命令测试是否安装成功:

nvidia-smi

输出信息:

Thu May  ::
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26 Driver Version: 375.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| GeForce GTX TIT... Off | ::00.0 On | N/A |
| % 40C P8 17W / 250W | 500MiB / 12198MiB | % Default |
+-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| G /usr/lib/xorg/Xorg 267MiB |
| G compiz 106MiB |
| G ...el-token=EFAC54A3CB4FC0DBAF418394276E4C3B 124MiB |
+-----------------------------------------------------------------------------+

3.2 caffe编译警告问题

在对caffe进行编译时,出现以下问题:

使用make all -j16 时,出现以下警告信息:

NVCC src/caffe/layers/sigmoid_layer.cu
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

解决方案:

3.3 caffe编译libcudart.so 连接问题

make runtest -j16时,出现以下警告信息:

.build_release/tools/caffe
.build_release/tools/caffe: error while loading shared libraries: libcudart.so.7.0: cannot open shared object file: No such file or directory

解决方案:

这是由于cuda安装成功后,还需要将对应的opencv版本使用新安装的cuda进行编译。

安装完成cuda8.0之后,caffe所需要的opencv版本也需要和cuda相适应,需要使用新的cuda版本对opencv进行编译。

因为原先安装的cuda版本为cuda7.0, 而opencv的版本为3.0, 因此电脑中的libopencv 相关库是使用cuda7.0编译,依赖于cuda7.0,因此我们需要对opencv进行重新编译。

而由于opencv 3.0暂时还不支持cuda8.0,使用cuda8.0编译opencv方法见:GraphCut deprecated in CUDA 7.5 and removed in 8.0

如果对opencv3.0.0修改之后还是不能成功编译,那么推荐caffe官方的opencv 版本进行编译。opencv3.1.0下载:https://github.com/opencv/opencv 

opencv 3.1.0 使用cuda8.0编译方法见: OpenCV 3.1 Installation Guide on Ubuntu 16.04

进入下载好的opencv3.1.0文件夹,执行下面命令进行编译:

mkdir build
cd build/
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
make -j $(($(nproc) + ))

在使用cuda 编译opencv 过程中,可能会提示以下警告信息:

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

解决方案:cuda环境下安装opencv出现nvcc warning : The 'compute_11'

找到cmake后build文件夹中产生的OpencvConfig.cmake文件,找到如下代码:

# Version Compute Capability from which OpenCV has been compiled is remembered
set(OpenCV_COMPUTE_CAPABILITIES "-gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_30,code=sm_30;
-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_37,code=sm_37;
-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_52,code=sm_52;
-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-D_FORCE_INLINES")  

删除  -gencode;arch=compute_20,code=sm_20; 主要因为此架构在CUDA过时,将来也将不支持。  

接下来,使用make安装opencv:

sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update

上面是将opencv编译成功,但是并没有安装到我们的系统中,有很多的设置都没有写入到系统中,因此还要进行install。

sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update

使用 checkinstall 工具来对opencv进行管理,因为当系统安装多个opencv版本时,管理会非常麻烦和混乱,因此使用该工具对已经安装的opencv进行管理,方便卸载等其他操作。

进入build 文件夹中,执行下面命令操作:

sudo apt-get install checkinstall
sudo checkinstall

使用checkinstall的目的是为了更好的管理我安装的opencv,因为opencv的安装很麻烦,卸载更麻烦,其安装的时候修改了一大堆的文件,当我想使用别的版本的opencv时,将当前版本的opencv卸载就是一件头疼的事情,因此需要使用checkinstall来管理我的安装。执行了checkinstall后,会在build文件下生成一个以backup开头的.tgz的备份文件和一个以build开头的.deb安装文件,当你想卸载当前的opencv时,直接执行dpkg -r build即可。  

opencv编译和安装详细解释见: Ubuntu16.04 +cuda8.0+cudnn+opencv+caffe+theano+tensorflow配置明细

OpenCV 3.1 Installation Guide on Ubuntu 16.04  

编译完opencv之后,对caffe进行编译错误信息:

E0526 ::48.580889   common.cpp:] Cannot create Cublas handle. Cublas won't be available.
E0526 ::48.582368 common.cpp:] Cannot create Curand generator. Curand won't be available.
F0526 ::48.582435 syncedmem.hpp:] Check failed: error == cudaSuccess ( vs. ) unknown error
*** Check failure stack trace: ***
@ 0x2afa0d8eddaa (unknown)
@ 0x2afa0d8edce4 (unknown)
@ 0x2afa0d8ed6e6 (unknown)
@ 0x2afa0d8f0687 (unknown)
@ 0x2afa143f0fd8 caffe::SyncedMemory::mutable_cpu_data()
@ 0x2afa142e508c caffe::Blob<>::Reshape()
@ 0x2afa142e54f9 caffe::Blob<>::Reshape()
@ 0x2afa142e558c caffe::Blob<>::Blob()
@ 0x50a24b caffe::ReshapeLayerTest<>::ReshapeLayerTest()
@ 0x50a65b testing::internal::TestFactoryImpl<>::CreateTest()
@ 0x8ff163 testing::internal::HandleExceptionsInMethodIfSupported<>()
@ 0x8f5d65 testing::TestInfo::Run()
@ 0x8f5e85 testing::TestCase::Run()
@ 0x8f91c8 testing::internal::UnitTestImpl::RunAllTests()
@ 0x8f9457 testing::UnitTest::Run()
@ 0x46ca2f main
@ 0x2afa14f6cf45 (unknown)
@ 0x474739 (unknown)
@ (nil) (unknown)
make: *** [runtest] Aborted (core dumped)

解决方案:caffe配置问题与解决方法集锦

而最主要的原因在于Nvidia的显卡未启动,所以cuda不能正常使用。

解决方案见: CUDA/caffe ERROR:cudaGetDeviceCount returned 30/35,Check failed: error == cudaSuccess (30/35 vs. 0) 

具体解决方案见: F0528 22:26:23.117558 13844 syncedmem.hpp:18] Check failed: error == cudaSuccess (30 vs. 0) unknown error #799

我在这里找到了答案,安装个东西就可以了:

sudo apt-get install nvidia-modprobe

 

之后,再make runtest -j,搞定!

进入 /usr/local/cuda-8.0/samples/bin/x86_64/linux/release 文件夹下,使用

sudo ./deviceQuery

来测试cuda是否正常启动,如结果是PASS,这时候才能跑通caffe的test以及其他训练程序。

如果还不成功,试着将Makefile.config文件中的编译方式进行替换:

Here, fix it by (a) installing CUDA 8.0 and (b) change the caffe makefile.config

由于我的是Nvidia TITAN X显卡,所以需要调整,解决方案见:cudaSuccess (30 vs. 0) unknown error

-gencode arch=compute_52,code=sm_52
-gencode arch=compute_52,code=compute_52

至此,cuda8.0升级工作完成。

Caffe使用: Ubuntu 14.04(x64) 从cuda 7.0 升级到 cuda8.0的更多相关文章

  1. Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

    Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: Ub ...

  2. Git使用:Linux(Ubuntu 14.04 x64)下安装Git并配置连接GitHub

    github是一个非常好的网络代码托管仓库,知晓许久,但是一直没有用起来,最近才开始使用git管理自己的文档和代码. Git是非常强大的版本管理工具,今天就告诉大家,如何在Linux下安装GIt,并且 ...

  3. Caffe + Ubuntu 14.04 64bit + 无CUDA(linux下安装caffe(无cuda)以及python接口)

    安装Caffe指导书 环境: Linux 64位 显卡为Intel + AMD,非英伟达显卡 无GPU 一. 安装准备工作 1. 以管理员身份登录 在左上角点击图标,搜索terminal(即终端),以 ...

  4. ubuntu 14.04 x64下安装libreoffice

    LibreOffice是ubuntu 上的办公软件很多人都知道微软公司的的Word.Excel.PowerPoint和Outlook,但是很少有人知道LibreOffice. LibreOffice靠 ...

  5. 【转】Ubuntu 14.04.3上配置并成功编译Android 6.0 r1源码

    http://www.linuxidc.com/Linux/2016-01/127292.htm 终于成功把Android 6.0 r1源码的源码编译.先上图,这是在Ubuntu中运行的Android ...

  6. Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台

    引言 找了很多Python GUI工具集,还是觉得PyQt比较理想,功能强大跨平台,还支持界面设计器.花一天时间折腾了Ubuntu14.04(32位)+ Python3.4 + Qt5.3.2 + P ...

  7. 在Ubuntu 14.04安装和使用Docker

    Docker是一个开源软件,它可以把一个Linux应用和它所依赖的一切(比如配置文件)都封装到一个容器.然而,Docker与虚拟机不同,它使用了沙箱机制,Docker容器不运行操作系统,它共享主机上的 ...

  8. [转]在Ubuntu 14.04安装和使用Docker

    在Ubuntu 14.04安装和使用Docker 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs Docker是一个开源软件,它可以把一 ...

  9. ubuntu 14.04中安装 ruby on rails 环境

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...

随机推荐

  1. canal数据同步目录

    我们公司对于数据同步有以下需求 1.多个mysql库中有一些基础表需要数据统一,mysql跨库同步 2.mysql热数据加载到redis 3.全文检索需要mysql同步到es 4.数据变更是附属的其它 ...

  2. mybatis的一对一,一对多查询,延迟加载,缓存介绍

    一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...

  3. Java http协议概述

    一.http协议用于定义客户端与web服务端通讯的格式 二.HTTP1.0与HTTP1.1的区别 1.在HTTP1.0协议中,客户端与web服务器建立链接后只能获取一个web资源 2.HTTP1.1协 ...

  4. .net 设置Webbowser 版本

    .net 里的Webbowser控件默认情况是用IE7来渲染 可修改注册表试用是最新的版本来渲染: using System; using System.Collections.Generic; us ...

  5. 20155217《网络对抗》Exp07 网络欺诈防范

    20155217<网络对抗>Exp07 网络欺诈防范 实践内容 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术,用DNS spoof引导特定访问到冒 ...

  6. oracle10g安装在裸设备上

    参考了百度文库上的 <在​裸​设​备​上​面​安​装​o​r​a​c​l​e​1​0​g> 一文. 不过为了简单起见,我选择OS 为 Redhat AS 4.8 32位. 准备安装数据库为 ...

  7. 解决:Linux SSH Secure Shell(ssh) 超时断开的解决方法

    转载:http://www.cnblogs.com/jifeng/archive/2011/06/25/2090118.html 修改/etc/ssh/sshd_config文件,找到 ClientA ...

  8. 微信小程序之缓存——不同页面传递数据

    1. 添加缓存 单个密钥允许存储的最大数据长度为1MB,所有数据存储上限为10MB. // 存储信息到storage // 异步存储 set() { wx.setStorage({ key: 'use ...

  9. [BZOJ4857][JSOI2016]反质数序列[最大点独立集]

    题意 在长度为 \(n\) 的序列 \(a\) 中选择尽量长的子序列,使得选出子序列中任意两个数的和不为质数. \(n\leq3000\ ,a_i\leq10^5\). 分析 直接按照奇偶性建立二分图 ...

  10. R实战 第九篇:数据标准化

    数据标准化处理是数据分析的一项基础工作,不同评价指标往往具有不同的量纲,数据之间的差别可能很大,不进行处理会影响到数据分析的结果.为了消除指标之间的量纲和取值范围差异对数据分析结果的影响,需要对数据进 ...