当前位置: 首页 > news >正文

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

前言

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

什么是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

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

相关文章:

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

前言 由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。 什么是NCNN ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型&#x…...

四种常见的异步请求方式

四种常见的异步请求方式 一、xhr异步老祖 ​ XMLHttpRequest(简称XHR)是一种在JavaScript中创建异步请求的技术。XHR对象可以向服务器发送请求,并获取服务器返回的数据,而不会使页面刷新。 ​ XHR对象的创建方式通常是通过构造…...

Linux操作系统学习(进程间通信)

文章目录进程间通信进程通信的意义进程通信的方式1.基于文件的方式匿名管道命名管道2.基于内存的通信方式共享内存验证内核相关的数据结构了解进程间通信 进程通信的意义 ​ 当我们和另一个人打电话时两部手机都是独立的,通过基站传递信号等等复杂的过程就实现了通…...

单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进

目录C-COT:Continuous Convolution Operator Tracker文章侧重点连续卷积算子目标追踪框架初始化过滤器:追踪流程ECO文章侧重点因式卷积因子生成采样空间模型模型更新策略论文链接:C-COT:Beyond Correlation Filters: Learning Con…...

C++中栈是如何实现,以及常用的栈函数都有哪些

什么是栈? 栈 是一种特殊的数据结构,它是一种按照 Last-In-First-Out (LIFO) 访问模式存储和访问数据的特殊结构。 换句话说,栈中的最后一个元素将成为最先出栈的元素,这也意味着新增加的元素在栈的顶部,而出栈的元素…...

我就不信你还不懂HashSet/HashMap的底层原理

💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…...

Qt中调用gtest进行单元测试及生成覆盖率报告

一.环境配置 googletest地址:https://github.com/google/googletest 我下载的是1.12.1,这是最后一个支持C++11的版本。 首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见Qt中调用gRPC,编译完了会生成几个静态库,如下图所示 本文主要用到了libgtest.a 下载ms…...

ChatGPT vs Bard 背后的技术对比分析和未来发展趋势

ChatGPT vs Bard 背后的技术对比分析和未来发展趋势 目录 ChatGPT vs Bard 背后的技术对比分析和未来发展趋势...

搜索引擎的设计与实现

技术:Java、JSP等摘要:随着互联网的快速发展,网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后&…...

动态规划之买卖股票问题

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓动态规划之买卖股票问题 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 动态规划算法本质上就是穷举…...

MySQL学习笔记之子查询

自连接方式 自连接就是表A连接表A,通过where关键字实现,比如查询工资比Abel高的员工信息: SELECTe2.last_name,e2.salary FROMemployees e1,employees e2 WHEREe1.last_name "Abel" AND e2.salary > e1.salary;子查询 亦称为…...

HCIP-5OSPF域内域间外部路由学习笔记

1、OSPF区域 每个区域都维护一个独立的LSDB。 Area 0是骨干区域,其他区域都必须与此区域相连。 划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。 区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不…...

【编程实践】简单是好软件的关键:Simplicity is key to good software

Simplicity is key to good software 简单是好软件的关键 目录 Simplicity is key to good software简单是好软件的关键 Complexity is tempting. 复杂性很诱人。 The smallest way to create value创造价值的最小方法 Simple 简单的 Complexity is tempting. 复杂性很诱人…...

Python|贪心|数组|二分查找|贪心|数学|树|二叉搜索树|在排序数组中查找元素的第一个和最后一个位置|计数质数 |将有序数组转换为二叉搜索树

