Hi,各位朋友們好!我是KuiperInfer 的作者。 KuiperInfer 作為一門開源課程,迄今已經在GitHub 上已斬獲2.5k star。 如今在原課程的基礎上,我們全新推出了《動手自製大模型推理框架》, 新課程支持Llama系列大模型(包括最新的LLama3.2)以及Qwen2.5系列大模型,同時支持Cuda 加速和Int8 量化,自推出以來便廣受好評。
https://l0kzvikuq0w.feishu.cn/docx/ZF2hd0xfAoaXqaxcpn2c5oHAnBc
如果你對大模型推理感興趣,想要深入了解並掌握相關技術,想在校招、秋招面試當中脫穎而出,那麼這門《動手自製大模型推理框架》課程絕對不容錯過。快來加入我們,一起開啟學習之旅吧! 感興趣的同學歡迎掃一掃課程下方二維碼或者添加微信lyrry1997 參加課程

帶領你親手打造一個深度學習推理框架。關注我的B站空間,獲取最新視頻更新。
跟隨本項目,從零開始自製深度學習推理框架,你將有以下收穫:
視頻課程鏈接: https://space.bilibili.com/1822828582
第二次課程是第一次課程的重置版,內容更加充實和完善,第一次課程大綱見下方章節。
| 課程節數 | 進度 | 課程鏈接 |
|---|---|---|
| 第一講項目預覽和環境配置 | 完成 | 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 |
? KuiperInfer當前已支持Unet網絡的推理,採用carvana的預訓練權重
推理復現可參考文末的運行Kuiper 的demo
Demo直接使用yolov5-s的預訓練權重(coco數據集),使用KuiperInfer推理

我在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的付出
本項目相當於課程的上游或者預研項目
這裡的每一個功能都有可能成為視頻課程中的知識點,無論是我開發的還是其他同學完善的。
Tips:
$DEVELOPMENT或者指定-DDEVELOPMENT=ON apt install cmake, libopenblas-dev, liblapack-dev, libarpack-dev, libsuperlu-devTips:
請在編譯後復制tmp/unet/demo文件夾下的test.png 圖片絕對地址或相對地址, 隨後在build/demos中按下列格式運行推理程序
./unet_test test.png unet_demo.pnnx.param unet_demo.pnnx.bin其中pnnx 模型的下載地址:https://cowtransfer.com/s/09c7f337bab443
若推理成功,你將會在文件夾內看到原圖的分割後結果unet_output.jpg .
請在demos文件夾下的yolo_test.cpp文件夾中以下代碼進行修改
const std::string& image_path = " imgs/car.jpg " ;
const std::string& param_path = " tmp/yolo/demo/yolov5s_batch8.pnnx.param " ;
const std::string& bin_path = " tmp/yolo/demo/yolov5s_batch8.pnnx.bin " ; image_path指定圖像目錄, param_path為模型的參數文件, bin_path為模型的權重文件,請替換為自己本地的路徑。
模型定義和權重下載地址如下: https://cowtransfer.com/s/9bc43e0905cb40
編譯完成後,在項目目錄調用./build/demos/yolo_test
總體理念:逐步優化已經有的算子;有需要的時候再對未實現的算子進行開發
source是源碼目錄
test是單元測試目錄,基本做到public方法單元測試權覆蓋
bench是google benchmark, 包含對MobilenetV3, Resnet18和yolov5s的性能測試。
15 核心的AMD EPYC 7543(霄龍) 32-Core Processor (Docker 容器,宿主機共有32核心)
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
耗時通過連續五次運行,並以求平均的方式計算
| input size | 模型名稱 | 計算設備 | 耗時 |
|---|---|---|---|
| 224×224 batch = 8 | MobileNetV3Small | CPU(armadillo + openblas) | 6.76ms / image |
| 224×224 batch = 8 | ResNet18 | CPU(armadillo + openblas) | 23.53ms / image |
| 224×224 batch =16 | ResNet18 | CPU(armadillo + openblas) | 13.52ms / image |
| 640×640 batch = 8 | Yolov5nano | CPU(armadillo + openblas) | 78.37ms / image |
| 640×640 batch = 8 | Yolov5s | CPU(armadillo + openblas) | 177.54ms / image |
| 640×640 batch = 16 | Yolov5s | CPU(armadillo + openblas) | 134.57ms / image |
推理框架NCNN,已經在藉鑑的代碼中保留了NCNN的BSD協議https://github.com/Tencent/ncnn
優秀的數學庫Openblas: https://github.com/xianyi/OpenBLAS
優秀的數學庫Armadillo: https://arma.sourceforge.net/docs.html
給予我靈感的Caffe框架: https://github.com/BVLC/caffe
fmath框架:https://github.com/herumi/fmath/