前言
由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。
什么是NCNN
ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型,如pytorch、tensorflow、onnx等,以及多种硬件后端,如x86、arm、riscv、mips、vulkan等。按照其官网的说明:该框架是一个为手机端极致优化的高性能神经网络前向计算框架,从设计之初深刻考虑手机端的部属和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。
如何编译安装NCNN
Liunx情况下编译安装文档 点击进入
首先明确由于NCNN为C++实现,所以在编译安装前,需要一些依赖,在官网推荐的编译安装文档中,这样写道:
明显在Linux系统中需要 g++ cmake protobuf opencv (macOS 需要glslang)
一般来讲,Liunx系统一般会内置 g++ 和 cmake,但是版本一般是比较低的版本,主要为了系统的稳定,所以在编译安装NCNN过程中,我们需要对其进行升级操作,以下所有环境的配置和安装均在普通用户环境中进行。
依赖环境配置和安装
1 g++环境
一般来讲,Centos 7 内置的 g++版本为4.8.5,这个版本一般比较旧,现在很多编译都需要在g++ 5.0及以上环境进行,这里给大家推荐我之前的一篇博文,在非root权限下进行 gcc g++的升级,点击进入,这里需要注意,如果您也是集群系统,在编译GCC或者 G++过程中,需要注意下面的细节,这时我踩过的坑,原则上可以装更高的版本现在貌似 G++发展到 9.xxx的版本了。
2 cmake
Centos7内置的Cmake版本一般为2.8.12,这个版本需要升级到 3.*版本,您可以访问 该链接 进行下载对应版本的Cmake,这里以我安装的 cmake 3.17.2为例,推荐大家直接根据系统,然后下载已经编译好的版本,这样子可以省去源码安装,直接配置即可。当然您也可以下载源码版本,自行进行编译安装。这里我简要介绍下两种不同方法的配置安装过程。然后再介绍一种非常简单的基于 yum install 的方法
2.1 Cmake 编译好的版本
即上面的 cmake-3.17.2-Linux-x86_64.tar.gz,这种是最简单的策略,只需要解压后,在用户的环境下进行配置即可使用,比较推荐这个方法。
2.1.1 您可以使用命令下载,也可以直接下载好,传到自己的服务器
如果您直接下载,下载命令:
wget https://cmake.org/files/v3.17/cmake-3.17.2-Linux-x86_64.tar.gz
2.1.2 解压,关键的执行文件在 bin 目录
tar xzvf cmake-3.17.2-Linux-x86_64.tar.gz
2.1.3 配置环境变量
这里我们需要知道,在Linux系统中环境变量有多种,
其中系统环境变量的设置(需要管理员权限)主要有下面的三种方式:
1 /etc/profile :用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。
2 在/etc/profile.d目录中增加环境变量脚本文件,这是Linux推荐的方法,/etc/profile在每次启动时会执行/etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d下对应的 shell 脚本即可。/etc/profile.d目录下有很多脚本文件,例如:
/etc/profile.d目录中的oracle.sh是Oracle数据库的环境变量配置文件,
3 在/etc/bashrc文件中设置环境变量。该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。
由于我们没有系统管理员权限,所以需要进行用户环境设置,用户环境变量只对当前用户生效,设置用户环境变量也有多种方法。
在用户的主目录,有几个特别的文件,用ls是看不见的,用 ls .bash_* 可以看见。
1).bash_profile(推荐首选)
当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
2).bashrc
当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
3).bash_logout
当每次退出系统(退出bash shell)时执行该文件。
4).bash_history
保存了当前用户使用过的历史命令。
综合上面的内容,可以看出 环境变量脚本文件的执行顺序
/etc/profile->/etc/profile.d->/etc/bashrc->用户的.bash_profile->用户的.bashrc
这里我们选用对系统影响最低的 环境变量配置方式 :用户的.bashrc,这样比较保险,也比较稳妥。
vi ~/.bashrc
添加下面的内容
这里需要注意 : 这个符号在 Liunx 系统中为 中文分号或者 append的意思,指的是将我们的 cmake/bin文件夹路径添加至系统路径 $PATH 中,我这里将 : $PATH 置后,即将cmke/bin路径加到了原来的系统PATH之前,即优先加载,您也可以像第二种方式那样书写,在原PATH后加上 cmake/bin路径。
export PATH=/home/y192353/butterfly/extension/cmake_3_17_2/bin:$PATH
或
export PATH=$PATH:/home/y192353/butterfly/extension/cmake_3_17_2/bin
以上配置好后,直接运行环境变量生效命令
source ~/.bashrc
然后查看 cmake 是否配置成功
cmake --version
即安装成功!
2.2 Cmake 源码编译
这需要您下载Cmake的源码,下面箭头指代的地方
下载解压后,文件夹如下,包含各种源码文件
编译运行命令:
如果您尚未解压,先进行解压
tar -zxvf cmake-3.17.2.tar.gz
然后进行逐步编译
#在解压后的cmake-3.17.2文件夹下 创建 build 文件夹
mkdir build
cd build
#这一步很关键,即确定安装路径, 安装至用户对应的文件夹,不然会报权限异常,因为一般默认安装在 (/usr/local/..中)
#这是通过 配置文件进行指定安装目录的
../configure --prefix=/yourPath/cmake-3.17.2
#开启编译安装 这个需要等待一会儿
gmake && gmake install
上述编译安装完成后,即可以进行路径配置了,具体和上面 【2.1.3 配置环境变量】小节一样,不再赘述,只不过这个时候,您的路径需要是上面 --prefix 指定的路径。
2.3 Yum install 直接安装 cmake3(该方法需要后续如果有cmake的操作,要调用 cmake3 才可以)
不想按照上面的方法一步步配置,您可以直接使用下面的命令
yum install cmake3
直接进行安装,然后编译过程中使用 cmake3 进行就行了
3 OpenCv编译安装
先检测自己的系统内是否已经安装过了 OpenCv
pkg-config --modversion opencv
如果已经安装了opencv,会有打印输出,如果没有安装,则需要安装了。
3.1 OpenCv的安装(这里以Opencv3.4.16为例,当然OpenCv4.*也类似),这里建议大家使用 OpenCv4,根据官网的说明OpenCv3会逐渐停止更新,然后推出 OpenCv5
OpenCv的编译源码可以在 点击这里 找到
下载源码后,使用命令解压
unzip opencv-3.4.16.zip
解压后的文件夹
编译安装
cd opencv-3.14.6
#创建编译文件夹
mkdir build
cd build
#使用cmake 进行编译 最后面的两个点也要加上,即默认的安装路径设置为 CMAKE_INSTALL_PREFIX=/YourPath/opencv_3_4_16
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/YourPath/opencv_3_4_16 -D WITH_TBB=ON -D WITH_V4L=ON -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D WITH_EIGEN=ON -D WITH_CUDA=ON -D WITH_CUBLAS=ON ..
#在编译和安装过程中,可以放在 计算节点(GPU)节点进行编译安装
#这里 可以使用 -j16 -j32 原则上都可以,旨在加速编译,需要较长时间
make -j8
#安装,安装的内容放在了 /YourPath/opencv_3_4_16
make install
CMAKE_INSTALL_PREFIX=/YourPath/opencv_3_4_16用来控制安装的路径,否则会产生安装路径权限不够的问题
如果您安装的是 OpenCv4需要在 cmake 命令中再加入:
OPENCV_GENERATE_PKGCONFIG=ON
用来控制是否生成pkg_config文件。这里是opencv3不同的地方,opencv4中如果不加该命令将不会生成pkgconfig,安装完成后找不到opencv.pv文件一般都是因为没加这句控制命令导致的。
3.2 环境变量配置
打开 ~/.bashrc
vi ~/.bashrc
添加内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/YourPath/opencv_3_4_16/lib64/pkgconfig
export PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/YourPath/opencv_3_4_16/lib64/:$LD_LIBRARY_PATH
下面是我的环境变量配置文件,具体路径信息已经隐藏了,整体上就是这个样子
将环境变量生效
source ~/.bashrc
然后检查 opencv 的安装情况即可
pkg-config --modversion opencv
4 安装 protobuf
protobuf (Google Protocol Buffer)是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。由于我们最终转化的是模型,所以需要这样一个序列化工具。NCNN中需要使用到 protobuf 进行序列化。
protobuf 可进入 点击进入 下载,这里我选择的是 21.11-all 版本,貌似最新的版本中(第二张图),是对所对应的平台有源码 和 已编译版本,这个有点像 Cmake的安装过程,这里,我使用源码进行安装 21.11-all版本 ,
4.1 编译安装
1 解压
tar xzvf protobuf-all-21.11.tar.gz
2 编译安装
#切换到解压后的 protobuf 文件夹
#这个会自动生成一些文件
./autogen.sh
#配置后期的编译安装过程
./configure --prefix=/YourPath/protobuf_21_11
#编译和安装
make -j8
make install
编译安装后在 /YourPath/protobuf_21_11 路径下,会看到
3 环境变量配置(还是在 ~/.bashrc 中),不要忘了 source 一下
即如图,将编译后的 bin 路径配置在 $PATH 路径中即可。
4 验证安装成功
protoc --version
5 编译安装 NCNN
点击 下载 官方源码,然后进行解压安装
也可以使用下面的命令进行一站下载编译
git clone https://github.com/Tencent/ncnn.git
cd ncnn
#这个是为了下载一些未下载的子包
git submodule update --init
#在文件夹中创建的新文件夹
mkdir build
cd build
#此步之后 , 推荐在 计算节点 含 GPU的节点操作
#注意 cmake 后面有两个点 即 使用 ../CMakeLists.txt 文件作为起始点在当前目录中生成
cmake .. (本步如果您 yum install cmake3,可以使用 cmake3 .. )
#也可以是 -j16 -j32等 加速编译
make -j8
make install
以上即全部过程,后续如果有问题,还会再次补充!