久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

動(dòng)手學(xué)深度學(xué)習(xí)框架(1)

 文明世界拼圖 2021-11-19

前言

Hello,,大家好,,歡迎來到『自由技藝』的學(xué)習(xí)小館。在之前的文章中,,我介紹了一些互聯(lián)網(wǎng)的知識(shí),,比如加密算法、編譯器,、web 服務(wù)等,,也介紹了些基本的 AI 算法,最多的還是 C++ 系列文章,,內(nèi)容淺顯易懂,,附有能直接運(yùn)行的樣例代碼,對(duì)新手還算是很友好吧~,。接下來,,我將開啟一個(gè)新的系列專題 - 動(dòng)手學(xué)習(xí)深度學(xué)習(xí)框架。之前李沐大神有個(gè)『動(dòng)手學(xué)深度學(xué)習(xí)』系列很受歡迎,,對(duì)于我這個(gè)專題,,不指望能成為爆款,本著交流學(xué)習(xí)的目的,,希望借此讓大家了解下深度學(xué)習(xí)框架的設(shè)計(jì)思想及實(shí)現(xiàn)方法,。本系列專題以百度 PaddlePaddle(飛槳)開源深度學(xué)習(xí)框架為例,深入淺出,,學(xué)完本系列專題希望不僅能讓你了解到神經(jīng)網(wǎng)絡(luò)的計(jì)算原理,,同時(shí)也學(xué)到一些 C++ 的優(yōu)秀實(shí)踐,從源碼開始讀,,掌握每個(gè)小的知識(shí)點(diǎn),。

深度學(xué)習(xí)框架到底能干什么

首先,我們用 tensorflow,、pytorch 或者 paddlepaddle 寫一段 python 代碼來組建一個(gè)神經(jīng)網(wǎng)絡(luò)模型,,然后訓(xùn)練,達(dá)到一定精度后再保存模型,,最后基于訓(xùn)練好的模型做圖像識(shí)別,、語音識(shí)別等任務(wù)。這個(gè)流程想必大家都很清楚了,那這一切都是誰來計(jì)算的呢,?答案是后臺(tái)框架,,你所寫的 python 代碼只不過是前端 API,真正調(diào)用的是后端 C 或 C++ 計(jì)算邏輯,,而前端 python API 和 后端計(jì)算邏輯正是通過 pybind 綁定的,。

深度學(xué)習(xí)框架最基本的功能就是要能提供一系列算子(俗稱『OP』,operator 的簡(jiǎn)稱),,支持前向計(jì)算和反向梯度更新,。如此說來,框架應(yīng)該很簡(jiǎn)單呀,。實(shí)則不然,,且聽我細(xì)細(xì)道來。首先,,這些 OP 數(shù)量很大,,比如卷積、全連接,、各種激活函數(shù)(如 Relu,、Sigmoid)、各種梯度更新算法(如 Adam,、RMS)等等,。其次,組建神經(jīng)網(wǎng)絡(luò)模型時(shí),,需要提供靜態(tài)圖模式(聲明式編程)和動(dòng)態(tài)圖模式(函數(shù)式編程),。動(dòng)態(tài)圖好理解,就是我們平時(shí)寫代碼的邏輯,,do A -> do B -> do C,,按流程順序執(zhí)行任務(wù),每寫完一行代碼就能得到相應(yīng)的結(jié)果,。而靜態(tài)圖就不大好理解了,,用戶所寫的代碼僅僅是為了構(gòu)建一張圖,,圖構(gòu)建完之后再去執(zhí)行,,執(zhí)行完才能得到結(jié)果,而不像動(dòng)態(tài)圖那樣能實(shí)時(shí)獲取結(jié)果,。靜態(tài)圖這種方式有什么好處呢,?答案是便于做性能優(yōu)化,通過優(yōu)化這張圖的結(jié)構(gòu),,使得程序執(zhí)行效率更高,。靜態(tài)圖中的『圖』,又叫做 SSA Graph,Directed Acyclic Single Static Assignment Graph(有向無環(huán)靜態(tài)單賦值圖),,那這張圖是如何構(gòu)建出來的呢,?如何去描述?如何把它序列化成二進(jìn)制字節(jié)流在不同進(jìn)程間傳遞呢,?如何執(zhí)行的,?又是如何優(yōu)化的呢?

還有,,樣本數(shù)據(jù)該如何存儲(chǔ)呢,??jī)?nèi)存?緩存,?SSD,?還是哈希表,這些存儲(chǔ)資源該怎么管理呢,?原始樣本文件又如何轉(zhuǎn)化成模型『認(rèn)識(shí)』的 feed data 呢?

另外,,模型如何保存呢?保存完整模型還是保存部分模型(比如只保留模型最后兩層),?模型又是如何加載呢,?從頭開始訓(xùn)練(冷啟動(dòng))和增量訓(xùn)練(熱啟動(dòng))又有什么區(qū)別?

更重要的是,,隨著模型越來越大,,參數(shù)規(guī)模達(dá)到百億、千億,,甚至萬億,,對(duì)模型的訓(xùn)練性能提出了非常高的要求,高性能的訓(xùn)練框架不僅能大大縮短訓(xùn)練時(shí)間,,同時(shí)大大節(jié)約硬件資源,,這可是實(shí)打?qū)嵉恼娼鸢足y呀。另外,,在推薦領(lǐng)域,,All is Embedding,大規(guī)模稀疏參數(shù)需要大量的存儲(chǔ)空間,,單機(jī)無法容納,,需要借助分布式文件系統(tǒng)。于是,,參數(shù)服務(wù)器(Parameter Server)這一解決方案應(yīng)運(yùn)而生,。

考慮到不同廠家的各類 AI 芯片,如英偉達(dá)的 GPU,、華為的昇騰,、百度的昆侖等芯片,,想要充分利用這些高性能 AI 硬件的能力,軟件必須得兼容這些硬件,,而它們的編程語法, 編譯方法和英特爾的 x86 CPU 又不一樣,,比如 cuda 編程等,硬件之間又涉及到通信問題,,如 nccl,。自然地,CPU 參數(shù)服務(wù)器進(jìn)化成了異構(gòu)參數(shù)服務(wù)器,。參數(shù)服務(wù)器系統(tǒng)中又牽扯出了各式各樣的并行優(yōu)化策略,,如數(shù)據(jù)并行、模型并行,、流水線并行,、混合并行、自動(dòng)并行等,,數(shù)據(jù)和模型中的各個(gè)層(layer)要如何切分,,才能充分利用硬件資源呢?不僅如此,,分布式系統(tǒng)中的通信算法,,如 gloo、mpi 等,,不同進(jìn)程間又涉及到同步問題,,如 barrier 算法。

從應(yīng)用層面看,,還包括基于 k8s,、docker、yarn 等訓(xùn)練資源調(diào)度系統(tǒng)的搭建,、實(shí)現(xiàn)基于 C++,、Java、Go 等主流語言的線上低時(shí)延, 高吞吐推理預(yù)測(cè)服務(wù),、終端低功耗的 PaddleLite 解決方案等,。一款合格的深度學(xué)習(xí)訓(xùn)練框架應(yīng)該是工業(yè)級(jí)的產(chǎn)品,具備高性能,、支持各類 AI 硬件,、能大規(guī)模部署、能支持所有 AI 模型,,API 還必須得是用戶友好的,。

希望上述這些問題,在接下來的學(xué)習(xí)中,,都能一一找到答案,,敬請(qǐng)期待。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多