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