Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Caffe:CPU模式下使用openblas-openmp(多线程版本)

Caffe:CPU模式下使用openblas-openmp(多线程版本)

作者头像
10km
发布于 2019-05-25 14:33:08
发布于 2019-05-25 14:33:08
2.4K00
代码可运行
举报
文章被收录于专栏:10km的专栏10km的专栏
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433726

从所周知,所有的深度学习框架使用GPU运行是最快的,但是在不具备Nvidia显卡的环境下只使用CPU来运行,慢就慢点吧,对于学习阶段还是够用的。

Caffe用到的Blas可以选择Altas,OpenBlas,Intel MKL,Blas承担了大量了数学工作,所以在Caffe中Blas对性能的影响很大。

MKL要收费,Altas略显慢(在我的电脑上运行Caffe自带的example/mnist/lenet_solver.prototxt,大概需要45分钟。。。)

根据网上资料的介绍使用OpenBlas要快一些,于是尝试安装使用OpenBlas来加速训练过程。

我用的系统是CentOS6.5 64位,双至强处理器(24核),CPU是够强悍的,只是没有Nivdia显卡

安装OpenBlas的过程有两个办法,最简单的就是安装yum源提供的编译好的二进制版本。另一个是自己下载源码去编译。现在先讲最简单的yum安装

yum 安装

执行

sudo yum install openblas-devel

安装了如下软件

openblas.x86_64 0.2.18-5.el6 @epel openblas-devel.x86_64 0.2.18-5.el6 @epel openblas-openmp.x86_64 0.2.18-5.el6 @epel openblas-threads.x86_64 0.2.18-5.el6 @epel

OpenBlas这就算安装好了,简单吧?

然后,如下编译Caffe,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh
# 执行cmake生成Makefile
mkdir build && cd build
cmake -DBLAS=Open -DCPU_ONLY=ON -DBUILD_python=OFF -DBUILD_python_layer=OFF -DBoost_INCLUDE_DIR=/usr/include/boost148 -DBoost_LIBRARY_DIR=/usr/lib64/boost148 ..
# 开始编译 24线程
make install -j 24

-DBLAS=Open用于指定BLAS使用OpenBlas,也可以用cmake-gui修改,如下图

关于CentOS6.5下编译Caffe的过程参见我的另一篇博客《CentOS6.5编译Caffe过程记录(系统存在多个编译器)》

编译好后,执行ldd查看caffe的依赖库,指向了/usr/lib64/libopenblas.so.0

mnist测试

再执行mnist训练,大概耗时13分钟,比用altas速度快了3倍多。

./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt

但运行时我也发现,虽然电脑有24核,实际只用到一个核,也就是说Caffe在运行时基本上是单线程工作的。。。

请注意前面安装OpenBlas的软件列表,有一项是openblas-openmp,看到这里我似乎明白了什么。到网上一查,果然openblas-openmp是OpenBlas的多线程优化版本。

在/usr/lib64下不仅有libopenblas.so.0(单线程版本),还有一个libopenblasp.so.0,这个就是前面软件列表中的openblas-openmp的so文件(多线程版本),

于是用cmake-gui打开build目录如下图将OpenBLAS_LIB改为多线程版本,再点”Generate”按钮重新重新Makefile。

重新执行make编译Caffe后再执行ldd,显示已经依赖/usr/lib64/libopenblasp.so.0

再执行mnist训练,CPU立即被占满了

但耗时20分钟,却更慢了,为什么?现在也没搞明白。

于是修改OMP_NUM_THREADS或(OPENBLAS_NUM_THREADS)参数减少OpenBlas的线程数再试

export OMP_NUM_THREADS=4 && ./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt

关于OMP_NUM_THREADSOPENBLAS_NUM_THREADS的详细用法说明参见《OpenBlas github网站》

训练时间减少到10分钟,CPU跑满4核

编译安装OpenBlas

https://github.com/xianyi/OpenBLAS/tree/v0.2.18下载0.2.18版本,解压缩后开始编译安装。编译时使用USE_OPENMP=1选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh
unzip OpenBLAS-0.2.18.zip
cd OpenBLAS-0.2.18
make USE_OPENMP=1
sudo make install

