

Ubuntu16.04安装cuda库,然后下载和编译caffe-ssd,自己实现基于GPU的训练
source link: https://blog.popkx.com/Ubuntu-install-cuda-libs-and-download-and-compile-caffe-ssd-training-with-gpu-by-myself/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近开始琢磨深度学习中经典的 SSD 网络,了解其基本原理后,迫不及待的想自己训练 SSD 玩玩,为之后的深入研究学习打下基础。当然了,最好把 GPU 利用起来,否则整个训练周期势必会比较久。为此,我把手边闲置的显卡 GeForce GTX 1050 安好,因为不习惯在 Windows 下开发,所以决定安装 Ubuntu 系统,本文记载在刚安装好的 Ubuntu 中搭建 caffe-ssd 开发环境的过程。
安装过程并不是一帆风顺,这也是我写下本文的基本原因——记录遇到的坑以及相应的解决问题。
检查显卡是否被Ubuntu识别
执行下面这行命令:
$ lspci |grep NVIDIA
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1c81 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 0fb9 (rev a1)
输出正常。一般还可以使用nvidia-smi
命令查看当前显卡的状态:
$ nvidia-smi
若是没有该命令,一般可以更新下驱动,更新驱动是简单的,因为我使用的 Ubuntu 是桌面系统,在系统设置里就能够直接更新:
安装 cuda-toolkit
先尝试了执行 apt 命令:
$ sudo apt install nvidia-cuda-toolkit
完成后,没有找到类似于 /usr/local/cuda 之类的目录,因此决定从官网下载安装,如下图选择后,会得到下载链接:
这里下载后,我多执行了一条 chmod +x 命令,否则似乎 .run
文件无法被执行。
$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
$ sudo chmod +x cuda_10.2.89_440.33.01_linux.run
$ sudo ./cuda_10.2.89_440.33.01_linux.run
此时得到下面这样的提示信息:
大意是系统中已经有驱动了,推荐我们先卸载它再安装。最好按照推荐来,执行下面的命令卸载已有驱动:
$ sudo service lightdm stop
$ sudo apt-get --purge remove nvidia*
$ sudo apt autoremove
$ sudo apt-get --purge remove "*cublas*" "cuda*"
$ sudo apt-get --purge remove "*nvidia*"
然后再重新运行安装程序,得到下面的选择信息:
Do you accept the above EULA? (accept/decline/quit):
输入 “accept
” 按下回车确认, 即可执行安装,完毕后,得到如下提示信息:
根据提示,我们需要把 /usr/local/cuda-10.2/lib64
和 /usr/local/cuda-10.2/bin
分别加入到环境变量 LD_LIBRARY_PATH 和 PATH 中,因此在 ~/.bashrc
中添加之:
$ vim ~/.bashrc
在最后加入下面两行
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.2/lib64
export PATH=$PATH:/usr/local/cuda-10.2/bin
保存后,输入下面的命令更新:
$ source ~/.bashrc
安装依赖库
Ubuntu 安装 caffe 的依赖库很方便,只需执行下面的 apt 命令就可以了:
$ sudo apt update
$ sudo apt install git
$ sudo apt install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt install --no-install-recommends libboost-all-dev
$ sudo apt install libatlas-base-dev
$ sudo apt install python-dev
$ sudo apt install libgflags-dev libgoogle-glog-dev liblmdb-dev
各个依赖库的基本作用可以参考我的这篇文章。
编译 caffe-ssd
这个其实可以参考https://github.com/weiliu89/caffe.git,文档写的很细了。执行下面的命令:
$ git clone https://github.com/weiliu89/caffe.git
$ cd caffe
$ git checkout ssd
$ cp Makefile.config.example Makefile.config
接下来其实就是编译 caffe,执行 make 即可,期间遇到的问题可以参考我之前的这篇文章。
$ make -j
不过,之前的那篇文章编译的是 CPU_ONLY 版本的 caffe,没有遇到下面这两个问题,这里把解决方案列一下:
nvcc fatal : Unsupported gpu architecture 'compute_20'
这个问题其实是 cuda 版本不匹配导致的,打开 Makefile.config 文件,找到相应位置:
# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-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 \
-gencode arch=compute_61,code=compute_61
因为我用到的 cuda 版本号为 10.x,所以按照提示信息,把下面这两行注释掉或者删除即可解决:
-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
cannot find -lhdf5_hl / -lhdf5
我们前面使用的 apt 命令安装的 hdf5 带了 serial
后缀,因此在相应的库路径里,其实链接库也是带 serial 后缀的,解决方法很简单,执行下面的命令即可:
$ cd /usr/lib/x86_64-linux-gnu //hdf5库链接所在路径
$ sudo cp libhdf5_serial.so libhdf5.so
$ sudo cp libhdf5_serial_hl.so libhdf5_hl.so
编译好 caffe 后,执行下面的命令:
$ make py
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory
compilation terminated.
Makefile:507: recipe for target 'python/caffe/_caffe.so' failed
make: *** [python/caffe/_caffe.so] Error 1
报错了,按照提示信息,应该是没找到 python 的 numpy 库,执行下面的命令安装之:
$ sudo apt install python-pip
$ sudo pip install numpy
这里使用 python2.7 安装 numpy 库可能会遇到的问题是:
RuntimeError: Python version >= 3.5 required.
我的机器 python 链接的是 python-2.7,而 caffe 默认使用的也是 python2,因此这里就懒得修改了,尝试安装更低版本的 numpy(版本尽量高一点,否则稍后的ssd生成数据部分的python程序不能正常运行):
$ sudo pip install numpy==1.12.0
...
Successfully installed numpy-1.12.0
此时便可成功安装,安装成功后,可以在下面的目录找到 numpy:
/usr/local/lib/python2.7/dist-packages/numpy
这样看来,还需要修改 Makefile.config 文件中关于 numpy 路径的内容:
现在再执行 make py
便可成功:
$ make py
$ make test -j3
make test
可以编译出若干测试程序。
下载和制作数据集
编译工作完成后,就可以下载数据集准备训练了。要是为了快速测试,可以使用默认目录,也即将数据集下载到 $HOME
目录里:
$ cd $HOME/data
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
$ tar -xvf VOCtrainval_11-May-2012.tar
$ tar -xvf VOCtrainval_06-Nov-2007.tar
$ tar -xvf VOCtest_06-Nov-2007.tar
下载完毕后,便可执行下面两条命令制作数据集:
$ ./data/VOC0712/create_list.sh
$ ./data/VOC0712/create_data.sh
执行这两条命令前,我们可能需要将 caffe 库的链接路径,以及编译后的 python 目录添加到相应的环境变量:
$ export LD_LIBRARY_PATH=/usr/local/cuda-10.2/targets/x86_64-linux/lib
$ export PYTHONPATH=<caffe根目录>/python
然后需要额外安装两个 python 库,执行下面两条命令即可:
$ sudo apt-get install python-skimage
$ sudo pip install protobuf
下载 VGG 网络
ssd 网络似乎用到了一部分的 VGG 网络,点击这里可以下载到相应的文件。同样的,为了快速实验,可以将其下载到默认目录:
$ cd <caffe源码根目录>/models
$ mkdir VGGNet
$ cd VGGNet
# wget -c <VGG网络下载链接>
# unzip VGG.zip
训练很简单,只需要执行下面的命令即可:
$ python examples/ssd/ssd_pascal.py
可以看出,负责训练的脚本即为 ssd_pascal.py,若是训练过程中有需要修改的东西,大都在该文件中完成。例如我的显卡比较 low,显存只有 2GB,在执行上述命令后,得到错误信息“显卡内存不足”,便可在 ssd_pascal.py 文件内搜索“batch_size”关键字,将其改小。
训练过程中,能够发现 loss 总体是不断变小的,如下图:
这里我遇到了一个问题,使用默认参数训练时,几百次迭代后,出现了 loss 为 nan 的情况,我把 ssd_pascal.py 里的 base_lr 缩小 10 倍解决了该问题。(若是还出现这个问题,再缩小10倍,或者尝试放大一点。)
Recommend
-
15
Vmware Ubuntu16.04 x64位开启物理串口,并且通信,apt安装minicom失败,自行编译安装,解决error: BC undeclared (first use in this function)错误 ...
-
12
最近几年,人工智能发展迅速,很多领域已经开始商用,最为有名的当属语音识别,和以人脸识别为代表的机器视觉。如果读者和我一样爱折腾,相信也会对这些有兴趣,希望打造一款自己的人脸识别应用。OpenCVOpenCV是一个基于BSD许可(开源)发行的...
-
8
Unity游戏开发入门第1节,下载和安装 发表于 2019-04-29 08:04:53...
-
8
ubuntu16.04下安装cv_bridge遇到的问题 系统是Ubuntu16.04。记录一下最近遇到的各种坑 在接手师兄的code时,catkin_make失败,说是找不到cv_bridge。是链接opencv和ROS之间的桥梁。我安装的有opencv3,但是不晓得为啥子没有这个。就直接搜了...
-
10
Ubuntu16.04安装/升级openssl到1.1版本 作者: xusx 分类: Linux 发布时间: 2021-06-11...
-
11
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kuberne...
-
6
Ubuntu16.04安装nvidia驱动+CUDA8.0时遇到的问题 发表于...
-
7
欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类汇总...
-
9
如何下载和安装 Windows 11 主题 发布日期:2023-06-24 分类:Windows 阅读(...
-
5
Google Chrome 是一款广受欢迎的网络浏览器,它以速度快、性能高、界面简洁和内置功能众多而闻名...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK