1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何欣賞一個(gè)深度學(xué)習(xí)框架?

        共 2476字,需瀏覽 5分鐘

         ·

        2020-03-29 23:21







        e20fcdfce3986dd2b47d8f0ca4c4734f.webp


        ??新智元報(bào)道??

        來源:知乎

        作者:袁進(jìn)輝

        編輯:元子

        【新智元導(dǎo)讀】一個(gè)框架好與不好,是有很多維度去看待的,使用者和框架開發(fā)者的關(guān)注點(diǎn)可能就不一樣。深度學(xué)習(xí)框架發(fā)展到今天,有些功能已經(jīng)變成常規(guī)需求了,一個(gè)后出現(xiàn)的框架要追求成功,僅僅沒有短板還不夠,還必須有長(zhǎng)板,獨(dú)門功法,有超越于其它框架的地方「新智元急聘主筆、高級(jí)主任編輯,添加HR微信(Dr-wly)或掃描文末二維碼了解詳情?!?/span>

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

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

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

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

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

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

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

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

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

        深度學(xué)習(xí)框架應(yīng)該關(guān)注的三個(gè)問題

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

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

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

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

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

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

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

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

        (8)其它待補(bǔ)充。

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

        本文授權(quán)轉(zhuǎn)載自袁進(jìn)輝的知乎專欄


        bc9aa5c1570ce8d9aeff3c7f3334d37d.webp


        瀏覽 55
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            艹比视频在线观看 | 日本a在线免费观看 | 色五月天综合 | asso1d老妇肉体pics 少妇玉梅高潮久久久 | 国产免费传媒av片在线 | 内射欧美 | 黑人粗大在线观看 | 一级A片亲子乱中文 | 免费黄片视频在线观看 | 日本伦理中文字幕 |