【自制C++深度学习框架】前言
KuiperCourse

介绍
此GitHub项目是一个初学者的深度学习框架,使用C++编写,旨在为用户提供一种简单、易于理解的深度学习实现方式。以下是本项目的主要特点和功能:
-
计算图:使用计算图来描述深度学习模型的计算过程,利用计算图将神经网络的计算过程视为一个有向无环图。通过构建计算图,可以将深度学习模型转化为一系列的计算节点,通过节点之间的连接来表达模型的计算逻辑,使得计算过程可视化并易于维护和优化。
-
张量:使用Tensor类封装张量,支持float类型数据,并提供了访问张量属性和元素的接口以及一些查询、修改张量属性的函数。在计算图中,使用张量来表示各个操作的输入和输出,将神经网络中的所有数据表示为张量,以支持并行计算。
-
前向传播:实现了基础的前向传播。可以自定义神经网络结构,如添加层、激活函数等。
-
易于扩展:模块化设计使得用户可以轻松地添加新的模块或算法,以适应不同的任务需求。
通过学习和使用这个项目,用户可以深入了解计算图、张量、前向传播,使用C++构建简单的深度学习框架。
同时,本项目也为用户提供了一个基础框架,以便他们可以更全面地研究、开发和部署深度学习算法。
开发环境
- 系统:ubuntu 22.04
- 开发语言:C++ 17
- 数学库:Armadillo + OpenBlas
- 加速库:OpenMP
- 单元测试:Google Test
- 性能测试:Google Benchmark
- 其他:opencv + glog
搭建环境
使用Linux对应发行版的包管理器安装必要的组件
- Fedora & Red Hat: cmake, openblas-devel, lapack-devel, arpack-devel, SuperLU-devel
- Ubuntu & Debian: cmake, libopenblas-dev, liblapack-dev, libarpack2-dev, libsuperlu-dev
Ubuntu:
sudo apt update
sudo apt install cmake libopenblas-dev liblapack-dev libarpack2-dev libsuperlu-dev
armadillo-11.4.2(背后调用OpenBlas)的编译安装
- 源码下载地址:https://arma.sourceforge.net/docs.html
- 安装:
mkdir build
cd build
cmake ..
make -j8
sudo make install
Glog日志库和GTest测试库的编译安装
源码下载地址:
- https://github.com/google/googletest
- https://github.com/google/glog
先安装glog,再安装gtest,两者之间有依赖关系。
git clone https://github.com/google/glog.git
cd glog
mkdir build
cd build
cmake ..
make -j8
sudo make install
git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake ..
make -j8
sudo make install
Google Benchmark的编译安装
git clone https://github.com/google/benchmark.git
git clone https://github.com/google/googletest.git benchmark/googletest
cd benchmark
mkdir build && cd build
cmake ..
make -j2
sudo make install
opencv的安装
sudo apt install libopencv-dev
本项目的编译
本项目是对b站上的课程KuiperCourse第14次课程代码的解读,详细分析请看tutorials文件夹下的文件。
git clone https://github.com/zjhellofss/KuiperCourse.git
cd KuiperCourse
git checkout thirteen
mkdir build && cd build
cmake ..
make -j2
也可以使用Clion进行编译。
未来工作
- 移植并实现任意一个深度学习模型,需要附加 demo 程序供演示。模型需要的 PNNX 文件获取方法,请自行参考 PNNX 项目
- 优化任意一个或多个算子,使得运行速度在本机上加快 5%以上。时间测评以 Google Benchmark 框架为准,该框架使用方法请自行查阅。
- 预研 Kuiperinfer 上的量化方法,并根据实际情况完成一个(含)以上算子的 int8 量化实现,推荐阅读资料 https://github.com/BUG1989/caffe-int8-convert-tools
- 支持 Kuiperinfer 的Python API,推荐使用 Pybind 实现。
- 优化 Kuiperinfer 的运行时需要的内存空间,使得总体资源消耗减少 5% 以上。推荐从算子输出空间复用着手(不同算子执行时空不同,它们的输出空间理论上可以复用)。
- 预研 Kuiperinfer 上的算子并行方法(并行算子调度),并根据个人实际情况写出它的对应实现。
与作者进行交流:将整个项目的代码、实验报告、预研文档(如果有的话)打包发送到邮箱 hellofss@foxmail.com。
代码
原作者的代码:
- 架视频课程:https://space.bilibili.com/1822828582
- 推理框架代码:https://github.com/zjhellofss/KuiperInfer
- 课程代码:https://github.com/zjhellofss/KuiperCourse/
我在课程代码的基础上添加了教程:
- https://gitcode.net/qq_50258800/kuiperinfer
- https://github.com/kiloGrand/kuiperinfer
相关文章:
【自制C++深度学习框架】前言
KuiperCourse 介绍 此GitHub项目是一个初学者的深度学习框架,使用C编写,旨在为用户提供一种简单、易于理解的深度学习实现方式。以下是本项目的主要特点和功能: 计算图:使用计算图来描述深度学习模型的计算过程,利用计…...
【高危】泛微 e-cology9 存在任意用户登录漏洞
漏洞描述 泛微协同管理应用平台(e-cology)是一套企业大型协同管理平台。 泛微e-cology9部分版本中存在前台任意用户登录漏洞,由于系统默认配置固定密钥进行用户身份验证。 当存在/mobile/plugin/1/ofsLogin.jsp文件时(可能通过插件方式安装࿰…...
1TB文本的实时全文检索系统搭建
1个T的文本是多大呢?1TB 1000GB,1GB是10亿,1TB就是1万亿字节。如果是英文字符,1TB文本就是1万亿个英文字符,如果是中文字符而且都是UTF8格式,1个中文字符占3个字节,1TB文本是3333亿中文字符&am…...
RHCA---DO477---变量实验
实验目的如下: 1. 环境准备: 使用命令lab inventory-variables start初始化环境 2. 进入/home/student/git-repos目录克隆下载http://git.lab.example.com:8081/git/inventory-variables.git 3. 将目录下yaml文件内容以group_vars形式修改 4. 部署并将修改后ansible-playbook代…...
毕业生高频常用材料线上签,高校毕业季契约锁电子签章一站式助力
据人社部消息,2023年全国高校毕业生总规模将达1158万人!毕业季开启,全国各地高校普遍面临三方协议、成绩单、证书、证明等毕业生高频常用材料签署量激增的现状。学生、教职工、学校常常疲于应对机械化的材料盖章工作。 #毕业季高频常用材料清…...
.ini配置文件介绍与解析库使用
【前言】 ini 文件是英文"Initialization"的缩写,即初始化文件。它用来配置特定应用软件以实现对程序初始化或进行参数设置。.ini文件由节(section)、键(key)、值(value)三种模块构成。在windows系统/嵌入式软件中有很多XXX.ini文件,例如Syste…...
牛客网Linux错题七
1.如何在命令行查看一台linux机器的CPU、SWAP分区信息、硬盘信息?(ACD) A. cat /proc/cpuinfo B. du C. cat /proc/swaps D. df -Ih 解: cat /proc/cpuinfo查看Linux设备的CPU信息,cat /proc/swaps查看Linux设备的交换分区信息…...
牛课刷题Day5(编程题)
1.合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 正确答案: function concat(arr1, arr2) {let carr1.concat(arr2)return c } 解析: js的Array对象提供了一个叫concat()方法,连接两个或更多的数组&#x…...
javascript基础二十五:说说你对函数式编程的理解?优缺点?
一、是什么 函数式编程是一种"编程范式"(programming paradigm),一种编写程序的方法论 主要的编程范式有三种:命令式编程,声明式编程和函数式编程 相比命令式编程,函数式编程更加强调程序执行…...
常见JavaScript加密算法、JS加密算法
常见JavaScript加密算法、JS加密算法 一、SHA-256加密算法二、Base64编码算法三、RSA加密算法四、AES加密算法五、HMAC-SHA256算法六、PKCS7填充 一、SHA-256加密算法 SHA-256是一种密码散列函数,可以将任意长度的消息压缩成256位的摘要值。以下是使用JavaScript实现…...
题解2023.6.5
D - Factorial Divisibility 对于a[i]>x的数一定可以整除,考虑a[i]<x的数,因为(x1)*x! (x1)! 统计ai出现的次数, 把他转换为大的阶乘, 如果, 最终1到x - 1, ai的出现次数均为0则说明可以被x!整除 #pragma GCC optimize(2) #pragma GCC optimiz…...
与声音计算研究相关的挑战赛——DCASE和L3DAS
前言:在本专栏的系列博文中,我将包含声学场景识别、声音事件检测、声源位置估计等利用机器学习或深度学习技术进行研究的、基于声音信号的相关工作成为“声音计算”。 本篇博文主要介绍与声音计算相关的两个近些年持续跟进的挑战赛:DCASE和L…...
实训总结-----Scrapy爬虫
1.安装指令 pip install scrapy 2.创建 scrapy 项目 任意终端 进入到目录(用于存储我们的项目) scrapy startproject 项目名 会在目录下面 创建一个以 项目名 命名的文件夹 终端也会有提示 cd 项目名 scrapy genspider example example.com 3.运行爬虫指令 scrapy craw…...
前端开发职业规划指南:如何做好职业规划与发展
引言 前端开发是目前互联网行业中最火热的职业之一,也是非常具有发展前景的职业之一。随着互联网技术的不断更新和发展,前端开发的职业规划也在不断地发生变化。本文将从几个方面来探讨前端开发的职业规划。 一、职业发展路径 1.前端初级工程师 前端初…...
创业第一步:如何写好商业计划书
即使你的项目不需要融资,你也把标准商业计划书作为一个工具模板来应用,帮助更全面的盘点你要做的事情。 撰写一份性感的商业计划书如同造房子:第一步是科学设计,打好结构(有清晰的撰写逻辑);第…...
【Linux驱动】字符设备驱动相关宏 / 函数介绍(module_init、register_chrdev)
驱动运行有两种方式: 方式一:直接编译到内核,Linux内核启动时自动运行驱动程序方式二:编译成模块,使用 insmod 命令加载驱动模块 我们在调试的时候,采用第二种方式是最合适的,每次修改驱动只需…...
axios解决跨域问题
Vue3中使用axios访问聚合的天气API,出现跨域问题,需要在前端进行一些配置: 首先是修改vue.config.js: const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…...
R语言作图——热图聚类及其聚类结果输出
代码 不多说了,做个记录,代码如下。 library(pheatmap) library(RColorBrewer) # args commandArgs(TRUE) betafile "twist_common_panel_434.csv" infofile "twist_common_panel_434.txt" title "twist_common_panel&qu…...
Tomcat优化
Tomcat优化 Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tom…...
我的GIT练习TWO
目录 前言 GIT安装教程 Git作者 GIT优点 GIT缺点 为什么要使用 Git GIT练习TWO C1 C2 C3 C4 C5 C6 C7 总结 前言 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理 GIT安装教程 点击进入查看教程…...
5大优化技巧:让ComfyUI-Manager在低配置设备上流畅运行
5大优化技巧:让ComfyUI-Manager在低配置设备上流畅运行 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various cust…...
i.MX 6UL/6ULL开发环境配置与驱动开发实战
1. i.MX 6UL/6ULL开发环境配置实战1.1 虚拟机环境搭建要点对于Windows平台下的i.MX开发,VirtualBox虚拟机是最经济实惠的选择。根据实际项目经验,建议配置如下:内存至少4GB(复杂项目推荐8GB)硬盘空间预留100GB…...
用PTA题库学C语言:手把手教你拆解‘选择与循环’的嵌套逻辑
用PTA题库学C语言:手把手教你拆解‘选择与循环’的嵌套逻辑 学习C语言时,最让初学者头疼的莫过于那些层层嵌套的选择结构和循环结构。面对一堆if-else和for/while语句,很多人会感到无从下手。本文将通过PTA题库中的典型题目,教你一…...
Midjourney未来三年风格演进路径图(2024–2026关键拐点全标注)
更多请点击: https://intelliparadigm.com 第一章:Midjourney 2026年审美趋势总览 2026年,Midjourney 的视觉语言正经历一场由技术理性与人文温度共同驱动的范式迁移。V7引擎全面启用动态语义权重调节(DSWR)ÿ…...
从‘仿真’到‘半虚拟化’:一文读懂VMware虚拟网卡(E1000/E1000E/VMXNET3)的工作原理与演进史
从仿真到半虚拟化:虚拟网卡技术演进与设计哲学深度解析 虚拟化技术已经成为现代计算架构的基石,而网络虚拟化则是其中最为关键的组成部分之一。在虚拟化环境中,虚拟网卡作为连接虚拟机与外部世界的桥梁,其设计理念直接影响着整个…...
写论文软件哪个好?2026 实测:真文献 + 实证图表 + 全流程,虎贲等考 AI 才是毕业论文通关王
每到毕业季,“写论文软件哪个好” 就成为本硕生最纠结的问题。市面上工具看似繁多,却大多藏着隐患:通用 AI 编造文献、无实证支撑;小众工具功能碎片化、格式混乱;传统软件效率低、无智能辅助…… 选错软件,…...
模拟计算机应急救场:从400Hz电源故障看经典工程思维
1. 项目概述:一次由模拟计算机主导的“救场”1984年,在宾夕法尼亚州费城的一个大型测试实验室里,一个为海军战斗机设计的红外跟踪系统正面临一场突如其来的危机。这个系统被安装在一个三轴液压驱动的万向节上,需要在特定的400赫兹…...
用1DCNN预测股票价格:一份基于TensorFlow/Keras的保姆级实战代码解析
用1DCNN预测股票价格:从数据预处理到模型优化的全流程实战 金融时间序列预测一直是量化分析领域的核心挑战之一。传统的统计方法如ARIMA在处理非线性关系时表现有限,而深度学习中的一维卷积神经网络(1DCNN)因其捕捉局部特征的能力,在股价预测…...
手把手教你用STM32和电位器,临时搭建一个TTL转485调试器(附电路图)
应急调试利器:用STM32和电位器快速搭建TTL转485监听器 在嵌入式开发现场调试时,最让人头疼的莫过于设备串口输出异常却找不到合适的调试工具。上周在客户工厂就遇到了这样的窘境——需要监控设备TTL串口数据,但手边只有RS485转换器和几根杜邦…...
ARM DAP调试架构核心机制与实践指南
1. ARM调试访问端口(DAP)架构解析调试访问端口(Debug Access Port, DAP)是ARM调试架构中的核心组件,它作为调试器与芯片内部调试资源的桥梁,提供了标准化的访问接口。DAP的设计遵循ARM Debug Interface v5.1(ADIv5.1)规范,支持两种物理接口协…...
