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

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

KuiperCourse

KuiperInfer-logo

介绍

此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进行编译。

未来工作

  1. 移植并实现任意一个深度学习模型,需要附加 demo 程序供演示。模型需要的 PNNX 文件获取方法,请自行参考 PNNX 项目
  2. 优化任意一个或多个算子,使得运行速度在本机上加快 5%以上。时间测评以 Google Benchmark 框架为准,该框架使用方法请自行查阅。
  3. 预研 Kuiperinfer 上的量化方法,并根据实际情况完成一个(含)以上算子的 int8 量化实现,推荐阅读资料 https://github.com/BUG1989/caffe-int8-convert-tools
  4. 支持 Kuiperinfer 的Python API,推荐使用 Pybind 实现。
  5. 优化 Kuiperinfer 的运行时需要的内存空间,使得总体资源消耗减少 5% 以上。推荐从算子输出空间复用着手(不同算子执行时空不同,它们的输出空间理论上可以复用)。
  6. 预研 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
http://www.lryc.cn/news/92089.html

相关文章:

  • 【高危】泛微 e-cology9 存在任意用户登录漏洞
  • 1TB文本的实时全文检索系统搭建
  • RHCA---DO477---变量实验
  • 毕业生高频常用材料线上签,高校毕业季契约锁电子签章一站式助力
  • .ini配置文件介绍与解析库使用
  • 牛客网Linux错题七
  • 牛课刷题Day5(编程题)
  • javascript基础二十五:说说你对函数式编程的理解?优缺点?
  • 常见JavaScript加密算法、JS加密算法
  • 题解2023.6.5
  • 与声音计算研究相关的挑战赛——DCASE和L3DAS
  • 实训总结-----Scrapy爬虫
  • 前端开发职业规划指南:如何做好职业规划与发展
  • 创业第一步:如何写好商业计划书
  • 【Linux驱动】字符设备驱动相关宏 / 函数介绍(module_init、register_chrdev)
  • axios解决跨域问题
  • R语言作图——热图聚类及其聚类结果输出
  • Tomcat优化
  • 我的GIT练习TWO
  • 个人器件库整理
  • javascript——内存管理
  • Qt5.15.2安卓Android项目开发环境配置
  • 第四十三章 弹跳训练2(灵识扫描)
  • 【location对象的方法,history对象,navigator--BOM】
  • 论文笔记:Normalizing Flows for Probabilistic Modeling and Inference
  • java 异常类介绍
  • shiro 550 反序列化rce
  • 【C++】---模板初阶(超详练气篇)
  • windows系统典型漏洞分析
  • WPF开发txt阅读器:需求分析和文件读写