【ESWIN實習(xí)】第一次培訓(xùn)筆記(寧宇leader主講)
培訓(xùn)主題:要做什么?能做什么?需要做什么?
成熟的AI軟件團(tuán)隊
開發(fā)了從底層驅(qū)動,AI算子庫,并行計算框架,AI框架的完整工具鏈
對接了Tensorflow等通用框架,用戶程序可以零修改運(yùn)行到自主AI芯片上
開發(fā)了自主輕量級推理框架,實現(xiàn)模型轉(zhuǎn)換,圖優(yōu)化,高效運(yùn)行推理模型
開發(fā)了AI性能分析,量化等工具
開發(fā)了基于LLVM/GCC 的并行計算編譯器,OpenCL 編譯器
ESWIN 是一個芯片公司,成都site主要是軟件團(tuán)隊!
一個芯片能不能賣,賣的如何,決定性因素除了硬件還有軟件!
軟件做到什么程度,用戶用的順手與否?
它的工具是否豐富?
對生態(tài)支持完不完善?
以上因素綜合決定了它在后期市場上的表現(xiàn)!
軟件團(tuán)隊主要是配合硬件在市場上與客戶對接!
涉及面廣,深度比較深,從下往上:指令集、架構(gòu)都是自己開發(fā)的。
從編譯、驅(qū)動、框架、模型算法、應(yīng)用(對接通用的訓(xùn)練框架、AI框架)
底層的話用的是 RISC-V 的指令集,一個趨勢。指令集演變趨勢:x86 -> ARM -> RISC-V
RSIC-V除了通用的指令集,針對AI加速(PINT平臺)制定了自己的指令。
自組指令的支持,編程上性能優(yōu)化。涉及東西比較多。
底層基于Linux平臺開發(fā),涉及到內(nèi)核態(tài)、用戶態(tài)的驅(qū)動。
驅(qū)動作用,讓硬件怎么樣可以用軟件的方式去驅(qū)動!
并行計算:
NVIDIA 通過 CUDA 對接 GPU
ESWIN 通過 OpenCL 對接 PINT
EAS0020軟件棧
通過第一代產(chǎn)品迭代,已形成較為完整AI軟件棧
可以與已有通用框架無縫對接
無縫對接Tensorflow
用戶程序零改動運(yùn)行
對 Tensorflow 的后端進(jìn)行支持,Tensorflow 默認(rèn)是基于CUDA,PINT 即把基于CUDA的后端直接port到基于PINT的后端。
利用其存儲生態(tài),訓(xùn)練推理框架可以直接對接到我們的產(chǎn)品上!
NVIDIA 是利用CUDA這樣一個庫,來后面對接實現(xiàn)自己的算子,在他們廠的硬件上進(jìn)行運(yùn)算和加速!
PINT 是利用OpenCL這樣一個庫,針對各個算子,針對自己的硬件平臺進(jìn)行功能實現(xiàn)和性能優(yōu)化!
曾穎超主要做算子的優(yōu)化這方面的!
優(yōu)化的跟平臺和硬件設(shè)計特別相關(guān),
從客戶來講,基于成熟的硬件訓(xùn)練平臺,如TensorFlow等,結(jié)合自己的業(yè)務(wù)會生成自己的算法或模型。不會愿意花費(fèi)太多的精力在另一個平臺上學(xué)東西。因此PINT 框架支持了模型轉(zhuǎn)換、性能調(diào)優(yōu)。
用戶可以拿他們的模型在PINT上方便的部署,并且對性能進(jìn)行一定的調(diào)優(yōu)。
驅(qū)動框架是下面的驅(qū)動和通用平臺之間的適配層。目前主要是OpenCL,但是也提供了類似CUDA的Driver API的PINT API。
進(jìn)來的同學(xué):應(yīng)用、算子、RTL(仿真)【不太偏底層】
RTL說白了,可能就是利用API或OpenCL加速一些相應(yīng)的計算,應(yīng)用領(lǐng)域不一樣,實現(xiàn)方式略有不同!
為了支持這種生態(tài),進(jìn)行了接口上的適配和功能上的實現(xiàn)。
軟件棧
編程模型
APU成都軟件團(tuán)隊介紹
mcore + ncore = APU
指令架構(gòu)
RISC-V、Spc/Customer、GCC/LLVM
系統(tǒng)集成
Driver PCIe/Decoder/UAP、Framework OpenCL/PintUP
運(yùn)行框架
Training TensorFlow、Inference PintMini
算子算法
Multiple Scenario、Detect/Identify/Track/…
應(yīng)用工具
Debug/Performance/Demo
自動化測試
CI/CD Jenkins
協(xié)同驗證
Simulation/FPGA/ASIC
項目管理
Confluence(會議、文檔)/Jira(任務(wù))/Bitbucket(代碼)
OA(事務(wù)的處理:請假出差、財務(wù)上的流程)
成都軟件團(tuán)隊
系統(tǒng)驅(qū)動【編譯、內(nèi)核態(tài)用戶態(tài)實現(xiàn)】
系統(tǒng)應(yīng)用【API、Demo、用戶對接比較多】
框架【對主流AI框架移植,自有的高效推理框架實現(xiàn)小組】
算子【針對硬件平臺進(jìn)行功能實現(xiàn)、性能加速的小組】
算法【針對項目的模型的調(diào)試,現(xiàn)有及以后算法趨勢的研究,對產(chǎn)品的架構(gòu)和設(shè)計提供參考】
測試
硬件介紹
并行加速的芯片,可以同時運(yùn)算的計算單元。主要概念就是core,基于RSIC-V指令,是標(biāo)量計算。
AI里面運(yùn)算量比較大的,如矩陣運(yùn)算等,PINT也有一些硬件加速,如Systolic Array。
PINT core 類比 NVIDIA 的 CUDA Core
Systolic Array 類比 NVIDIA 的 Tensor Core
core也是分區(qū)域的,8個core是一組PE,PE 類比 NVIDIA 的 SM
Systolic Array對卷積和矩陣運(yùn)算效率比較高!在CV領(lǐng)域,對特定計算進(jìn)行加速,對性能提示!
各個core連接到Interconnection Network進(jìn)行處理,進(jìn)行并行計算的時候,各個core都可以對自己需要的一些數(shù)據(jù)進(jìn)行處理,處理完之后,在框架上得到想要的結(jié)果。
對外的接口,產(chǎn)品有兩種形態(tài),一種加速卡,一個叫邊緣盒子,對外接口的話通過PCIE對host端進(jìn)行交互!
芯片架構(gòu)介紹
做算子對具體的硬件設(shè)計要求比較高,特別在計算里面對性能提升多的,比如存儲的訪問,對計算加速的特殊指令使用。
core的計算,它的性能,數(shù)據(jù)流怎么走?
core對資源的訪問,分了幾級的存儲,比如說對它自己來講有Dcache,其他 core 不能訪問它的Dcache。故Dcache對該core來講是訪問最快的!
對于所有core 來講,有shared-cache,全局的。
在shared-cache以下有一個DDR。
很多算子要提升性能,就是在這里考慮很多事情,比如訪問的存儲資源的空間的分配,怎么比較優(yōu)!
優(yōu)即該資源在對應(yīng)的Dcache里就能拿到,沒必要去其他地方去取。有點(diǎn)類似Local Memory。
性能分析和調(diào)優(yōu),即訪
異構(gòu)并行加速器的框架
ncore:實現(xiàn)并行的能力
mcore:相當(dāng)于對并行core的匯總的一個關(guān)系
不退出設(shè)備的前提實現(xiàn)多個并行處理!NVIDIA的CUDA不能這樣!
Pint OpenCL簡介
OpenCL針對并行計算的通用框架,接口的規(guī)范工作。
異構(gòu)并行計算機(jī)能加速計算任務(wù)的完成,異構(gòu)框架下的加速器衍生出了多種類型,如GPU、FPGA、APU、TPU等,每種類型的加速器也會有不同廠家產(chǎn)品,如AMD、NVIDIA、Intel等,各廠商通常僅僅提供對于自己設(shè)備編程的實現(xiàn),這樣對上層應(yīng)用的規(guī)范和遷移帶來困難。
OpenCL(Open Computing Language),旨在滿足上述需求, 它是一個通用的由很多公司和組織共同發(fā)起的多CPU\GPU\其他芯片異構(gòu)計算(heterogeneous)的標(biāo)準(zhǔn),它是跨平臺的。
OpenCL( 官網(wǎng)鏈接)的標(biāo)準(zhǔn)定義和學(xué)習(xí)資料在官網(wǎng)和互聯(lián)網(wǎng)上都非常容易獲取,不多做贅述。
OpenCL編程模型的系統(tǒng)框圖如下邊:
相當(dāng)于針對并行計算的通用框架,進(jìn)行接口的規(guī)范。
利用OpenCL框架做,也是考慮到生態(tài),我們的東西與其他第三方的進(jìn)行對接,采用相應(yīng)的標(biāo)準(zhǔn),對后續(xù)的拓展和兼容是比較好的,可以省下后續(xù)的成本。
框架和應(yīng)用也是通過OpenCL的方式把它封裝起來!
算子在設(shè)備端運(yùn)行,主要用的RSIC-V編譯器,將我們的算子通過OpenCL的語法,將其編譯成我們設(shè)備端能運(yùn)行的形式。
基本上軟件實現(xiàn)的從上到下的一個框架
設(shè)備代碼編譯與運(yùn)行
使用OpenCL Kernel Wrapper/C++編程方式
實現(xiàn)kernel函數(shù)(可使用完整C++語法),記為cpp_kernel
cpp_kernel包裝成標(biāo)準(zhǔn)C語言可以調(diào)用的函數(shù),記為clinkage_kernel
使用riscv-gcc編譯器,將clinkage_kernel編譯為靜態(tài)庫(.a文件)
將clinkage_kernel包裝成opencl C語法的kernel函數(shù),記為ocl_kernel
編寫CPU端opencl程序。使用build from source的方式,將ocl_kernel源碼文件送入opencl與生成的靜態(tài)庫一起進(jìn)行編譯。之后創(chuàng)建kernel,運(yùn)行kernel。
問題提問
結(jié)合自己要從事方向
并行計算的芯片公司,做出來的東西可能要給客戶用,怎么樣能把自己做的事融入到項目里面來。
要做些什么?要做的是哪些?要做到哪些程度?免得自己不清楚在軟件里面的定位!
疑問、疑惑對工作有哪些改善的?
對任務(wù)的要求急不急啊?
怎么分配任務(wù)?
平時怎么匯報任務(wù)?匯報方式?
例會是結(jié)合每個小組。
開會是以什么樣的方式的組織?
進(jìn)來之后有個儀式感?
遇到問題找哪些人?上下游做什么的?你做的工作是哪一部分?
性能調(diào)優(yōu)是根據(jù)什么調(diào)優(yōu)的?
細(xì)一點(diǎn):counter等…,在計算過程中,在訪問資源的過程中有沒有達(dá)到很好的利用。
大一點(diǎn):結(jié)合模型,借助性能分析工具,通過打點(diǎn)的方式,知道它在設(shè)備上的占用情況是不是已經(jīng)讓設(shè)備一直不停的再動。
高一點(diǎn):整個業(yè)務(wù)上,多個模型,多個進(jìn)程等等,把任務(wù)分配合理,設(shè)備利用起來等!
老員工也在學(xué)
CV、仿真加速、區(qū)塊鏈、大數(shù)據(jù)分析
多交流
類似寒武紀(jì)這樣的AI公司,純做推理,講究功耗性能比,單位功耗里面輸出多少算力。在硬件上考慮很多東西,他們一個比較常用的方法就是算法硬件化。(用ASIC方式實現(xiàn))
優(yōu)點(diǎn):功耗很低,面積很小,速度很快!
弊端:模型支持有限制
ESWIN與這些純做推理AI公司主要區(qū)別:
定位不同,導(dǎo)致了實現(xiàn)細(xì)節(jié)不同,進(jìn)而在軟件層面工作的差異,ESWIN主要做通用型的硬件加速,通用型指很多實現(xiàn)是靠軟件來實現(xiàn)的!比如:算子實現(xiàn)、任務(wù)調(diào)度等都是通過可編程的方式實現(xiàn),對于軟件來講,靈活度比較大,挑戰(zhàn)性比較高,優(yōu)化能力都會有一個很高的要求!
對于ASIC,主要把網(wǎng)絡(luò)的流程打成一個流,以狀態(tài)機(jī)的方式流動。
兩者實現(xiàn)場景有些不一樣!
ESWIN人不多,但同時做很多東西!實現(xiàn)的方式?jīng)Q定了很多東西需要自己去做。
AI 云學(xué)院 深度學(xué)習(xí)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。