openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

 

大概写一下安装过程,怕以后忘记啦

一、ubuntu16.04安装

二、安装nvidia驱动

三、安装cuda

四、安装cudnn

五、编译并运行openpose

详细步骤

一 ubuntu16.04安装过程

我电脑上装的是双系统win10+ubuntu16.04,ubuntu的安装网上有很多教程 这里可以参考https://blog.csdn.net/s717597589/article/details/79117112/;主要注意的两点就是  1.在过程中有个选项 这台电脑已经安装了windows操作系统,要我们怎么做, 选其他选项就ok   2.给linux分区的时候空间要大一些,我们不单单是为了装个双系统,后面要跑openpose程序,我电脑还要跑yolo程序,训练数据集都需要很大空间。安装ubuntu我基本没遇到什么坑,就是我电脑是Legacy+EFI启动,所以每次开机都没有系统选择项,每次我都要按F11才行。网上有教程说可以用easybcd设置引导项,我没成功,你们可以试一下,如果easybcd里添加新条目时,linux项是灰色的不能点击,可以用easybcd2.2版本 ,反正我电脑是这样新版本不能用。

二、安装nvidia驱动

这里首先下载openpose的源码,github链接https://github.com/CMU-Perceptual-Computing-Lab/openpose或者终端运行命令git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose,没装git工具的需要提前安装。

安装openpose最好是按照文件里提供安装文件来安装,在doc文件夹里,这里我需要着重说一下,不要盲目的直接运行作者提供的安装脚本,因为里面的版本好跟你的不一定是匹配的,目前位置作者提供的运行环境是cuda8.0+cudnn5.1,这些版本跟nvidia的版本是有兼容问题的,一定要选择对应的版本号,例如我这里的cuda版本是9.2那nvidia版本必须是396,我原先装的是390版本,结果cuda总是安装失败。所以从一开始安装时候就明确nvidia+cuda+cudnn的版本号不能乱下,我电脑里的驱动版本是nvidia396.37+cuda9.2+cudnn7.1.4

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

开始安装navidia驱动,navidia驱动的安装也有好多方法,一种是直接在系统设置中==》软件更新==》附加驱动。当然我不太推荐这种方式,虽然很简单直接,但是我有点儿不放心哈。

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

第二种方法就是关闭图形界面,进行安装

  • 如果已经安装过了,先把老的驱动卸载sudo apt-get remove --purge nvidia*
  • 去nvidia官网下载

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

选择跟自己电脑匹配的驱动

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

这个对我来说真是个大坑,我搜索完后是390版本,就直接安装了,后面遇到问题再说 

  • 禁用nouveau驱动

sudo gedit /etc/modprobe.d/blacklist.conf

在文本最后添加:(禁用nouveau第三方驱动,之后也不需要改回来)

blacklist nouveau

options nouveau modeset=0

然后执行:sudo update-initramfs -u

重启后,执行:lsmod | grep nouveau。如果没有屏幕输出,说明禁用nouveau成功。

  • 禁用X-Window服务

sudo service lightdm stop #这会关闭图形界面,但不用紧张

Ctrl-Alt+F1进入命令行界面,输入用户名和密码登录即可

小提示:在命令行输入:sudo service lightdm start ,然后按Ctrl-Alt+F7即可恢复到图形界面。

  • 命令行安装驱动

#给驱动run文件赋予执行权限:

sudo chmod +x NVIDIA-Linux-x86_64-384.59.run

#后面的参数非常重要,不可省略

sudo ./NVIDIA-Linux-x86_64-384.59.run –no-opengl-files

–no-opengl-files:表示只安装驱动文件,不安装OpenGL文件。这个参数不可省略,否则会导致登陆界面死循环,英语一般称为”login loop”或者”stuck in login”。

–no-x-check:表示安装驱动时不检查X服务,非必需。

–no-nouveau-check:表示安装驱动时不检查nouveau,非必需。

-Z, --disable-nouveau:禁用nouveau。此参数非必需,因为之前已经手动禁用了nouveau。

-A:查看更多高级选项。

  • Driver测试:

nvidia-smi  #若列出GPU的信息列表,表示驱动安装成功

三、安装cuda

  • 先从官网下载,本地run文件,选好后可以看到下载的cuda版本号是cuda_9.2.148_396.37_linux.run

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

 当时下的时候没注意,现在看看后面那个396.37应该不是随便写的吧-.- ,应该是要匹配的nvidia的版本号吧,我之前一直装的是nvidia390的版本。你下载的文件最好放到home文件夹下,这样可以避免每次安装的时候都去找这些安装文件

  • 下载好后我们同样关闭图形界面