关于OpenBLAS更详细的安装说明参见《OpenBLAS编译和安装简介》

默认安装到/opt/OpenBLAS下,cmake生成Caffe的Makefile时会自动找到,剩下的步骤就和前面一样了。

最后的问题:

用OpenBlas时,OPENBLAS_NUM_THREADS设置为最大,让CPU负载跑满,并不能大幅提高速度,这是为什么?一直没搞明白。

看到Caffe上有人提交了《Parallel version of caffe for CPU based on OpenMP》,据说在CPU模式下有高达10倍的但似乎为了减少代码维护的复杂性,Caffe官方并没有接受这个PR。根据Caffe的作者Yangqing Jia的回复,应该会在Caffe2中解决这个问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年10月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
caffe学习笔记2-caffe命令行训练与测试
Train训练(用cmdcaffe命令行) (solver.prototxt) 在使用cmdcaffe时,需要默认切换到Caffe_Root文件夹下,需要使用上述命令才可以使用tools下的caffe接口,因为caffe默认都需要从根目录下面执行文件。 1、训练模型,以mnist为例子(solver.prototxt) ./build/tools/caffe train -solver=examples/mnist/lenet_solver.prototxt 从中断点的 snapshot 继续训练(solver.prototxt + .solverstate) ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -snapshot examples/mnist/lenet_iter_5000.solverstate 2、观察各个阶段的运行时间可以使用(train_test.prototxt) ./build/tools/caffe time -model examples/mnist/lenet_train_test.prototxt -iterations 10 3、使用已有模型提取特征(caffemodel + train_val.prototxt + fc7 + num_mini_batches) ./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/feature_extraction/train_val.prototxt fc7 examples/temp_features 10 lmdb
用户1148525
2019/05/26
4570
Caffe:CPU模式下使用Intel MKL做mnist训练
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52724477
10km
2019/05/25
1.2K0
Caffe 关于 LetNet-5 之 lenet_solver.prototxt 解析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjunhit/article/details/53611240
用户1148525
2019/05/28
4020
Caffe使用openblas实现CPU模式使用多线程
(接前文)在Caffe的默认编译安装使用的是ATLAS库,但是这个版本的BLAS不能利用多核CPU,要使用多核CPU并行计算来加速Caffe则需要使用OpenBLAS。下面就说说怎样来使用OpenBLAS。 在默认编译Caffe后,我们使用“ldd build/tools/caffe”命令查看时可以看到使用的是openblas的单线程版本,如下: $ ldd build/tools/caffe | grep openblas libopenblas.so.0 => /lib64/libopenbla
kongxx
2018/05/14
1.7K0
ubuntu16 CUDA 编译opencl caffe版本并通过mnist训练测试
本文介绍了在Ubuntu 16.04上编译基于CUDA的OpenCL Caffe版本,并使用MNIST数据集进行训练和测试。首先介绍了硬件和软件环境的配置,然后说明了如何安装和编译Caffe。最后通过训练和测试展示了Caffe在MNIST数据集上的应用。
10km
2018/01/03
1.5K0
ubuntu16 CUDA 编译opencl caffe版本并通过mnist训练测试
Caffe MNIST 简要分析
MNIST database,一个手写数字的图片数据库,每一张图片都是0到9中的单个数字。每一张都是抗锯齿(Anti-aliasing)的灰度图,图片大小2828像素,数字部分被归一化为2020大小,位于图片的中间位置,保持了原来形状的比例.
Yano_nankai
2018/10/08
5440
Caffe MNIST 简要分析
机器学习库初探之 Caffe
本文介绍了如何使用Caffe进行深度学习模型的训练和部署。首先介绍了Caffe的基本情况和特点,然后详细讲解了Caffe中模型训练和部署的流程和步骤。最后,探讨了如何使用Caffe进行图像分类和物体检测任务。
吕晟
2017/07/07
3.6K1
机器学习库初探之 Caffe
Caffe源码调试
本文介绍了如何使用Caffe和Python在MNIST数据集上训练一个简单的CNN分类器。首先,介绍了MNIST数据集的特点,然后介绍了使用Caffe搭建模型的过程。接着,详细描述了如何利用Python和Caffe进行训练,并通过实验比较了两种训练方法。最后,总结了本文的主要贡献和未来的研究方向。
Tyan
2017/12/28
1.7K0
Caffe源码调试
caffe 的命令行训练与测试
本文转自: http://blog.csdn.net/yiliang_/article/details/60464968
用户1148525
2019/05/26
1.6K0
从零开始安装 Caffe --CPU only----没有 pycaffe
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjunhit/article/details/73456860
用户1148525
2019/05/28
1.1K0
caffe初体验
caffe是一个深度学习的框架, 具体我也不太清楚, 可以自行百度吧, 我也是刚刚知道有这么一个框架, 才疏学浅啊.
烟草的香味
2019/07/25
4840
caffe c++示例(mnist 多层感知机c++训练,测试)
caffe训练网络模型一般直接使用的caffe.bin: caffe train -solver solver.prototxt,其实这个命令的本质也是调用c++的Solver.
bear_fish
2019/02/25
1K0
caffe c++示例(mnist 多层感知机c++训练,测试)
Caffe for windows 训练minst和cifar-10
本文介绍了如何使用Caffe在Windows平台上进行深度学习,包括MNIST和CIFAR-10数据集的训练和测试。首先介绍了如何安装配置Caffe,然后讲解了如何使用Caffe中的mnist和cifar10训练和测试网络模型。最后,介绍了一种使用Caffe进行CIFAR-10训练的新的训练方法。
码科智能
2018/01/02
7860
Caffe for windows 训练minst和cifar-10
迁移学习︱艺术风格转化:Artistic style-transfer+ubuntu14.0+caffe(only CPU)
本节内容来源于CDA深度学习课程,由唐宇迪老师所述,主要参考论文:《Image Style Transfer Using Convolutional Neural Networks》(下载链接)
悟乙己
2019/05/26
1.6K0
怎么使用 Caffe 进行 LetNet-5 的训练和预测
在 LeNet5的深入解析 我们已经对 LetNet-5 网络结构做出了详细的描述,接下来我们将深入分析 Caffe 中怎么使用 LetNet-5 的这个模型进行预测。 Caffe 中关于 LetNet-5 的实现文件主要存放于 https://github.com/BVLC/caffe/tree/master/examples/mnist
用户1148525
2019/05/26
7900
CentOS6.5下为编译Caffe升级python2.6到2.7
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52766298
10km
2019/05/25
4380
caffe详解之solver
通过前面的讲解我们了解了不同的层,作为我们设计深度神经网络的积木,梳理了caffe中给定的损失函数(当然我们也可以针对自己的问题设计),并进一步对优化算法进行了细致的总结,接下来我们将caffe中需要配置的solver.prototxt中涉及到的参数进行详细剖析。 我们首先看一看lenet中定义的solver配置文件。
AI异构
2020/07/29
5450
caffe详解之solver
Caffe深度学习框架搭建
在整理最近学习的知识时,突然意识到机器学习与深度学习的差别。之前学的gd算法,logistic回归算法,svm算法等都属于机器学习的范畴,而深度学习与他们其实是并列的关系,同属机器学习这个大的范畴。个人认为深度学习其实是曾经没落的BP神经网络的发展,可以说神经网络就是趁着深度学习的浪潮借尸还魂的。不过,深度学习想要理解起来也不是那么容易的。既然如此,我们何不搭建一个黑盒环境,先直观感受一下深度学习的魅力再慢慢研究呢?这里我们用到的工具就是Caffe深度学习框架。
mythsman
2022/11/14
5950
Caffe深度学习框架搭建
xgboost 多线程,解决默认开启线程数为cpu个数问题
在一台48c的服务器上,就import xgboost,还没进行训练,通过命令发现,线程数就达到48个 代码:
lovelife110
2021/01/14
2.2K0
xgboost 多线程,解决默认开启线程数为cpu个数问题
Caffe训练模型时core dump
在安装好的 caffe 环境里训练模型时报错 $ cd <caffe根目录> $ ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt ... I0111 15:27:57.013530 20030 layer_factory.hpp:77] Creating layer mnist F0111 15:27:57.013805 20030 db_lmdb.hpp:15] Check failed: mdb_status
kongxx
2018/05/14
1.2K0
相关推荐
caffe学习笔记2-caffe命令行训练与测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验