视频链接: https://space.bilibili.com/1822828582
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟空间、营销软件、网站建设、登封网站维护、网站推广。Github 链接: https://github.com/zjhellofss/KuiperInfer 欢迎star和PR
请配合视频课程一起看此教程
深度学习推理框架用于对已训练完成的神经网络进行预测.
也就是说,深度学习推理框架能够将深度训练框架例如Pytorch,Tensorflow中定义的算法移植到中心侧和端侧, 并高效执行. 与训练框架不同的是,深度学习推理框架没有梯度反向传播功能, 因为算法模型文件中的权重系数已经被固化, 推理框架只需要读取, 加载并完成对输入数据的预测即可.


训练完成的模型被放置在两个文件中, 一个是模型定义文件, 一个是权重文件.
模型定义文件和计算图 模型定义文件模型由多个节点的定义和节点之间的数据流图组成,节点定义模型中各节点的参数, 例如在卷积算子中的参数, 包括卷积核的大小, 步长以及输入输出特征图的尺寸大小等.
数据流图阐述了节点之间数据流动的前后顺序和依赖关系. 所有节点在根据模型文件中的定义初始化完毕之后, 根据数据流图对他们进行一一串联, 形成一个有向无环图(DAG), 或称为计算图.
但是这个计算图是缺少权重的,只是一个外壳, 它只有网络的节点和节点之间的联通关系. 模型的权重则保存在权重文件中, 需要在完成计算图的初始化之后加载到模型中.
在DAG构建完成之后, 读取权重文件中各节点的weight和bias数据并依次填充到对应的算子当中. 去填充计算图(外壳)中的权重信息.
输入指的是由图片或者视频帧构建而成的RGB数据,KuiperInfer中数据的输入符合NCHW格式,分别表示批次, 通道和高宽.
输出指的是模型对于特定的输入作出的判断,在下图中对于云层图像的输出,模型给出的预测为cloud类别,至此推理框架完成了一次预测过程.


| 课程节数 | 主要内容 | 进度 | 课程链接 |
|---|---|---|---|
| 第一次课 | 整体框架解读和开发环境配置 | 完成 | https://www.bilibili.com/video/BV1HV4y1A7H8/ |
| 第二次课 | 张量Tensor类的解析和输入数据的内存排布 | 完成 | https://www.bilibili.com/video/BV1Ed4y1v7Gb/ |
| 第三次课 | 从CSV文件中初始化张量Tensor一个实例 | 完成 | https://www.bilibili.com/video/BV1Pg411J7V5/ |
| 第四次课 | 手写第一个算子Relu并完成算子注册工厂类 | 完成 | https://www.bilibili.com/video/BV1bG4y1J7sQ/ |
| 第五次课 | Im2col的原理和卷积算子的实现 | 未完成 | |
| 第六次课 | 照猫画虎, 完成MaxPooling算子 | 完成 | https://www.bilibili.com/video/BV1m3411S7yy |
| 第七次课 | 图结构(PNNX)讲解和计算图初步 | 完成 | https://www.bilibili.com/video/BV1VW4y1V7vp |
| 第八次课 | 读取PNNX并构建自己的计算图 | 未完成 | |
| 第二季课程待叙 | … | … |
- 完成第一季的课程, 共八节
- 根据第一季的反馈迭代更新第二季的课程, 第二季结束能完成
ResNet 18的推理 - 后期可能会出一个关于模型量化的课程, 在我们自制推理框架的基础上完成对模型的
PTQ量化
- 不会讲
C++基础, 默认大家都多少懂C++或者C语言 - 不会长篇大论地讲, 不会手把手地带着敲( 毕竟不是编程培训班)
- 倾向于分模块讲解并以自己动手练习的方式来学习
开发环境
- 开发语言:C++ 17
- 数学库:Armadillo OpenBlas
- 加速库:OpenMP, 实现算子时候用
- 单元测试:Google Test
- 性能测试:Google Benchmark
主项目地址:https://github.com/zjhellofss/KuiperInfer
Tips: 不要求大家全部掌握, 我会在以后的课程中分模块的解读, 欢迎大家点赞 star.
Ubuntu 22.04上armadillo安装.armadillo本质上提供了一个方便的接口, 背后调用Openblas,
https://arma.sourceforge.net/docs.html. 安装之前, 使用Linux对应发行版的包管理器安装必要的组件
apt update
apt install cmake libopenblas-dev liblapack-dev libarpack2-dev libsuperlu-dev
mkdir build
# 在https://arma.sourceforge.net/docs.html下载armadillo数学库的代码
# cd armadillo文件夹
mkdir build
cd build
cmake ..
make -j8
make install
# 默认情况下armadillo头文件安装在:/usr/include/
# 默认情况下armadillo库文件安装在:/usr/lib/x86_64-linux-gnu编译安装其他依赖库https://github.com/google/glog
glog安装过程mkdir build
cd build
cmake ..
make -j8
make install
# 默认情况下安装完成后库文件在:/usr/local/lib/
# 默认情况下安装完成后头文件:/usr/local/include/
# 如果发生库找不到的问题, 请可以自行试试增加库寻找路径, 如果还解决不了请添加交流群.
vim ~/.bashrc
# 末尾加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source ~/.bashrcGoogle Test编译安装过程https://github.com/google/googletest
gtest安装过程与glog类似
Tips: 以上两个库在安装完成后, 头文件位于/usr/local/include/, 库文件位于/usr/local/lib/.
https://github.com/zjhellofss/KuiperCourse.git
git clone https://github.com/zjhellofss/KuiperCourse.git 拉取本次课程的代码
git checkout first 切换分支,第一节课程在first 这个branch当中
mkdir build
cd build
cmake ..
make -j8
国内git镜像地址:https://gitee.com/fssssss/KuiperCourse.git完成第一节课的作业需要注意的问题:armadillo是列主序的.Y=AxX+bias是一个矩阵相乘问题.
armadillo关于矩阵乘和加的文档如下: 请按照文档, 自行编写test/test_first.cpp中TEST(test_first, linear)的代码来完成上述操作,
如果编写正确则通过单元测试,并输出Result Passed!.
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:从零编写深度学习推理框架-第一课-前言-创新互联
文章源于:http://www.scyingshan.cn/article/csehph.html


咨询
建站咨询
