网站首页 > 文章精选 正文
三4-5,编译caffe
cd
cd caffe #切换到caffe根目录
cp Makefile.config.example Makefile.config #复制编译文件
vi Makefile.config #编辑Makefile.config文件
在打开的Makefile.config文件中做如下修改;
三4-5-a,将#USE_CUDNN := 1取消注释;
USE_NCCL := 1 #如果有多个GPU,取消对这一行的注释。可以启用Caffe所需的NCCL
三4-5-b,INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include空格后然后添加/usr/include/hdf5/serial /usr/local/cuda-8.0/include/(添加cuda的include路径,按照自己的实际路径添加)
三4-5-c,LIBRARY_DIRS:=$(PYTHON_LIB)/usr/local/lib /usr/lib空格后添加/usr/local/cuda-8.0/lib64 /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial(添加cuda的lib路径,因软件的安装位置区别,按照自己的实际路径添加)
因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改以上两个的路径.
我这次的实际路径如下图:
注意,vi编辑器中,可用查找功能,在命令行模式下输入/xxx 回车(xxx为要查找的内容)按字母n 为查找下一个相同内容
三4-5-d,将CUDA_ARCH:= 后面的-gencode arch=compute_20,code=sm_20 和-gencode arch=compute_20,code=sm_21这两行删除。否则后续在编译caffe的Makefile.config时遇到报错
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).
原因是,Makefile中采用了CUDA的compute capability 2.0和2.1,这是两种计算能力。安装的CUDA版本是8.0,但 从CUDA 8.0开始compute capability 2.0和2.1被弃用了,如下图为删除后的截图。
三4-5-e,直接更改cuda的路径为自己的实际路径(如上图),否则稍后编译时运行到NVCC时又会报cuda的路径错误
三4-6,修改Makefile文件
vi Makefile #打开Makefile文件 注意不是Makefile.config
将
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) (删除或者注释掉)
改成
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FGS)
三4-7,修改host_config.h文件
vi /usr/local/cuda/include/host_config.h #编辑host_config.h文件
将
#error-- unsupported GNU version! gcc versions later than 6 are not supported!
前面加上//
三4-8,开始编译 j8的数字8是用8个核心处理的意思,根据实际的cpu配置来,数字越大处理越快
make all -j8
开始编译是出现如下错误:
/usr/bin/ld: cannot find -lhdf5_hl
/usr/bin/ld: cannot find -lhdf5
……
……
解决方法:搜索 libhdf5_serial.so.10.1.0 的位置 find / -name libhdf5_serial.so.10.1.0
cd到该目录下
cd /usr/lib/x86_64-linux-gnu/
输入以下指令:
ln libhdf5_serial.so.10.1.0 libhdf5.so
ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
ldconfig #使链接生效
切换到caffe目录,再次编译
cd
cd caffe/
make all -j8 #make时如果出错,找解决办法尝试后要先make clean 再make
例如报错如下:
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
解决方法:确定Makefile.config没有错误后,可能是没有安装BLAS基本线性代数子库
apt-get install libopenblas-dev
make clean
make all -j8
make -j32 runtest #先make all 再make runtest,顺序不能乱。这个等的时间长,只要一直是 RUN OK 就OK!
到这里Caffe开发环境就配置好了。可以测试一下,输出AlexNet的时间测试结果
./build/tools/caffe time --gpu 0 --model ./models/bvlc_alexnet/deploy.prototxt
测试python
cd caffe/python
python
import caffe
如果返回的结果是空的,没有报错,编译就成功了,退出python可按ctrl+D
但是我的报错如下:
解决办法:
apt-get install python-numpy python-setuptools python-pip cython python-skimage python-protobuf
cd caffe
make pycaffe #make时一定在caffe目录下
cd caffe/python
python
import caffe
三-5,安装digits
digits是caffe的一个可视化工具,可使我们对caffe的操作变得方便容易
cd #返回到主目录下
git clone https://github.com/NVIDIA/DIGITS.git digits #获取digits安装包
cd digits
apt-get install graphviz gunicorn #安装digits及依赖项
apt-get install graphviz #其他库
for req in $(cat requirements.txt); do sudo pip install $req; done #若使用linux系统环境下的python,请使用该语句 (我本次的选择是这个)
pip install -r requirements.txt #若使用Anaconda环境下的python,使用该语句进行更新
cd digits
chmod 777 digits-devserver #提升权限
./digits-devserver #打开digits
报错如下:
ValueError: Caffe executable not found in PATH
解决办法:在运行./digits-devserver若出现无法找到caffe目录的错误
三-5-1,解决方法
三-5-1a,检查当前envvar的值 (vi /etc/profile)
echo $CAFFE_ROOT
#输出为空
三-5-1b,把envvar加到~/.profile中 下次当你登录时会自动加载 (/root/caffe/ 这是我的实际路径)
vi ~/.profile
export CAFFE_ROOT=/root/caffe/ #在尾部添加
或者直接执行echo "export CAFFE_ROOT=/root/caffe/" >> ~/.profile
三-5-1c,加载新配置
source ~/.profile
三-5-1d,检查新配置
echo $CAFFE_ROOT
/root/caffe/ #输出为添加后的路径地址
操作完成以后执行下面的命令 再次打开digits 成功
./digits-devserver
上面的步骤是按默认配置启动digits,如果你想自定义配置,可以在启动前输入:
按默认配置启动digits,如果你想自定义配置,可以在启动前输入:
./digits-devserver --config #启动前设置更多选项
或者
python -m digits.config.edit –verbose #高级用法
在局域网的任意电脑上打开浏览器,地址栏输入 http://主机ip:5000/ 访问 DIGITS server 主页
没有固定ip条件的朋友也可在路由器里捆绑花生壳后添加端口映射供外网访问
- 上一篇: AI模型搭建-2
- 下一篇: Linux入门系列——软件包管理
猜你喜欢
- 2025-01-10 centos 7 升级OpenSSH
- 2025-01-10 Linux动态库和静态库教程
- 2025-01-10 Linux入门系列——软件包管理
- 2025-01-10 AI模型搭建-2
- 2025-01-10 在深度Linux玩Windows游戏,可以这样安装wine的最新版
- 2025-01-10 ubuntu24.04 vscode调用 c++ opencv报错问题
- 2025-01-10 Nginx使用Lua-nginx模块脚本连接Redis数据库读取静态资源
- 2025-01-10 实用 | 一个高性能通信库的简单使用分享
- 2025-01-10 ffmpeg安装方式及配合python使用
- 2025-01-10 如何修改容器时间而不改变宿主机时间?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)