<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何評判一個深度學習框架?

          共 2499字,需瀏覽 5分鐘

           ·

          2022-02-17 11:38

          ↑↑↑點擊上方藍字,回復資料,10個G的驚喜

          編輯:Sophia-計算機視覺聯(lián)盟??轉(zhuǎn)載于 :袁進輝老師

          3月份,國內(nèi)有多個深度學習框架開源,OneFlow也在為開源做最后的準備,2020是深度學習框架領(lǐng)域非常熱鬧的一年。一個框架好與不好,是有很多維度去看待的,使用者和框架開發(fā)者的關(guān)注點可能就不一樣。

          框架的用戶和開發(fā)者心態(tài)迥異,關(guān)注點完全不同


          對于絕大部分框架用戶來說,不會深度入到框架內(nèi)部實現(xiàn)中去,反而使用體驗是第一位的,文檔和案例是否齊全,能否按照README就可以非常容易完成初體驗。

          而對于框架開發(fā)者來說,就是另一種心態(tài)。如果他正在框架研發(fā),看到一個新框架,首先是去看,自己的獨門秘技在這個新框架中是怎么解決的,是否已經(jīng)實現(xiàn)了,實現(xiàn)的是否高明;然后馬上去看,對方有沒有什么獨門功法可供自己學習的。

          當然,對于框架的成功來說,從用戶角度去看絕對是最重要的,框架開發(fā)者做抉擇時,用戶需求應高于技術(shù)審美。在這篇文章中,我重點從框架開發(fā)者角度來分享一些我個人在技術(shù)上的關(guān)注點。先討論如何從總體上評估一個框架,然后再分具體課題來深入框架內(nèi)部細節(jié)。

          框架發(fā)展越來越完善,長江后浪如何超越前浪?


          深度學習框架發(fā)展到今天,有些功能已經(jīng)變成常規(guī)需求了,譬如易用,高效,完備(算子、模型、配套工具鏈、文檔、案例),一個新的框架在這些方面應該沒有明顯的短板。一個后出現(xiàn)的框架要追求成功,僅僅沒有短板還不夠,還必須有長板,獨門功法,有超越于其它框架的地方,或者其它框架根本做不到,或者很難做到,只有這樣,才有可能先從細分市場切開一個小口,進而站穩(wěn)腳本。

          創(chuàng)新點是我首先關(guān)注的問題。框架開發(fā)者自身作為技術(shù)極客,對創(chuàng)新這一點極為珍視,如果沒有思路上的突破,僅僅是按老路重新造個輪子來說,是引發(fā)不了技術(shù)高手的興趣的,這是小同行非常關(guān)心的一個問題:這個新的框架給框架類產(chǎn)品帶來了什么增量,也就是創(chuàng)新的部分。同時,創(chuàng)新對框架成功也至關(guān)重要。Caffe和Theano是框架的鼻祖,分別都貢獻了一些最原始的思路。TensorFlow和MXNet都以更高的工程質(zhì)量(工業(yè)級)把計算圖抽象推向一個新高度,二者相對于Caffe而言主要是引入了計算圖抽象,相對于Theano而言,主要是高質(zhì)量C++實現(xiàn)帶來效率和擴展性。PyTorch則成功引入了Eager執(zhí)行的模式, 而且實現(xiàn)了Python的無縫銜接(嚴格來說Chainer是最早推行這個思路的框架,被PyTorch發(fā)揚光大)。國產(chǎn)深度學習框架要殺出重圍,大的思路創(chuàng)新絕對是首要因素。微創(chuàng)新不足以改變格局,而且還容易被學習和抄襲。

          工程質(zhì)量是我關(guān)注的第二個問題。工程質(zhì)量不過關(guān),不會走的很遠。有時能看到一些對項目評價,“學生作品”還是“工業(yè)級代碼”,這是有一定根據(jù)的。可以從多個層次來考察,從大到小,譬如設計,架構(gòu),模塊,模式,抽象,直至微觀的某個算法實現(xiàn),講究恰到好處,尤其注意不要over engineering,增之一分則太肥,減之一分則太瘦;也可以從代碼美觀角度來看,譬如google style,clang-format,cpplint等工具的使用;還有一個考察角度是,這份代碼基礎是否適合大規(guī)模協(xié)作開發(fā),代碼量雖然很大,高質(zhì)量代碼仍是非常容易被理解的,以及代碼基礎是否引入了一些約束規(guī)范,譬如防御式編程,能防范一些低級錯誤。代碼實現(xiàn)是程序員思想的體現(xiàn),寫出漂亮代碼的前提是,要有一個清澈的大腦和對問題本質(zhì)的深入思考。

          深度學習框架應該關(guān)注的三個問題


          和深度學習框架相關(guān)的一些具體技術(shù)實現(xiàn)是我關(guān)注的第三個問題。包含的問題有:

          (1)深度學習框架都使用了數(shù)據(jù)流抽象(Eager模式是控制流),我會看看這個框架是怎么支撐這個抽象的,算子,圖,流等怎么實現(xiàn)的,怎么定義算子,怎么實現(xiàn)多數(shù)據(jù)類型、多設備的Kernel,計算圖是怎么實現(xiàn)的等等。

          (2)計算圖通過底層引擎來執(zhí)行,一般的原理是,給定一個計算圖,按照數(shù)據(jù)依賴拓撲遍歷,這是最基本的實現(xiàn),如果底層設備是CPU,那么執(zhí)行引擎就是線程池,需要關(guān)注Dispatcher和線程池如何交互的,如果底層設備是GPU, Dispatcher和底層設備是如何交互的,因為GPU自身特點,對stream, event的運用是關(guān)鍵。

          (3)內(nèi)存是怎么管理的,靜態(tài)圖引擎可以做很多內(nèi)存管理的技術(shù),模型推理基本是靜態(tài)圖,因此Inference framework對靜態(tài)內(nèi)存管理體驗是最深的,不需要為每個blob單獨去做內(nèi)存分配,可以為整個圖分配一塊內(nèi)存;動態(tài)圖的內(nèi)存管理怎么做,垃圾回收,生命周期管理等等也是很復雜的問題;亞線性內(nèi)存分配,以及微軟的Zero也屬于內(nèi)存優(yōu)化技術(shù)之列。

          (4)接口易用性問題,動態(tài)圖和靜態(tài)圖運行方式的支持,實際上主要涉及c++和python交互的問題。

          (5)單設備代碼編譯優(yōu)化問題,主要涉及設備無關(guān)的圖優(yōu)化,業(yè)界既有專門做這項工作的編譯器,譬如Glow, XLA,TVM Relay,一些深度學習框架也包含了此類優(yōu)化,譬如Paddle, MegEngine。

          (6)設備相關(guān)代碼優(yōu)化的解決辦法,即代碼生成,TVM, Jittor, PlaidML屬于此列。

          (7)對分布式并行的解決思路,譬如對數(shù)據(jù)并行,模型并行,流水并行的支持;即使單純看數(shù)據(jù)并行,也有一系列辦法,譬如PS,Ring allreduce, double tree allreduce,業(yè)界的實現(xiàn)包含NCCL, 字節(jié)跳動的BytePS,微軟的DeepSpeed等。

          (8)其它待補充。

          如果既有大的思路創(chuàng)新,也在以上各方面都做的很棒,那就很接近技術(shù)上的完美了。


          1. 準備寫本書
          2. 【虎年大吉】技術(shù)年貨大禮包
          3. Pytorch 常用損失函數(shù)拆解
          4. 吳恩達最新采訪:以數(shù)據(jù)為中心的AI
          5. 人人都能看懂的EM算法推導
          6. 騰訊發(fā)布國內(nèi)首份可解釋 AI 報告!

          三連在看,月入百萬??


          瀏覽 20
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美亚洲91 | 天天做夜夜爱 | 国产成人久久久 | 久操免费观看 | 日本一级红色片 |