熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

"); //-->

博客專欄

EEPW首頁(yè) > 博客 > 如何參與PyTorch社區(qū)開(kāi)源貢獻(xiàn)?

如何參與PyTorch社區(qū)開(kāi)源貢獻(xiàn)?

發(fā)布人:計(jì)算機(jī)視覺(jué)工坊 時(shí)間:2021-12-08 來(lái)源:工程師 發(fā)布文章

以下文章來(lái)源于GiantPandaCV ,作者BBuf

作者丨BBuf233

來(lái)源丨GiantPandaCV

編輯丨極市平臺(tái)

導(dǎo)讀

本文作者通過(guò)以第一視角展示了自己在2021年為Pytorch發(fā)現(xiàn)了的BUG,以及提了相關(guān)PR以及ISSUE,給想為開(kāi)源社區(qū)做貢獻(xiàn)的小伙伴們提供一些思路~

作為深度學(xué)習(xí)框架OneFlow的一個(gè)全職開(kāi)發(fā)者(聲明我是菜雞),基本上每天都會(huì)和PyTorch打交道,所以自問(wèn)自答一下這個(gè)問(wèn)題,希望對(duì)想為開(kāi)源項(xiàng)目做貢獻(xiàn)的小伙伴們提供一些思路也希望這個(gè)問(wèn)題能獲得更多回復(fù)。

OneFlow最近一年切到動(dòng)態(tài)圖模式之后就非常注重和PyTorch在API上進(jìn)行對(duì)齊,以提升動(dòng)態(tài)圖模式的易用性,也即我們的:import oneflow as torch 特性。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們?cè)趯?xiě)Op的時(shí)候除了肉眼對(duì)Python API進(jìn)行對(duì)齊之外還要寫(xiě)PyTorch的測(cè)試樣例。

動(dòng)態(tài)圖Op開(kāi)發(fā)前期非常痛苦,因?yàn)闇y(cè)試樣例的代碼比較多這對(duì)開(kāi)發(fā)者和Reviewer來(lái)說(shuō)都很痛苦。后來(lái)@daquexian 寫(xiě)了一個(gè)自動(dòng)測(cè)試框架可以非常方便的測(cè)試OneFlow Op的API接口以及計(jì)算結(jié)果是否和PyTorch的接口完全對(duì)齊。

這個(gè)自動(dòng)測(cè)試框架只有兩個(gè)Python腳本,對(duì)原始的PyTorch進(jìn)行了一個(gè)封裝(我把它叫做High Level PyTorch),我們做測(cè)試的時(shí)候用這個(gè)High Level的PyTorch進(jìn)行測(cè)試。測(cè)試框架可以像寫(xiě)dsl一樣隨意指定輸入Tensor以及Paramter的形狀和取值范圍等,然后運(yùn)行時(shí)會(huì)自動(dòng)獲取程序中的輸入Tensor,中間Tensor,以及輸出Tensor和它們對(duì)應(yīng)的梯度Tensor,甚至是nn.Module的Parameter,只有OneFlow和PyTorch的所有參數(shù)和中間Tensor全部一樣時(shí)才可以通過(guò)測(cè)試。這里有個(gè)issue一看便知 :https://github.com/Oneflow-Inc/oneflow/issues/5549  。

后面我基于這個(gè)框架下進(jìn)行了一些改進(jìn),比如自動(dòng)codegen出錯(cuò)的代碼,可以打印出錯(cuò)的程序方便OneFlow的開(kāi)發(fā)者進(jìn)行Debug以及跑CI的過(guò)程中直接暴漏出錯(cuò)程序。后面我會(huì)考慮寫(xiě)一篇文章介紹我們的自動(dòng)測(cè)試框架,歡迎大家關(guān)注,它的可移植性非常強(qiáng),非常方便的可以改到任何深度學(xué)習(xí)框架。

其實(shí)不讀上面那段話也完全沒(méi)有關(guān)系,我想表達(dá)的是我為PyTorch做的貢獻(xiàn)主要是我在開(kāi)發(fā)OneFlow的算子過(guò)程中基于OneFlow的自動(dòng)測(cè)試框架發(fā)現(xiàn)和完成的。

說(shuō)回給PyTorch做貢獻(xiàn),我個(gè)人的觀點(diǎn)是,無(wú)論是提PR還是提issue實(shí)際上都是對(duì)開(kāi)源社區(qū)做了貢獻(xiàn)。如果只是想做一些微小的貢獻(xiàn)(比如我,因?yàn)樽约哼€有工作),那么BUG修復(fù)和一些Feature的Small Fix比較適合提PR,而一些侵入軟件系統(tǒng)比較深的問(wèn)題如果我們解決需要花很長(zhǎng)時(shí)間或者目前能力還不夠,這個(gè)時(shí)候就可以提交issue給PyTorch團(tuán)隊(duì)。下面我將以我的第一視角,來(lái)展示一下2021年我為Pytorch發(fā)現(xiàn)了哪些BUG,以及我提了什么PR以及ISSUE。

1. PyTorch CPU反卷積實(shí)現(xiàn)有BUG

在實(shí)現(xiàn)OneFlow的cpu group conv的時(shí)候,通過(guò)我們的自動(dòng)測(cè)試框架測(cè)試發(fā)現(xiàn)一直有一些特殊的樣例OneFlow和Pytorch無(wú)法對(duì)齊,最后Debug良久發(fā)現(xiàn)就是nn.ConvTranspose1D里面的weight的梯度無(wú)法對(duì)齊。然后在錯(cuò)誤樣例的一步步指引下,最終定位到一組PyTorch在CPU和GPU上輸出結(jié)果不一致的問(wèn)題。

