最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何閱讀并學(xué)習(xí) MegEngine 的代碼

2023-08-17 16:19 作者:曠視天元MegEngine  | 我要投稿

曠視開源的深度學(xué)習(xí)框架?MegEngine(https://github.com/MegEngine/MegEngine),MegEngine 是一個快速、可拓展、易于使用且支持自動求導(dǎo)的深度學(xué)習(xí)框架。

以最新的 release 版本 release-1.13.0 為例介紹一下 MegEngine 的代碼結(jié)構(gòu)以及如何學(xué)習(xí) MegEngine 的代碼。

1. 編譯

對于學(xué)習(xí)大型項目,我們建議源碼編譯(https://github.com/MegEngine/MegEngine#building-from-source)項目而不是直接安裝包,這樣我們可以直接修改代碼(并編譯)再觀察我們的改動的影響。

2. 從一個例子入手,自頂向下

大型項目動輒幾千上萬條 commit,代碼行數(shù)也是幾十萬行起步,把每個 commit、每一行代碼都看一遍對于個人開發(fā)者來說顯然是不現(xiàn)實的。因此我們應(yīng)該先從較為重要的、我們比較關(guān)心的文件入手,慢慢拓展我們對于項目的認知。

在 MegEngine 的官方文檔(https://www.megengine.org.cn/doc/stable/zh/getting-started/quick-start.html)中提供了一個用 MegEngine 實現(xiàn)手寫數(shù)字識別的例子。

看了這個例子后,你可能會有以下疑問:

  • MegEngine 是如何獲取數(shù)據(jù)集的呢?

  • MegEngine 如何對數(shù)據(jù)集進行處理?我又要如何實現(xiàn)自己的數(shù)據(jù)處理方法呢?

  • Functional 中的算子是如何完成計算的呢?GradManager 和 Optimizer 如何管理我的參數(shù)梯度呢?

  • 訓(xùn)練和推理出了問題,我又該如何調(diào)試呢?

每個開發(fā)者 / 用戶的關(guān)注點都可能不同,Python 層作為深度學(xué)習(xí)框架的入口,我們可以從這里的代碼學(xué)習(xí)起來:github.com/MegEngine/M…

粗略瀏覽一下目錄結(jié)構(gòu),可以看到這里實現(xiàn)了很多 Python 層的接口,可以挑一個感興趣的開始看,我們推薦從 functional 開始,這里實現(xiàn)了常用的算子,你也可以在這里添加算子。

比如我們的例子中用了 conv 算子,我們就可以跳轉(zhuǎn)到這個算子的實現(xiàn):github.com/MegEngine/M…,通過閱讀函數(shù)的注釋我們可以知道每個參數(shù)都是做什么的,逐行讀下來之后我們會發(fā)現(xiàn)這里做的最主要的一件事就是把參數(shù)扔到一個 builtin.Convolution 的東西之后去執(zhí)行(apply)了。這里做的事是:python 層的算子實現(xiàn)需要調(diào)用 C++ 的算子實現(xiàn),builtin.xxx?作為一個接口可以理解為讓我們在 Python 程序中接入我們的 C++ 算子實現(xiàn)。這里可以參考 MegEngine 官方文檔中關(guān)于添加算子的描述,找到我們關(guān)心的算子的實現(xiàn),比如 conv:github.com/MegEngine/M…

直接看算子的 C++ 實現(xiàn)可能會一頭霧水,這時候建議照著 MegEngine 的官方文檔,自底向上看(MegDNN→Graph Runtime→Imperative Runtime):www.megengine.org.cn/doc/stable/…,因為上層要調(diào)用下層的實現(xiàn)。對于各模塊作用以及調(diào)用關(guān)系感到困惑的話可以參考 MegEngine 的架構(gòu)設(shè)計文檔:www.megengine.org.cn/doc/stable/…

3. 如何進階

了解了一個算子的 Python 實現(xiàn)向下到具體的硬件實現(xiàn)之后,你可能會有更多的疑問,你可能會對 MegEngine 如何提供基礎(chǔ)設(shè)施支持上層的算法開發(fā)感到好奇,我們再看一眼 MegEngine 的架構(gòu)設(shè)計圖:

不得不說單看圖就可知這里涉及到的組件數(shù)量眾多、調(diào)用關(guān)系復(fù)雜。個人是難以在短時間內(nèi)掌握所有組件的架構(gòu)細節(jié)的(更不可能把代碼全看一遍了)。我們推薦根據(jù)架構(gòu)圖先簡單了解各個模塊的功能:每個模塊的作用、與上下游其他模塊之間的關(guān)系。在對于項目整體架構(gòu)有了粗略把握之后,再對我們感興趣的模塊進行更深入的研究。

  • MegEngine 中動態(tài)圖(imperative runtime)部分的內(nèi)容主要在:https://github.com/MegEngine/MegEngine/tree/master/imperative

  • MegEngine 中靜態(tài)圖(graph runtime)部分的內(nèi)容主要在:https://github.com/MegEngine/MegEngine/tree/master/src

  • MegEngine 中硬件算子庫(MegDNN)部分的內(nèi)容主要在:https://github.com/MegEngine/MegEngine/tree/master/dnn

感興趣的同學(xué)可以深入源碼進行研究,可以邊看代碼邊改、解決項目現(xiàn)有的?issues、為倉庫貢獻代碼等都是很好的學(xué)習(xí)方式。

4. 尋求幫助

一個人學(xué)習(xí)大型項目難免會有非常多的疑問,在學(xué)習(xí)的過程中應(yīng)當多查閱資料、多于他人交流。遇到困難時可以獲得幫助的手段有:

  • Google

  • ChatGPT

  • 官方文檔:https://www.megengine.org.cn/doc/stable/zh/getting-started/quick-start.html

  • 官方論壇:https://discuss.megengine.org.cn/

  • MegEngine 用戶交流 QQ 群:1029741705

歡迎參與 MegEngine 社區(qū)貢獻,成為?Awesome MegEngineer,榮譽證書、定制禮品享不停。


如何閱讀并學(xué)習(xí) MegEngine 的代碼的評論 (共 條)

分享到微博請遵守國家法律
石家庄市| 石狮市| 吉安县| 隆子县| 深泽县| 红安县| 普格县| 禄丰县| 汝阳县| 哈巴河县| 宁津县| 集贤县| 吉林市| 博客| 安陆市| 卢龙县| 改则县| 忻州市| 曲周县| 于田县| 洪湖市| 调兵山市| 丹巴县| 澄城县| 延长县| 抚松县| 陆河县| 天镇县| 许昌县| 赫章县| 壶关县| 苏州市| 运城市| 霍山县| 河曲县| 浮山县| 南陵县| 衡东县| 锡林郭勒盟| 泸州市| 阳信县|