由于公司内网无法连接互联网,因此只能在离线环境下编译caffe(GPU)
公司内网默认安装docker和NVIDIA-docker,如果没有安装的话可以参考这篇文章:
Centos下安装docker及NVIDIA-docker: https://blog.youkuaiyun.com/qq_38636133/article/details/93772623
本文资源:https://pan.baidu.com/s/1werdgQa07L-1JWbl4X6IMw
提取码:0g76
一、前期环境准备:
(以下内容均在本文资源中)
系统环境:Centos7
CUDA&cudnn版本:9.0-cudnn7-devel-centos7(CUDA9.0&cudnn7)
离线yum源:yumcafffe.tar
caffe: https://github.com/BVLC/caffe caffe-master
步骤:
1. 登陆云平台 or UNIX类系统
*注意!宿主机上的虚拟机是无法调用NVIDIA显卡的,因此在虚拟机中无法配置GPU版本的caffe。
2. 在自己的工作目录中导入镜像
docker load –i 9.0-cudnn7-devel-centos7.tar
3. 之后创建脚本文件,用于创建容器
vi createdocker.sh
4. 在脚本文件中输入内容(按i进入insert,之后编辑)
nvidia-docker run –it –d –e NVIDIA_VISIBLE_DEVICES=1 - - name (容器名称) –v (宿主机路径): (容器路径) -p 30001:8888 –p 40001:9999 nvidia/cuda:9.0-cudnn7-devel-centos7
这里解释一下,宿主机路径:容器路径从根目录写起
30001:8888和40001:9999为容器端口:宿主机端口
cuda:9.0-cudnn7-devel-centos7为压缩包里的cuda-devel文件
5. 之后按esc,再输入:wq保存并退出
6. 之后在脚本文件创建的目录下执行脚本,创建对应容器
sh. createdocker.sh
此时输入docker ps -a查看,可以看到新建的容器
7. 进入刚才创建的容器
docker exec –it (容器name) /bin/bash
8. 在容器内指定目录下解压yumcaffe.tar文件
tar -xvf yumcaffe.tar
9. 删除容器中原有的yum源(离线安装需要自己配置yum源),如果不删除则添加local.repo时会找不到
10. 进入yum源库文件
cd /home
cd /etc/yum.repos.d
11. 在 yum.repos.d文件夹下执行(这一步需要注意!!!不要一不小心改到其他目录误删了文件!)
rm –rf *
12. 之后配置yum本地源
vi local.repo
13. 写入内容(i)
[local]
name=local
baseurl=file:///(yumcaffe解压路径)
enabled=1
gpgchekc=0
14. 退出并保存(esc & :wq)
15. 更新本地源文件
yum clean expire-cache
yum makecache
16. 输入yum list即可看到配置好的本地源
二、caffe依赖库配置
按照caffe官网的步骤来
yum install gcc gcc-c++
yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
yum install gflags-devel glog-devel lmdb-devel
yum install atlas-devel
yum install python-devel
yum install openblas-devel
yum install make
三、编译caffe
修改Makefile.config文件
①将# USE_CUDNN := 1
改为: USE_CUDNN := 1
②将BLAS := atlas
改为: BLAS := open
将# BLAS_INCLUDE := /path/to/your/blas
改为:BLAS_INCLUDE := /opt/OpenBLAS/include
将# BLAS_LIB := /path/to/your/blas
改为:BLAS_LIB := /opt/OpenBLAS/lib
③将两行-gencode arch=compute_20,code=sm_20 \
注释掉或者删除(使用的cuda9.0版本,其他版本根据文档要求注释即可)
之后cd caffe-master
make clean
make all –j8
稍等片刻编译完成
make test
make runtest
四、基于mnist数据集训练examples数据
编译完成后以mnist数据集为例子进行训练
将mnist_test_lmdb文件夹和mnist_train_lmdb文件夹mv至examples/mnist/目录下
在配置好GPU的环境后无需额外更改设置
之后在caffe根目录下执行
time sh examples/mnist/train_lenet.sh
迭代10000次,其他参数均为默认值,最终精度0.99 用时13s