1、在排序数组中查找元素的第一个和最后一个位置(数组,二分查找) 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 […...

操作系统——15.FCFS、SJF、HRRN调度算法

这节我们来看一下进程调度的FCFS、SJF、HRRN调度算法 目录 1.概述 2.先来先服务算法(FCFS,First Come First Serve) 3.短作业优先算法(SJF,Shortest Job First) 4.高响应比优先算法(HRRN&…...

如何防止用户打开浏览器开发者工具?

大家好,我是前端西瓜哥。作为一名前端开发,在浏览一些网页时,有时会在意一些交互效果的实现,会打开开发者工具查看源码实现。 但有些网站做了防窥探处理,打开开发者工具后,会无法再正常进行网页的操作。 …...

C语言-基础了解-12-C数组

C数组 一、C数组 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 runoob0、runoob1、…、runoo…...

RocksDB 架构

文章目录1、RocksDB 摘要1.1、RocksDB 特点1.2、基本接口1.3、编译2、LSM - Tree2.1、Memtable2.2、WAL2.3、SST2.4、BlockCache3、读写流程3.1、读取流程3.2、写入流程4、LSM-Tree 放大问题4.1、放大问题4.2、compactionRocksDB 是 Facebook 针对高性能磁盘开发开源的嵌入式持…...

MVVM和MVC的区别

首先,MVVM 和 MVC 都是一种设计模式MVCM(Model): 模型层。 用于处理应用程序数据逻辑的部分,模型对象负责在数据库中存取数据V (View): 视图层。 处理数据显示的部分 ,视…...

c++11 标准模板(STL)(std::unordered_map)(三)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…...

鸣潮智能辅助工具:深度学习驱动的游戏自动化解决方案

鸣潮智能辅助工具&#xff1a;深度学习驱动的游戏自动化解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 价值定位&#xf…...

浅析 Python 中数据离散化的实现方式

一、什么是数据离散化&#xff1f;在数据分析和机器学习的预处理阶段&#xff0c;数据离散化是一个非常核心且常用的操作。简单来说&#xff0c;数据离散化就是将连续的数值型数据&#xff0c;按照一定的规则划分成若干个离散的区间 / 类别。连续数据&#xff1a;身高&#xff…...

AI技术原理--Transformer详解:搞懂AI核心架构

你可能用过GPT&#xff0c;但你知道GPT的全称是什么吗&#xff1f; GPT Generative Pre-trained Transformer Generative&#xff1a;生成式Pre-trained&#xff1a;预训练Transformer&#xff1a;网络结构 Transformer可以说是目前AI最重要的网络架构&#xff0c;它让GPT真正…...

openclaw添加本地大模型支持接受图片输入

这里写自定义目录标题1.故障现象2.背景3.解法4.排查1.故障现象 openclaw gateway的聊天处&#xff0c;上传图片报错 parseMessageWithAttachments: 1 attachment(s) dropped — model does not support images2.背景 qwen3.5的大模型原本就是多模态的&#xff08;支持图片的…...

ai辅助tomcat调优:用自然语言指令让快马生成专业级服务器配置

最近在准备一个Spring MVC项目的上线&#xff0c;作为后端负责人&#xff0c;Tomcat的调优配置成了我的重点工作。传统的手动配置不仅耗时&#xff0c;还容易遗漏关键参数。这次尝试了用AI辅助开发的方式&#xff0c;通过自然语言描述需求&#xff0c;让InsCode(快马)平台直接生…...

Phi-4-mini-reasoning实用刚需:3.8B模型在边缘服务器部署可行性分析

Phi-4-mini-reasoning实用刚需&#xff1a;3.8B模型在边缘服务器部署可行性分析 1. 模型概述与核心优势 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型最突出的特点是"小参数、强推理…...

南麟 SA9120 单通道 H 桥直流有刷电机驱动专用芯片 SOP8封装

产品描述南麟 SA9120 是上海南麟电子推出的单通道 H 桥直流有刷电机驱动专用芯片&#xff0c;采用成熟高压工艺设计&#xff0c;集成度高、外围电路简单&#xff0c;可直接驱动中小功率直流电机、步进电机绕组及电磁阀等感性负载&#xff0c;具备优异的抗干扰与带载能力&#x…...

【AI】AI安全工具:常用AI安全检测工具的使用教程

AI安全工具&#xff1a;常用AI安全检测工具的使用教程&#x1f4dd; 本章学习目标&#xff1a;本章介绍实用工具&#xff0c;帮助读者掌握AI安全合规治理的工具使用。通过本章学习&#xff0c;你将全面掌握"AI安全工具&#xff1a;常用AI安全检测工具的使用教程"这一…...

BililiveRecorder:专业直播内容保存解决方案

BililiveRecorder&#xff1a;专业直播内容保存解决方案 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 在数字内容快速迭代的时代&#xff0c;如何永久保存有价值的直播内容成为许多创…...

MJh代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线

在当今数字化时代&#xff0c;保护.NET应用程序的源代码安全变得尤为重要。你是否担心自己的知识产权被轻易窃取&#xff1f;是否希望防止竞争对手通过反编译分析你的核心业务逻辑&#xff1f;今天&#xff0c;我将为你详细介绍一款强大的开源混淆工具——Obfuscar&#xff0c;…...