【亲测】Centos7系统非管理(root)权限编译NCNN

news2024/12/24 9:46:00

前言

由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。

什么是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:$PATHexport 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

在这里插入图片描述
以上即全部过程,后续如果有问题,还会再次补充!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件异步多备常用方案

业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。 业务…

Java分布式解决方案(三)

文章目录🔥MySQL事务-MySQL中锁的分类🔥MySQL事务-MySQL中的死锁问题🔥MySQL事务-MySQL中锁的分类 MySQL中锁的分类 从本质上讲,锁是一种协调多个进程或多个线程对某一资源的访问的机制,MySQL使用锁和MVCC机制实现了…

了解基本的html和javascript

用记事本编辑一个文本文件&#xff0c;代码如下&#xff0c; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>my name is bo</title> <script>alert(hello); </script> </head> <body>&…

实验2 设计模式实验1

实验内容: 1. 使用简单工厂模式设计一个可以创建不同几何形状(Shape)&#xff0c;例如圆形 (Circle)、矩形(Rectangle)和三角形(Triangle)等的绘图工具类&#xff0c;每个几何图形均具 有绘制方法draw()和擦除方法erase()&#xff0c;要求在绘制不支持的几何图形时&#xff…

Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解

一、ToggleButton(开关按钮) 1.1、简介 ToggleButton 类似开关有开和关两种状态&#xff0c;不同的状态下可以有不同的文本。 public class ToggleButton extends CompoundButton Displays checked/unchecked states as a button with a "light" indicator …

CNN基础

Tip&#xff1a;仅供自己学习记录&#xff0c;酌情参考 1. 前馈与反馈神经网络 神经网络有前馈神经网络和反馈神经网络&#xff0c;前向神经网络也就是前馈神经网络。 前馈型神经网络各神经元接收前一层的输入&#xff0c;并输出给下一层&#xff0c;没有反馈。节点分为两类…

nacos-sdk-rust binding to NodeJs

广告时间 nacos-sdk-rust-binding-node : nacos-sdk-rust binding to NodeJs with napi. Tip: nacos-sdk-nodejs 仓库暂未提供 2.x gRPC 交互模式&#xff0c;为了能升级它&#xff0c;故而通过 node addon 方式调用 nacos-sdk-rust npm 包 -> https://www.npmjs.com/packa…

Spring系列-8 AOP使用与原理

背景 按照软件重构的思想&#xff0c;当多个类中存在相同的代码时&#xff0c;需要提取公共部分来消除代码坏味道。Java的继承机制允许用户在纵向上通过提取公共方法或者公共部分(模版方法方式)至父类中以消除代码重复问题&#xff1b;日志、访问控制、性能监测等重复的非业务…

GO的IO接口和工具

GO的IO接口和工具 文章目录GO的IO接口和工具一、io包中接口的好处和优势1.1拷贝数据的函数二、 在io包中&#xff0c;io.Reader 的扩展接口和实现类型都有哪些2.1 io.Reader的扩展接口2.2 io.Reader接口的实现类型2.3 示例三、io包的接口&#xff0c;以及它们之间的关系3.1 读操…

Raki的读paper小记:Forget-free Continual Learning with Winning Subnetworks

Abstract&Introduction&Related Work 研究任务 用子网络做CL已有方法和相关工作 彩票假说&#xff08;LTH&#xff09;证明了稀疏子网络&#xff08;称为中奖彩票&#xff09;的存在&#xff0c;这些子网络保持了密集网络的性能&#xff0c;然而使用迭代修剪方法在持续…

Splunk 的一个Bug (Events from tracker.log have not been seen)

1:背景:Splunk version: 8.2.4 splunk 的一个alert: Events from tracker.log have not been seen for the last 47 seconds, which is more than the yellow threshold (45 seconds). This typically occurs when indexing or forwarding are falling behind or are blocked…

【15】linux命令每日分享——head命令查看文件

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

德鲁特金属导电理论(Drude)

德鲁特模型的重要等式 首先我们建立德鲁特模型的重要等式 我们把原子对于电子的阻碍作用&#xff0c;用一个冲量近似表示出来 在式子 首先定义一个等效加速度 由于 我们可以得到电导率的微观表达式 在交流电环境中 电场的表达式 借鉴上一问的公式 我们可以列出这样的表达式…

1.5 全概率公式和贝叶斯公式

1.5.1 全概率公式在处理复杂事件的概率时&#xff0c;我们经常将这个复杂事件分解为若千个互不相容的较简单的事件之和&#xff0c;先求这些简单事件的概率&#xff0c;再利用有限可加性得到所求事件的概率,这种方法就是全概率公式的思想方法全概率公式是概率论中的一个非常重要…

【CSS】CSS 复合选择器 ② ( 子元素选择器 | 交集选择器 )

文章目录一、子元素选择器1、语法说明2、代码分析3、代码示例二、交集选择器1、语法说明2、代码示例一、子元素选择器 1、语法说明 子元素选择器 可以选择 某个基础选择器 选择出的 元素组 的 直接子元素 ( 亲儿子元素 ) 中 使用基础选择器 选择 元素 ; 子元素选择器语法 : 父选…

【JAVA程序设计】(C00112)基于Springboot+Thymeleaf的在线购物商城——有文档

基于SpringbootThymeleaf的在线购物商城——有文档项目简介项目获取开发环境项目技术运行截图运行视频项目简介 基于Springbootthymeleaf框架的在线购物商城系统&#xff0c;本系统共分为二个角色&#xff1a;管理员和用户 管理员角色包含以下功能&#xff1a; 商品管理、商品…

DELL-Vostro-5468电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。硬件型号驱动情况主板DELL-Vostro-5468处理器Intel Core i3-7100U 2.40 GHz, 3M Cache已驱动内存Samsung 8GB DDR4-2133MHz已驱动硬盘TOPMORE CAPRICORNUS NVMe 1TB已驱动显卡Intel HD Graphics 620已驱动声卡Realtek ALC2…

Linux指令——文件与权限

一&#xff0c;文件目录管理命令 ls 命令描述&#xff1a; ls命令用于显示指定工作目录下的内容。 命令格式&#xff1a;ls [参数] [目录名]。 参数说明&#xff1a; 参数 说明 -a 显示所有文件及目录&#xff08;包括隐藏文件&#xff09; -l 将文件的权限、拥有者、…

详解七大排序算法

对于排序算法&#xff0c;是我们在数据结构阶段&#xff0c;必须要牢牢掌握的一门知识体系&#xff0c;但是&#xff0c;对于排序算法&#xff0c;里面涉及到的思路&#xff0c;代码……各种时间复杂度等&#xff0c;都需要我们&#xff0c;记在脑袋瓜里面&#xff01;&#xf…

【LeetCode每日一题】——680.验证回文串 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 贪心算法 二【题目难度】 简单 三【题目编号】 680.验证回文串 II 四【题目描述】 给你一个字…