趕緊整理出了復(fù)現(xiàn)代碼給PyTorch提了issue:https://github.com/pytorch/pytorch/issues/68868 。

1.jpg

為PyTorch指出它們的反卷積在CPU上實(shí)現(xiàn)有誤

并且很快獲得了PyTorch團(tuán)隊(duì)的回復(fù),他們確認(rèn)是MKLDNN那部分實(shí)現(xiàn)出了問(wèn)題,并表達(dá)了感謝以及他們正在修復(fù)這個(gè)問(wèn)題。

2.jpg

PyTorch官方做問(wèn)題確認(rèn)

2. 我給PyTorch的第一個(gè)PR

我在OneFlow開(kāi)發(fā)Upsample這個(gè)nn.Module的時(shí)候發(fā)現(xiàn)PyTorch的上采樣系數(shù)在在非整數(shù)的情況下會(huì)出錯(cuò),源于PyTorch的代碼實(shí)現(xiàn)錯(cuò)誤,和OpenCV并沒(méi)有對(duì)齊。我將這個(gè)bug報(bào)告在了https://github.com/pytorch/pytorch/issues/65200 中。

然后我開(kāi)始修復(fù)這個(gè)問(wèn)題,并快速的提交了一個(gè)PR給PyTorch官方Review:https://github.com/pytorch/pytorch/pull/61166 。在 jbschlosser 給出代碼方面的review意見(jiàn)之后,我修了他提的意見(jiàn)并且給PyTorch添加了觸發(fā)這種BUG的測(cè)試樣例就開(kāi)始了跑PyTorch的CI的流程。但跑完之后PR還是遲遲沒(méi)有合并,后來(lái)我就每周在PR下面催促他們approve以及合并,直到一個(gè)多月后這個(gè)PR終于合并進(jìn)去了QAQ,PyTorch的第一次合并的流程感覺(jué)還是很慢的。(至少對(duì)我來(lái)說(shuō)。

3.jpg

PyTorch的第一個(gè)PR

3. 發(fā)現(xiàn)了幾個(gè)文檔錯(cuò)誤相關(guān)的PR以及FX模塊的一些錯(cuò)誤

后面瀏覽PyTorch相關(guān)文檔時(shí)發(fā)現(xiàn)了一些文檔錯(cuò)誤以及FX的一些錯(cuò)誤,又順手提了2個(gè)PR并合并進(jìn)去了。https://github.com/pytorch/pytorch/pull/64802 & https://github.com/pytorch/pytorch/pull/68043 。當(dāng)然文檔級(jí)的失誤很少,如果你恰好發(fā)現(xiàn)了就嘗試體提交一下吧,就可以成為contributor了。不過(guò),文檔也是深度學(xué)習(xí)框架的一個(gè)重要組成部分。

4. 又發(fā)現(xiàn)了一些BUG&疑惑

同樣還是在開(kāi)發(fā)OneFlow算子的時(shí)候,通過(guò)OneFlow自動(dòng)測(cè)試框架,發(fā)現(xiàn)PyTorch SoftPlus的梯度有一些問(wèn)題。然后整理復(fù)現(xiàn)代碼提交issue之后發(fā)現(xiàn)這個(gè)問(wèn)題已經(jīng)在PyTorch最近一次版本更新后解決掉了。

https://github.com/pytorch/pytorch/issues/61568

然后還有一件疑惑的事情,我在給OneFlow實(shí)現(xiàn)CPU反卷積Kernel的時(shí)候通過(guò)自動(dòng)測(cè)試框架發(fā)現(xiàn)在一些非法的數(shù)據(jù)(反卷積的核的大小比輸入長(zhǎng)度還大的時(shí)候)上PyTorch仍然正常輸出了答案,而在OneFlow和PaddlePaddle上均有對(duì)應(yīng)的錯(cuò)誤檢查并拋出異常。我將其反饋給了PyTorch,但一直沒(méi)有得到回復(fù)。https://github.com/pytorch/pytorch/issues/66542

好了,以上就是今年我加入OneFlow做開(kāi)發(fā)的過(guò)程中順帶發(fā)現(xiàn)的PyTorch問(wèn)題以及做的貢獻(xiàn)了。當(dāng)我們覺(jué)得某些情況PyTorch有BUG的時(shí)候,要大膽質(zhì)疑并用其它的框架去驗(yàn)證。 再次回到題目,如何參與PyTorch社區(qū)開(kāi)源貢獻(xiàn)呢?我們要勇于用issue提出bug,用pr解決bug。至于如何提pr的教程,Google會(huì)很詳細(xì)的告訴你。

成為很火的開(kāi)源框架的Contributor是一件不錯(cuò)的事情,特別是對(duì)于學(xué)生或者初入職場(chǎng)的工程師來(lái)說(shuō),簡(jiǎn)歷上可能是一個(gè)加分項(xiàng)。

歡迎大家為PyTorch(https://github.com/pytorch/pytorch)

以及國(guó)內(nèi)的深度學(xué)習(xí)框架比如:

OneFlow(https://github.com/Oneflow-Inc/oneflow) 

Paddle(https://github.com/PaddlePaddle/Paddle) 

Mindspore(https://github.com/mindspore-ai/mindspore) 

MegEngine(https://github.com/MegEngine/MegEngine) 

等做出貢獻(xiàn),成為Contributor。

本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼


電流傳感器相關(guān)文章:電流傳感器原理
電子負(fù)載相關(guān)文章:電子負(fù)載原理


關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