Mxnet+nnpack安装教程,以及踩过的坑

一、NNPACK

1、NNPACK简介:

NNPACKfacebook开发,是一个加速神经网络计算的加速包,NNPACK可以在多核CPU平台上提高卷积层计算性能NNPACK采用的快速卷积算法是基于Fourier transform 和 Winograd transform算法。

http://blog.csdn.net/mrhiuser/article/details/52767491


1、NNPACK编译(linux  ubuntu14.04平台下)

参考官网教程:https://github.com/Maratyszcza/NNPACK

1.1 下载,生成和安装PeachPy

git clone https://github.com/Maratyszcza/PeachPy.git
cd PeachPy
[sudo] pip install --upgrade -r requirements.txt
python setup.py generate
[sudo] pip install --upgrade .

1.2 安装ninja

sudo apt-get install ninja-build || brew install ninja
[sudo] pip install ninja-syntax

坑1:等1.3步安装好nnpack后,输入:ninja编译时会出现unknown pool name的错误。因为这是老版ninja,对ubuntu16.04以下版本可能不兼容,需要重新下载编译。

解决方法参考:https://github.com/Maratyszcza/NNPACK/issues/3

https://github.com/ninja-build/ninja/releases   中下载ninja-linux.zip,解压后得到一个ninja.exe,在其当前目录下输入:

[sudo] pip install ninja

即可完成ninja安装。

1.3 克隆和生成NNPACK

git clone --recursive https://github.com/Maratyszcza/NNPACK.git
cd NNPACK
python ./configure.py
ninja

如果需要用其它框架调用nnpack库,进行加速,将第三行改为:

python ./configure.py --enable-shared

坑2:第一行一定要用git下载nnpack,尽量避免自己下载zip压缩包直接编译,自己下载可能存在文件下载不全的问题。

 

编译通过即可,关于测试可以参考1、NNPACK简介中博客。

参考官网教程:http://mxnet.io/get_started/setup.html#installing-mxnet


二、mxnet

1、mxnet简介

mxnet是一个深度学习框架,比较灵活,轻量级,适合于移植。

2、mxnet编译(linux  ubuntu14.04平台下,CPU模式,调用nnpack接口)

2.1 安装必要的依赖项

sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev

2.2 下载mxnet

git clone --recursive https://github.com/dmlc/mxnet

坑1:同上,第一行一定要用git下载mxnet(最新的mxnet支持nnpack接口2016.11.22),尽量避免自己下载zip压缩包直接编译,自己下载可能存在文件下载不全的问题。

2.3 编译支持nnpack接口的CPU版本mxnet

找到mxnet/make/子目录,把该目录下的config.mk复制到mxnet/目录,用文本编辑器打开,找到并修改以下两行:

USE_NNPACK = 1   //打开nnapck

USE_NNPACK_NUM_THREADS= 4   //设置4线程

修改之后,在mxnet/目录下编译

make -j4

2.4Python支持

cd python;
python setup.py install

有些时候需要安装setuptoolsnumpy(sudo apt-get install python-numpy)


三、mxnet中使用nnpack库进行加速
参考教程:https://github.com/dmlc/mxnet/pull/3666
根据教程,我们做一个卷积的加速对比试验。在tests/python/predict/下新建一个conv_test.py文件,内容如下:

import os, sys, time
curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__)))
sys.path.append("../../../python/")
import numpy as np
import mxnet as mx

data = mx.sym.Variable("data")
net = mx.symbol.Convolution(data=data, num_filter=28, kernel=(9, 9), stride=(1,1), pad=(0,0))

mod = mx.mod.Module(symbol=net)
mod.bind(data_shapes=[("data" , (1,3,1000,1000))], for_training=False, inputs_need_grad=False)
mod.init_params()

d = np.ones((1,3,1000,1000))
start = time.time()
dataiter = mx.io.NDArrayIter(d)
r = mod.predict(dataiter).asnumpy()
print 'time: ' , (time.time() - start)

运行该文件后可能出现如下错误:
1、找不到头文件”nnpack.h”
解决方案:将头文件拷贝到/usr/local/include/中
Sudo cp NNPACK/include/nnpack.h /usr/local/include/
如果上述不能解决,则通过如下命令,将整个文件夹都拷贝进去。
Sudo cp –r NNPACK/include/* /usr/local/include/
2、找不到库文件
问题:OSError:libnnpack.so:cannot open shared object file:No such file or directory
解决方案:
① Sudo gedit /etc/ld.so.conf  //打开文件
② 在文件中添加路径(libnnpack.so的路径)
③ Sudo ldconfig(使其生效)。

任务完成,运行python conv_test.py,文件即可运行。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值