# KuiperInfer (自制深度学习推理框架)
![](https://github.com/zjhellofss/kuiperinfer/actions/workflows/cmake.yml/badge.svg)
![](./imgs/logo.jpg)
带领你亲手打造一个深度学习推理框架。关注我的[B站空间](https://space.bilibili.com/1822828582),获取最新视频更新。
跟随本项目,从零开始自制深度学习推理框架,你将有以下收获:
1. 学习一个深度学习框架背后的知识,掌握现代C++项目的写法,调试技巧和工程经验;
2. 如何设计、编写一个计算图;
3. 实现常见的算子,卷积算子、池化算子、全连接算子等;
4. 在3的基础上,学会常见的优化手段加速算子的执行;
5. 最后你将获得一个属于自己的推理框架,可以推理resnet, unet, yolov5, mobilenet等模型,对面试和知识进阶大有裨益。
**视频课程链接:**[https://space.bilibili.com/1822828582](https://space.bilibili.com/1822828582)
## 对llama的支持
> 我们将[llama.c](https://github.com/karpathy/llama2.c )中的算子替换为了KuiperInfer中的实现
[模型下载链接](https://pan.baidu.com/s/1PF5KqvIvNFR8yDIY1HmTYA?pwd=ma8r ) 下载后替换到demos/llama2/main.cpp中
![a.gif](imgs/a.gif)
## 第二次课程大纲
第二次课程是第一次课程的重置版,内容更加充实和完善,第一次课程大纲见下方章节。
| 课程节数 | 进度 | 课程链接 |
| ----------------------------------------------------- |-----| ------------------------------------------- |
| **第一讲** 项目预览和环境配置 | 完成 | https://www.bilibili.com/video/BV118411f7yM |
| **第二讲** 张量(Tensor)的设计与实现 | 完成 | https://www.bilibili.com/video/BV1hN411k7q7 |
| **第三讲** 计算图的定义 | 完成 | https://www.bilibili.com/video/BV1vc411M7Yp |
| **第四讲** 构建计算图关系和执行顺序 | 完成 | https://www.bilibili.com/video/BV19s4y1r7az |
| **第五讲** KuiperInfer中的算⼦和注册⼯⼚ | 完成 | https://www.bilibili.com/video/BV1gx4y1o7pj |
| **第六讲** 卷积和池化算子的实现 | 完成 | https://www.bilibili.com/video/BV1hx4y197dS |
| **第七讲** 表达式层中词法分析和语法分析以及算子的实现 | 完成 | https://www.bilibili.com/video/BV1j8411o7ao |
| **第八讲** 自制推理框架支持Resnet网络的推理 | 完成 | https://www.bilibili.com/video/BV1o84y1o7ni |
| **第九讲** 自制推理框架支持YoloV5网络的推理 | 完成 | https://www.bilibili.com/video/BV1Qk4y1A7XL |
## 知乎专栏(更新中)
<a href="https://www.zhihu.com/column/c_1682405983161356288"> <img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/8c/ec/b0/8cecb054-1279-1b92-668b-46e371b9f65f/AppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/1200x630wa.png" height="200" width="400" /> </a>
## Demo效果
### Unet语义分割
> 🥰 KuiperInfer当前已支持Unet网络的推理,采用[carvana的预训练权重](https://github.com/milesial/Pytorch-UNet)
![](https://imgur.com/FDXALEa.jpg)
![](https://imgur.com/hbbZeoT.jpg)
推理复现可参考文末的 **运行 Kuiper 的 demo**
### Yolov5目标检测
> Demo直接使用yolov5-s的预训练权重(coco数据集),使用KuiperInfer推理
![](./imgs/demo_car.jpg)
## 第一次课程大纲
我在b站上开了一门教学课程,目前是课程的前13次课程。课程大纲如下,主页是: https://space.bilibili.com/1822828582 , 欢迎大家关注支持。**进学习群的方式如上图的二维码。**
| 课程节数 | 主要内容 | 进度 | 课程链接 |
| ---------- | ---------------------------------------------------------- | ---- | -------------------------------------------- |
| 第一次课 | 整体框架解读和开发环境配置 | 完成 | 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的原理和卷积算子的实现 | 完成 | https://www.bilibili.com/video/BV1F841137Ct |
| 第六次课 | 照猫画虎,完成MaxPooling算子 | 完成 | https://www.bilibili.com/video/BV1m3411S7yy |
| 第七次课 | 图结构(PNNX)讲解和计算图初步 | 完成 | https://www.bilibili.com/video/BV1VW4y1V7vp |
| 第八次课 | 读取PNNX并构建自己的计算图 | 完成 | https://www.bilibili.com/video/BV1HY4y1Z7S3 |
| 第九次课 | 卷积算子的实现和im2col加速计算的原理 | 完成 | https://www.bilibili.com/video/BV1F841137Ct |
| 第十次课 | 再探Tensor类,构建计算图的图关系以及对算子的输入输出预分配 | 完成 | https://www.bilibili.com/video/BV1M54y1K7AG |
| 第十一次课 | 算子的执行流程 | 完成 | https://www.bilibili.com/video/BV1wY411C7Kv |
| 第十二次课 | 用我们自制的推理框架完成ResNet网络的推理和图片的分类 | 完成 | https://www.bilibili.com/video/BV1jD4y1M772 |
| 第十三次课 | 用自制的推理框架支持Yolov5模型的推理 | 完成 | https://www.bilibili.com/video/BV1xs4y1J7t2 |
## 项目贡献
### 贡献者列表
感谢以下同学对Kuiperinfer的付出
- [zjhellofss](https://github.com/zjhellofss)
- [liuxubit](https://github.com/liuxubit)
- [Azusachan](https://github.com/Azusachan)
- [wfs2010](https://github.com/wfs2010)
- [mlmz](https://github.com/minleminzui)
- [Tigerrr07](https://github.com/Tigerrr07)
- [zyt1024](https://github.com/zyt1024)
- [zpye](https://github.com/zpye)
- [cmcamdy](https://github.com/cmcamdy)
- [superCB](https://github.com/SuperCB)
- [sanbuphy](https://github.com/sanbuphy)
- [TypeFloat](https://github.com/TypeFloat)
- [Jasmine-up](https://github.com/Jasmine-up)
- [PerrySkywalker](https://github.com/PerrySkywalker)
### 如何参与项目贡献?
1. 提交代码增加新功能或修改bug;
2. 提出特别有用的建议;
3. 完善文档或增加单元测试。
### 本项目和视频课程的关系
- 本项目相当于课程的上游或者预研项目
- 这里的每一个功能都有可能成为视频课程中的知识点,无论是我开发的还是其他同学完善的。
## 使用的技术和开发环境
* 开发语言:C++ 17
* 数学库:Armadillo + OpenBlas(或者更快的Intel MKL)
* 加速库:OpenMP
* 单元测试:Google Test
* 性能测试:Google Benchmark
## 安装过程(使用Docker)
1. docker pull registry.cn-hangzhou.aliyuncs.com/hellofss/kuiperinfer:latest
2. sudo docker run -t -i registry.cn-hangzhou.aliyuncs.com/hellofss/kuiperinfer:latest /bin/bash
3. cd code
4. git clone --recursive https://github.com/zjhellofss/KuiperInfer.git
5. cd KuiperInfer
6. **git checkout -b 你的新分支 study_version_0.02 (如果想抄本项目的代码,请使用这一步切换到study tag)**
7. mkdir build
8. cd build
9. cmake -DCMAKE_BUILD_TYPE=Release -DDEVELOPMENT=OFF ..
10. make -j$(nproc)
**Tips:**
1. **如果需要对KuiperInfer进行开发**,请使用 git clone --recursive https://github.com/zjhellofss/
没有合适的资源?快使用搜索试试~ 我知道了~
带你从零实现一个高性能的深度学习推理库,支持大模型 llama2 、Unet。。。
共160个文件
cpp:83个
hpp:46个
txt:11个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 140 浏览量
2024-03-14
22:58:13
上传
评论
收藏 4.92MB ZIP 举报
温馨提示
带你从零实现一个高性能的深度学习推理库,支持大模型 llama2 、Unet、Yolov5、Resnet等模型的推理。Implement a high-performance deep learning inference library step by step.zip
资源推荐
资源详情
资源评论
收起资源包目录
带你从零实现一个高性能的深度学习推理库,支持大模型 llama2 、Unet。。。 (160个子文件)
.clang-format 725B
ir.cpp 62KB
test_utensor.cpp 34KB
llama_chat.cpp 28KB
test_tensor.cpp 27KB
test_conv.cpp 26KB
test_expression.cpp 24KB
test_runtime_ir.cpp 22KB
test_maxpooling.cpp 20KB
runtime_ir.cpp 17KB
bench_layer.cpp 16KB
base_convolution.cpp 16KB
test_upsample.cpp 15KB
tensor.cpp 15KB
test_average_pooling.cpp 14KB
simd.cpp 13KB
test_view.cpp 13KB
yolo_detect.cpp 13KB
upsample.cpp 11KB
test_flatten.cpp 11KB
test_linear.cpp 11KB
test_softmax.cpp 10KB
softmax.cpp 10KB
maxpooling.cpp 8KB
deconvolution.cpp 8KB
parse_expression.cpp 8KB
store_zip.cpp 8KB
winograd.cpp 8KB
convolution.cpp 8KB
test_batchnorm.cpp 8KB
linear.cpp 8KB
batchnorm2d.cpp 7KB
test_deconv.cpp 7KB
expression.cpp 7KB
test_relu.cpp 7KB
adaptive_avgpooling.cpp 6KB
runtime_op.cpp 6KB
yolo_test.cpp 6KB
test_cat.cpp 6KB
bench_conv.cpp 6KB
test_sigmoid.cpp 6KB
test_load_data.cpp 6KB
test_silu.cpp 5KB
flatten.cpp 5KB
matmul.cpp 5KB
test_param_layer.cpp 5KB
test_classify_net.cpp 5KB
cat.cpp 5KB
param_layer.cpp 5KB
view.cpp 5KB
mobile.cpp 4KB
resnet_test.cpp 4KB
test_hardswish.cpp 4KB
test_hardsigmoid.cpp 4KB
bench_simd.cpp 4KB
time_logging.cpp 4KB
layer.cpp 4KB
rms_norm.cpp 4KB
test_yolo.cpp 4KB
image_util.cpp 3KB
bench_yolo.cpp 3KB
test_attr.cpp 3KB
layer_factory.cpp 3KB
unet_test.cpp 3KB
test_matmul.cpp 3KB
test_reshape.cpp 3KB
activation.cpp 3KB
bench_resnet.cpp 3KB
bench_reshape.cpp 3KB
test_layer_factory.cpp 2KB
hardswish.cpp 2KB
hardsigmoid.cpp 2KB
load_data.cpp 2KB
silu.cpp 2KB
sigmoid.cpp 2KB
relu6.cpp 2KB
relu.cpp 2KB
bench_unet.cpp 2KB
bench_mobilenet.cpp 2KB
main.cpp 2KB
test_param.cpp 2KB
test_main.cpp 1KB
tensor_utils.cpp 1KB
bench_main.cpp 1KB
dockerfile 2KB
a.gif 3.23MB
.gitignore 26KB
.gitmodules 81B
ir.h 5KB
fmath.hpp 25KB
tensor_util.hpp 13KB
runtime_ir.hpp 9KB
tensor.hpp 8KB
layer.hpp 5KB
llama_chat.hpp 5KB
time_logging.hpp 5KB
runtime_parameter.hpp 4KB
param_layer.hpp 4KB
layer_factory.hpp 4KB
runtime_op.hpp 4KB
共 160 条
- 1
- 2
资源评论
极致人生-010
- 粉丝: 3123
- 资源: 3078
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功