新聞中心
視頻鏈接: https://space.bilibili.com/1822828582
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、登封網(wǎng)站維護(hù)、網(wǎng)站推廣。Github 鏈接: https://github.com/zjhellofss/KuiperInfer 歡迎star和PR
請(qǐng)配合視頻課程一起看此教程
深度學(xué)習(xí)推理框架
用于對(duì)已訓(xùn)練完成的神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè).
也就是說,深度學(xué)習(xí)推理框架
能夠?qū)⑸疃扔?xùn)練框架例如Pytorch
,Tensorflow
中定義的算法移植到中心側(cè)和端側(cè), 并高效執(zhí)行. 與訓(xùn)練框架不同的是,深度學(xué)習(xí)推理框架
沒有梯度反向傳播功能, 因?yàn)樗惴P臀募械臋?quán)重系數(shù)已經(jīng)被固化, 推理框架只需要讀取, 加載并完成對(duì)輸入數(shù)據(jù)的預(yù)測(cè)即可.
訓(xùn)練完成的模型被放置在兩個(gè)文件中, 一個(gè)是模型定義文件, 一個(gè)是權(quán)重文件.
模型定義文件和計(jì)算圖 模型定義文件模型由多個(gè)節(jié)點(diǎn)的定義和節(jié)點(diǎn)之間的數(shù)據(jù)流圖
組成,節(jié)點(diǎn)定義模型中各節(jié)點(diǎn)的參數(shù), 例如在卷積算子中的參數(shù), 包括卷積核的大小, 步長以及輸入輸出特征圖的尺寸大小等.
數(shù)據(jù)流圖
闡述了節(jié)點(diǎn)之間數(shù)據(jù)流動(dòng)的前后順序和依賴關(guān)系. 所有節(jié)點(diǎn)在根據(jù)模型文件中的定義初始化完畢之后, 根據(jù)數(shù)據(jù)流圖對(duì)他們進(jìn)行一一串聯(lián), 形成一個(gè)有向無環(huán)圖(DAG), 或稱為計(jì)算圖.
但是這個(gè)計(jì)算圖是缺少權(quán)重的,只是一個(gè)外殼, 它只有網(wǎng)絡(luò)的節(jié)點(diǎn)和節(jié)點(diǎn)之間的聯(lián)通關(guān)系. 模型的權(quán)重則保存在權(quán)重文件中, 需要在完成計(jì)算圖的初始化之后加載到模型中.
在DAG構(gòu)建完成之后, 讀取權(quán)重文件中各節(jié)點(diǎn)的weight
和bias
數(shù)據(jù)并依次填充到對(duì)應(yīng)的算子當(dāng)中. 去填充計(jì)算圖(外殼)中的權(quán)重信息.
輸入指的是由圖片或者視頻幀構(gòu)建而成的RGB
數(shù)據(jù),KuiperInfer
中數(shù)據(jù)的輸入符合NCHW
格式,分別表示批次, 通道和高寬.
輸出指的是模型對(duì)于特定的輸入作出的判斷,在下圖中對(duì)于云層
圖像的輸出,模型給出的預(yù)測(cè)為cloud
類別,至此推理框架完成了一次預(yù)測(cè)過程.
課程節(jié)數(shù) | 主要內(nèi)容 | 進(jìn)度 | 課程鏈接 |
---|---|---|---|
第一次課 | 整體框架解讀和開發(fā)環(huán)境配置 | 完成 | https://www.bilibili.com/video/BV1HV4y1A7H8/ |
第二次課 | 張量Tensor類的解析和輸入數(shù)據(jù)的內(nèi)存排布 | 完成 | https://www.bilibili.com/video/BV1Ed4y1v7Gb/ |
第三次課 | 從CSV 文件中初始化張量Tensor 一個(gè)實(shí)例 | 完成 | https://www.bilibili.com/video/BV1Pg411J7V5/ |
第四次課 | 手寫第一個(gè)算子Relu 并完成算子注冊(cè)工廠類 | 完成 | https://www.bilibili.com/video/BV1bG4y1J7sQ/ |
第五次課 | Im2col 的原理和卷積算子的實(shí)現(xiàn) | 未完成 | |
第六次課 | 照貓畫虎, 完成MaxPooling 算子 | 完成 | https://www.bilibili.com/video/BV1m3411S7yy |
第七次課 | 圖結(jié)構(gòu)(PNNX )講解和計(jì)算圖初步 | 完成 | https://www.bilibili.com/video/BV1VW4y1V7vp |
第八次課 | 讀取PNNX 并構(gòu)建自己的計(jì)算圖 | 未完成 | |
第二季課程待敘 | … | … |
- 完成第一季的課程, 共八節(jié)
- 根據(jù)第一季的反饋迭代更新第二季的課程, 第二季結(jié)束能完成
ResNet 18
的推理 - 后期可能會(huì)出一個(gè)關(guān)于模型量化的課程, 在我們自制推理框架的基礎(chǔ)上完成對(duì)模型的
PTQ
量化
- 不會(huì)講
C++
基礎(chǔ), 默認(rèn)大家都多少懂C++
或者C
語言 - 不會(huì)長篇大論地講, 不會(huì)手把手地帶著敲( 畢竟不是編程培訓(xùn)班)
- 傾向于分模塊講解并以自己動(dòng)手練習(xí)的方式來學(xué)習(xí)
開發(fā)環(huán)境
- 開發(fā)語言:C++ 17
- 數(shù)學(xué)庫:Armadillo OpenBlas
- 加速庫:OpenMP, 實(shí)現(xiàn)算子時(shí)候用
- 單元測(cè)試:Google Test
- 性能測(cè)試:Google Benchmark
主項(xiàng)目地址:https://github.com/zjhellofss/KuiperInfer
Tips: 不要求大家全部掌握, 我會(huì)在以后的課程中分模塊的解讀, 歡迎大家點(diǎn)贊 star.
Ubuntu 22.04上armadillo
安裝.armadillo
本質(zhì)上提供了一個(gè)方便的接口, 背后調(diào)用Openblas
,
https://arma.sourceforge.net/docs.html. 安裝之前, 使用Linux對(duì)應(yīng)發(fā)行版的包管理器安裝必要的組件
apt update
apt install cmake libopenblas-dev liblapack-dev libarpack2-dev libsuperlu-dev
mkdir build
# 在https://arma.sourceforge.net/docs.html下載armadillo數(shù)學(xué)庫的代碼
# cd armadillo文件夾
mkdir build
cd build
cmake ..
make -j8
make install
# 默認(rèn)情況下armadillo頭文件安裝在:/usr/include/
# 默認(rèn)情況下armadillo庫文件安裝在:/usr/lib/x86_64-linux-gnu
編譯安裝其他依賴庫https://github.com/google/glog
glog安裝過程mkdir build
cd build
cmake ..
make -j8
make install
# 默認(rèn)情況下安裝完成后庫文件在:/usr/local/lib/
# 默認(rèn)情況下安裝完成后頭文件:/usr/local/include/
# 如果發(fā)生庫找不到的問題, 請(qǐng)可以自行試試增加庫尋找路徑, 如果還解決不了請(qǐng)?zhí)砑咏涣魅?
vim ~/.bashrc
# 末尾加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source ~/.bashrc
Google Test編譯安裝過程https://github.com/google/googletest
gtest安裝過程與glog類似
Tips: 以上兩個(gè)庫在安裝完成后, 頭文件位于/usr/local/include/
, 庫文件位于/usr/local/lib/
.
https://github.com/zjhellofss/KuiperCourse.git
git clone https://github.com/zjhellofss/KuiperCourse.git 拉取本次課程的代碼
git checkout first 切換分支,第一節(jié)課程在first 這個(gè)branch當(dāng)中
mkdir build
cd build
cmake ..
make -j8
國內(nèi)git鏡像地址:https://gitee.com/fssssss/KuiperCourse.git
完成第一節(jié)課的作業(yè)需要注意的問題:armadillo
是列主序的.Y=AxX+bias
是一個(gè)矩陣相乘問題.
armadillo
關(guān)于矩陣乘和加的文檔如下: 請(qǐng)按照文檔, 自行編寫test/test_first.cpp
中TEST(test_first, linear)
的代碼來完成上述操作,
如果編寫正確則通過單元測(cè)試,并輸出Result Passed!
.
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享標(biāo)題:從零編寫深度學(xué)習(xí)推理框架-第一課-前言-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.dlmjj.cn/article/csehph.html