sudo service lightdm stop

然后执行

sudo ./cuda_8.0.61_375.26_linux.run --no-opengl-libs

 

--no-opengl-libs:表示只安装驱动文件,不安装OpenGL文件。必需参数,原因同上。注意:不是-no-opengl-files这里要注意有人说不加这个命令会造成ubuntu的循环登录,就是一直在登录界面,我以前在虚拟机上安装的时候遇到过这种问题,如果出现这种情况则进入tty,先卸载nvidia相关驱动 sudo apt-get remove --purge nvidia* 重新安装。

--uninstall (deprecated):用于卸载CUDA Driver(已废弃)。

--toolkit:表示只安装CUDA Toolkit,不安装Driver和Samples。

--help:查看更多高级选项

  • 之后,按照提示安装即可。我依次选择了:

accept #同意安装

n #不安装Driver,因为已安装最新驱动  这里要注意下,如果你版本是最新的了那无所谓可以选n。如果不是要选y,我之前电脑装的390版本,他提示我安装396,之前一直看别人的教程都是选n,我这里也没多想,也选n,结果后面遇到好多坑,最后一把重新安装的时候果断选y,更新到396版本。

y #安装CUDA Toolkit

<Enter> #安装到默认目录

y #创建安装目录的软链接

n #不复制Samples,因为在安装目录下有/samples

  • 设置环境变量

终端中输入

$ sudo gedit /etc/profile
           在打开的文件末尾,添加以下两行。
64位系统:
          export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
          export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

32位系统:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存文件,并重启。

因为source /etc/profile是临时生效,重启电脑才是永久生效。

这里有点与官方安装文档稍有不同,需要说明:
           官方文档里说只需在终端中运行上述两条export语句即可,但如果不将它们不写入/etc/profile文件的话,这样的环境变量在你退出终端后就消失了,不起作用了,所以写入才是永久的做法。

  • CUDA Sample测试:

#编译并测试设备 deviceQuery:

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

sudo make

./deviceQuery

如果测试的最后结果是Result = PASS 就成功了。如果是fail,并且提示CUDA driver version is insufficient for CUDA runtime version 那说明cuda和nvidia版本号不一致,去官网找相对应的nvidia和cuda

四、安装cudnn

  • 下在对应的版本按照官网教程,解压后cd到文件夹下复制:

cd cuda/include
           sudo cp cudnn.h /usr/local/cuda/include  #复制头文件

  • 再将进入lib64目录下的动态文件进行复制和链接:

cd ..
           cd lib64
          sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库
          cd /usr/local/cuda/lib64/
          sudo rm -rf libcudnn.so libcudnn.so.7    #删除原有动态文件
          sudo ln -s libcudnn.so.7.1.14 libcudnn.so.7  #生成软衔接
          sudo ln -s libcudnn.so.7 libcudnn.so      #生成软链接
          sudo ldconfig      #使配置生效

这里的版本号要注意,一定不要盲目的跟从网上教程,要看清自己的版本号,可以运行下面的命令查看

locate libcudnn.so

安装完后运行nvcc -V查看是否安装成功,若出现版本号信息则安装正确。

五、编译并运行openpose

  • 1. Download and install CMake GUI:

sudo apt-get install cmake-qt-gui

选择好路径,build路径自己新建,然后configure如果出现 configure done说明没错误,然后generate.

openpose环境搭建 ubuntu16.04+nvidia396.37+cuda9.2+cudnn7.1.4

这里会遇到几个问题,一是cudnn头文件和.so没有找到相关文件,编译错误,基本就是cudnn安装错误,或者环境变量设置不对。二是caffe文件为空,找不到caffe文件路径,这是因为github上下载的源码并没有下载caffe文件,需要手动下载caffe文件夹里的东西。

  • 2.开始编译

cd build/
           make -j`nproc`  ==》nproc是cpu核数乘以2 

这里在编译的时候注意还是要加的 我在编译CPU版本是直接 make -j,然后所有CPU内核的使用率直接就到100%,卡主不动了。

如果编译的时候出现问题比如Check failed: error == cudaSuccess (8 vs. 0) invalid device function参考链接https://blog.csdn.net/u010167269/article/details/50703923

如果出现CUDA driver version is insufficient for CUDA runtime version,参考cuda安装,验证cuda是否安装正确

  • 3.运行

参照doc文件夹下的quick_start.md,命令都有

# Ubuntu
           ./build/examples/openpose/openpose.bin --video examples/media/video.avi

GPU版本到此就结束了,CPU版本相对来说比较简单主要就是在cmake gui界面把GPU MODE设为CPU_ONLY,去掉勾选USE_CUDNN